Skip to content

Version 6.3.0 - #740

Open
cdgriffith wants to merge 66 commits into
masterfrom
develop
Open

cdgriffith wants to merge 66 commits into
masterfrom
develop

Conversation

@cdgriffith

@cdgriffith cdgriffith commented Apr 5, 2026 •

Copy link
Copy Markdown
Owner

Summary

Version 6.3.0: new features and bug fixes for the 6.x line, plus a full-codebase review pass that fixed stability, security and correctness problems and added FFmpeg 9 / newer encoder support. Everything below is already on develop and fully listed in CHANGES.

Issues addressed

Links only, so merging does not auto-close anything. Please close each once confirmed:

Pull requests included:

Review pass (this release)

A full-codebase review of develop was done by area (core runtime, config/queue/history, GUI, Rigaya encoders, FFmpeg hardware encoders, software encoders, filters/streams). Each fix was written test-first, merged and re-reviewed. Highlights:

  • Data safety: atomic config/queue/history writes with backup, a corrupt file is moved aside instead of overwritten, and one bad profile or queue item no longer blocks startup.
  • Safety prompts: Esc no longer overwrites an existing output file, and the shutdown/sleep action no longer runs when an encode is cancelled or paused.
  • Encode correctness: encodes killed by a signal are no longer reported as successful, cancel/pause affect whole process trees, and previews render on Linux/macOS.
  • Rigaya: fixed invalid --pa, --vpp-deblock and --vpp-fps usage; added NVEnc --tune and quality-based VBR (--qvbr).
  • FFmpeg 9 readiness: removed NVENC presets are migrated automatically, VAAPI pipeline rebuilt (resize, 10-bit, software-decode fallback), hvc1 tagging for HEVC in MP4/MOV, VVC two-pass fixed.
  • New options: SVT-AV1 tunes and variance boost, and more HEVC/AV1 NVENC options.

Testing

  • Full unit suite on the merged branch: 1362 passed, 8 skipped (tests/e2e excluded).
  • tests/e2e: 84 passed, 16 failed, 30 skipped, identical to clean develop (the failures need QSV AV1 hardware or webp tooling).
  • NVENC, VAAPI, VideoToolbox and VCEEncC changes were verified against docs and unit tests on generated commands only; they still need hardware testing before release (VAAPI 10-bit/HDR and fallback decode, NVENC preset migration, VideoToolbox single-pass, hvc1 playback on Apple devices, VCE --pa).

Full changelog

  • Adding Add ffmpeg nlmeans_opencl support #202 new video filters to the Advanced panel: vibrance, color temperature, curves presets, colorbalance presets, unsharp mask, deflicker, pad/letterbox, LUT3D file loading, and nlmeans_opencl GPU-accelerated denoise — with rigaya hardware encoder support for curves (--vpp-curves), unsharp (--vpp-unsharp), pad (--vpp-pad), LUT3D (--vpp-colorspace lut3d), and nlmeans_opencl (--vpp-nlmeans)
  • Adding Resizable window issue, text still not visible #212 full source and output file path tooltip on hover for queue items, with responsive text eliding for long file names (thanks to bmcassagne)
  • Adding [Feature Request] add lossless mode #344 lossless encoding option for AVC (x264), AV1 (AOM), VP9, and AV1 (SVT-AV1) encoders
  • Adding Feature request: Add gamma correction option #377 Gamma #550 Add Gamma option to the EQ filter #694 gamma and hue options to the Equalizer in the Advanced panel (FFmpeg eq/hue filters for software encoders, --vpp-tweak for rigaya) (thanks to lincsat, DCNerds, and Patrick Isbendjian)
  • Adding Add sharpen filters #405 sharpen filter (CAS) to the Advanced panel (FFmpeg cas filter for software encoders, --vpp-unsharp for rigaya)
  • Adding Set GOP Length #447 GOP length setting to the Advanced panel (FFmpeg -g, rigaya --gop-len) (thanks to colemar)
  • Adding [QSVEnc] add presets (7.37+ versions) #457 QSVEncC --tune parameter support (default, psnr, ssim, ms_ssim, vmaf, perceptual) for HEVC, AV1, and AVC encoders (thanks to Marco Ravich)
  • Adding Add aom 2 pass CRF #480 2-pass CRF encoding for the AOM AV1 encoder for improved quality (thanks to jimbow973)
  • Adding Add deinterlace options to profile #498 deinterlace method and mode options (yadif, bwdif, w3fdif, estdif with send_frame/send_field modes) to the Advanced panel, with persistence in profiles
  • Adding Add "same as source" option for output extension #520 "Source" option for the output file extension, matching the output container to the source format for batch encoding mixed MKV/MP4 files (thanks to x9sim9)
  • Adding Concatenation Builder - Change Default Base Folder / Drag Folder Input #523 drag and drop folder support in the Concatenation Builder (thanks to GokieKS)
  • Adding -movflags +faststart toggle #526 -movflags +faststart toggle for MP4/MOV containers, enabled by default (thanks to Aria)
  • Adding Profiles: Audio match by codec and profile #594 codec and codec+profile matching options for audio profile pattern matching, allowing users to distinguish between e.g. DTS-HD MA and regular DTS tracks (thanks to Damundai)
  • Adding Option to disable/enable subtitle 'default' flag and 'forced' flag in profiles #665 profile-level control for subtitle "default" and "forced" disposition flags with Keep Source, Clear All, and Set on First Track modes (thanks to legoleigh)
  • Adding Keep source loaded after encoding #677 "Keep source loaded after adding to queue" setting to allow tweaking and re-queuing the same source without reloading (thanks to Mine181)
  • Adding FastFlix allow convert HE-AAC ? #682 HE-AAC and HE-AAC v2 audio profile selection for the libfdk_aac codec, including in profile audio matching and for rigaya encoders (HE-AAC v2 falls back to HE-AAC for non-stereo output) (thanks to Augusto7743)
  • Adding Reverse Video option in the Advanced panel (applies FFmpeg reverse video filter and areverse audio filter for converted tracks, always seeking on the input side so trimmed segments stay aligned)
  • Adding rigaya encoder support for Equalizer (--vpp-tweak), Denoise (--vpp-nlmeans/knn/pmd), Deblock (--vpp-deblock), Output FPS (--vpp-fps), and Video Track Title — only Video Speed and Reverse Video remain unsupported
  • Adding Can the metadata of HDR10 videos be extracted separately? #544 Download HDR10 Metadata button in Source Details tab for exporting mastering display and content light level data in x265-compatible format (thanks to yundebian918)
  • Adding structured table view to Source Details tab with grouped sections, human-readable value formatting, Download JSON export, and full path tooltips on source/output filename fields
  • Adding warning in Data & Attachments tab and reason text when tracks are incompatible with the output format (e.g. data streams in MKV)
  • Adding Go-based Windows installer, launcher and uninstaller using an embeddable Python distribution (per-user and all-users installs, Add/Remove Programs integration, upgrades from previous NSIS installs) replacing the PyInstaller and NSIS Windows builds, plus a portable zip release
  • Changing Advanced panel layout to use QGroupBox sections (Video Details, Frame Rate, Video Processing, Color & Appearance, Color, Output) with restoration filters separated from color correction filters
  • Fixing Fix PyInstaller LD_LIBRARY_PATH contamination breaking FFmpeg on Linux #766 FFmpeg and other external tools failing on Linux PyInstaller builds (e.g. AUR fastflix-bin) with library symbol errors due to inherited bundled LD_LIBRARY_PATH (thanks to anne-o-pixel)
  • Fixing Video ToolBox codec does not work (M4 Pro Mac Mini) #741 VideoToolbox HEVC and H264 encoders passing invalid numeric profile index instead of profile name, causing "incorrect parameters" errors on macOS (thanks to enaveso)
  • Fixing unable to remove from queue #560 queue items could not be removed while encoding — now allows removing non-running items and grays out unavailable controls (move, reload, load queue) during encoding (thanks to 54x1)
  • Fixing Error generating thumbnail (dolby vision track) #736 thumbnail and crop preview generation failing with FFmpeg 8.0+ by adding -update 1 flag required by the image2 muxer for single-image output (thanks to kliffgomel)
  • Fixing Conversion Error with Google Phone Videos #738 conversion error with Google Pixel videos by disabling data stream mapping for Matroska containers which do not support data streams (attachments like fonts are still allowed) (thanks to Hankuuuu)
  • Fixing attachment streams (fonts, etc.) losing mimetype/filename metadata during conversion due to -map_metadata -1 stripping per-stream tags required by the muxers
  • Fixing cover image metadata targeting wrong output stream when data/attachment tracks are present (FFmpeg places -map streams before -attach streams in output order)
  • Fixing data streams being auto-included by FFmpeg when encoding to MKV, causing "Only audio, video, and subtitles are supported" errors — now explicitly excludes unmapped data with -dn and rechecks compatibility when output format changes
  • Fixing Unable to add more than 1 video to FastFlix in a session #739 unable to add more than 1 video per session due to AttributeError when closing audio track widgets (thanks to mrdav1)
  • Fixing Aspect Ratio improvement - presets.  #130 auto-crop producing invalid crop rectangles for non-standard aspect ratios (4:3 FHD, 2.76:1 ultra-wide) due to independent dimension tracking across cropdetect frames and Python falsy-zero bug (thanks to hallmansm)
  • Fixing HDR tonemapping failing with zscale "no path between colorspaces" by passing complete source colorspace parameters (primaries, matrix, transfer) to the zscale filter, with fallback retry for crop previews when tonemapping still fails
  • Fixing bitrate combobox being unreadably small on x264 and x265 encoders — combo now sizes to fit its widest item
  • Fixing rigaya encoder pad/letterbox calculation ignoring crop dimensions due to incorrect type check
  • Fixing rigaya encoders (NVEncC, QSVEncC, VCEEncC) crashing with no output when data streams are copied to non-MKV containers — --data-copy and --attachment-copy are now only emitted for Matroska output
  • Fixing startup crash when queue file exists but is missing the 'queue' key
  • Fixing FFmpeg HEVC and AV1 NVENC bitrate mode failing with FFmpeg 8 due to removed -2pass option and unsupported -pass two-pass mode — now a single encode using NVENC -multipass
  • Fixing FFmpeg HEVC NVENC passing invalid -spatial_aq option instead of -spatial-aq
  • Fixing auto-detected interlaced sources having deinterlacing turned off by profile defaults on load and profile change
  • Fixing bwdif, w3fdif and estdif deinterlace send_frame mode doubling the frame rate (filters default to one frame per field)
  • Fixing duplicate queue entry ids and work folders when keeping the source loaded after adding to queue
  • Fixing custom resolution values such as 1280:-2 / -1:720 disabling scaling, and auto-calculated dimensions rounding down instead of to the nearest multiple of 8
  • Fixing auto-crop being thrown off by fully black frames and over-cropping mixed letterbox/pillarbox samples by using the union of detected content per edge
  • Fixing x264 lossless failing when a profile other than high444 is selected, and SVT-AV1 / AOM lossless encodes still applying film grain and denoise
  • Fixing pad/letterbox being applied before rotation (FFmpeg and rigaya encoders)
  • Fixing duplicate --vpp-colorspace arguments when combining HDR to SDR with a 3D LUT on rigaya encoders
  • Fixing nlmeans_opencl denoise failing without HDR removal and in previews, and truncating 10-bit sources to 8-bit
  • Fixing data, attachment and cover stream metadata being written to the wrong output stream after toggling tracks or burning in subtitles
  • Fixing Copy encoder reversing converted audio when Reverse Video is enabled, and burned-in text subtitles playing forward over reversed video
  • Fixing GOP length of 0 producing all-intra encodes and being lost on reload
  • Fixing video speed and reverse warning dialogs popping up while loading videos, profiles or queue items
  • Fixing Data & Attachments track selection being lost after switching to an incompatible output format and back
  • Fixing Source Details tab leaving the HDR10 button visible after clearing the video, rendering tag text as HTML, and silently ignoring save errors
  • Fixing missing word wrap in yes/no dialogs, queue titles not eliding, and disabled toggle switches not looking disabled
  • Fixing missing and English-only translations for new strings
  • Adding SVT-AV1 tune options 3 (IQ), 4 (MS-SSIM) and 5 (VMAF) (IQ and MS-SSIM for AVIF), Variance Boost (strength and octile), temporal filtering, startup mini-gop size and quantization matrix (min/max) options to the SVT-AV1 encoder
  • Fixing config file being written non-atomically; it is now replaced atomically with a .bak kept, and a corrupt or truncated config falls back to the backup (or defaults, keeping the bad file aside) instead of preventing startup
  • Fixing a single invalid profile or wrongly-typed config value preventing FastFlix from starting
  • Fixing legacy fastflix.json upgrade setting the ffmpeg path from the ffprobe value
  • Fixing a single unreadable queue item discarding the entire saved queue; bad items are skipped and the original queue file is kept aside
  • Fixing queue file lock handling and replacing the queue file atomically on Windows, and cleaning up leftover temporary queue files
  • Fixing a corrupt history file being overwritten with an empty history (it is now moved aside to history.yaml.corrupt- and a new history started, while a file that is only temporarily unreadable is left untouched), and history thumbnail deletion following paths outside the thumbnails folder
  • Fixing encodes killed by a signal (out of memory, crash) being reported as successful
  • Fixing cancel, pause and resume not affecting every process of a piped or shell-run command
  • Fixing Download FFmpeg latest from the version warning dialog raising an error
  • Fixing AMD (Advanced Micro Devices, ATI) GPUs not being detected, and GPU encoder downloads that fail or are cancelled never being retried
  • Fixing the encoder worker leaving ffmpeg running or hanging on exit after a crash or closing the GUI
  • Fixing HDR10+ detection checking the wrong stream and reading entire files
  • Fixing the FastFlix update check failing on unusual release tags and having its timeouts reversed
  • Fixing file paths with spaces near the start being altered in subtitle and LUT filters
  • Fixing FFmpeg, rigaya encoder and hdr10plus_tool downloads lacking timeouts and checksum verification, and picking the wrong FFmpeg build or version
  • Fixing concat list files resolving relative paths and escaped quotes incorrectly
  • Fixing the overwrite confirmation allowing Esc to overwrite an existing output file
  • Fixing the after-done action running when an encode is cancelled or paused
  • Fixing crop and large preview images not rendering (ffmpeg was run through a shell) and hanging without a timeout
  • Fixing drag and drop of non-file URLs and slow rebuilds and overlapping thumbnail generation while typing start, end or crop values
  • Fixing a hung FFmpeg thumbnail process blocking all later thumbnail generation (it now times out after 2 minutes)
  • Fixing deleting a duplicated audio track breaking the remaining audio tracks, and audio title edits rebuilding commands on every keystroke
  • Fixing HDR10+ extraction using a full CPU core while waiting, and post-encode validation hanging with no timeout
  • Fixing file paths being rendered as rich text in concat, multiple files and profile windows, and removing the unused HDR10+ Inject window
  • Fixing VCEEncC pre analysis (--pa) being passed as a single argument containing a space
  • Fixing invalid --vpp-deblock parameters on NVEncC, QSVEncC and VCEEncC
  • Fixing output frame rate using a non-existent --vpp-fps option; NVEncC now uses --vpp-fruc, QSVEncC and VCEEncC ignore it with a warning
  • Fixing HDR10 mastering display and max CLL metadata being written when tone mapping to SDR on rigaya encoders
  • Fixing NVEncC custom arguments being split on whitespace instead of shell quoting, and video stream id 0 being ignored on rigaya encoders
  • Fixing NVEncC AV1 emitting HEVC only --tier, and VCEEncC AV1 emitting H.264/HEVC only --motion-est and --vbaq
  • Fixing NVEncC profile, and VCEEncC HEVC/AV1 B frames being collected but never passed to the encoder
  • Fixing QSVEncC lookahead depth being passed with rate control modes that ignore it, and AV1 lookahead missing --extbrc
  • Fixing rigaya encoder detection finding no devices when the encoder prints warnings, and hanging on a stuck encoder
  • Adding NVEncC --tune option (hq, uhq, lowlatency, ultralowlatency, lossless) and NVEncC / QSVEncC / VCEEncC quality based VBR (--qvbr)
  • Fixing PGS (hdmv_pgs_subtitle) burn-in generating a text subtitles filter that fails; bitmap subtitles are now overlaid, and after tone mapping
  • Fixing bitmap subtitle tracks (PGS/VobSub) failing MP4/MOV encodes (they are now skipped) and -default_mode being passed to non-Matroska muxers
  • Fixing burn-in of the first subtitle track not renumbering later subtitle tracks, and external subtitle burn-in track lookup
  • Fixing audio conversion crashing on channel layouts such as 5.1.2, 7.1.4 and octagonal, unknown layouts being forced to stereo, and AC-3 quality bitrates exceeding the 640k limit
  • Fixing HDR tone mapping being applied after color grading filters, dimming burned-in bitmap subtitles, dropping to 8-bit for 10-bit targets, and not tagging the SDR output as bt709
  • Fixing invalid pad colors breaking the filter chain, quoted values and backslashes in custom start options being mangled on Windows, and eq being forced to per-frame evaluation
  • Fixing PGS OCR reporting failure when the .srt already exists, not handling ISO 639-2/B language codes (fre, ger, chi), and modifying the global PATH
  • Fixing VAAPI encoders passing the invalid -low-power option instead of -low_power
  • Fixing VAAPI scaling being silently dropped, and VAAPI filters (crop, rotate, scale, burn-in) now run on software frames before hwupload so sources the GPU cannot hardware-decode no longer fail at hwdownload
  • Adding 8-bit/10-bit selection for VAAPI HEVC and VP9 (nv12/p010 upload with Main10/Profile 2), and fixing VAAPI HDR to SDR tone mapping so it receives 10-bit p010 input
  • Fixing VAAPI ICQ/QVBR rate control to use -global_quality, avoiding incoherent rate control and bitrate combinations, and no longer emitting -level auto
  • Fixing removed NVENC presets and rate control modes (hp, hq, ll, lossless, vbr_hq, ...) in saved profiles and queues, they are now converted to the equivalent p1-p7 preset and tune
  • Adding NVENC multipass selection (disabled, qres, fullres) for HEVC bitrate encodes
  • Adding HEVC and AV1 NVENC temporal AQ, AQ strength, constant quality (CQ), temporal filter, lookahead level, split encode, weighted prediction, unidirectional B-frames and no scenecut options
  • Fixing AV1 NVENC AQ Strength showing the wrong value when loading a profile
  • Fixing HEVC in MP4, M4V and MOV not being tagged hvc1, which prevented playback in QuickTime, iOS and Safari (x265, NVENC, VAAPI and VideoToolbox)
  • Fixing VideoToolbox bitrate mode running a useless first pass (VideoToolbox ignores two-pass), it is now a single pass with an optional constant bit rate setting
  • Fixing HEVC VideoToolbox failing when the profile (Main/Main10) did not match the selected bit depth
  • Fixing VVC (libvvenc) two-pass encoding and bitrate caps failing at encoder init by using FFmpeg -pass/-passlogfile instead of pass/rcstatsfile/vbv-* keys in -vvenc-params
  • Fixing VP9 CRF encoding ignoring the Speed setting (and the fast first pass option) in single and two-pass modes
  • Fixing GIF encoding of HDR sources producing washed-out colors by tone mapping when Remove HDR is set, and dropping frames to the target FPS before scaling so GIF creation is faster
  • Fixing x265 two-pass stats file being written to the working directory instead of the FastFlix work path, and x265 HDR10 settings leaking into later rebuilds of the same video
  • Fixing HDR10 metadata (mastering display, max CLL) being dropped for 4:2:2 and 4:4:4 10/12-bit output in x265, x264, SVT-AV1, rav1e and VVC encoders
  • Adding HDR10 mastering display and content light level metadata for 10-bit AVC (x264) encodes

🤖 Generated with Claude Code

https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop

…eg 8.0+ by adding `-update 1` flag required by the image2 muxer for single-image output (thanks to kliffgomel)
… (FFmpeg eq/hue filters for software encoders, --vpp-tweak for rigaya)

* Adding Reverse Video option in the Advanced panel (applies FFmpeg reverse video filter and areverse audio filter for converted tracks)
* Adding rigaya encoder support for Equalizer (--vpp-tweak), Denoise (--vpp-nlmeans/knn/pmd), Deblock (--vpp-deblock), Output FPS (--vpp-fps), and Video Track Title — only Video Speed and Reverse Video remain unsupported
* Fixing #738 conversion error with Google Pixel videos by disabling data stream mapping for Matroska containers which only support audio, video, and subtitle streams (thanks to Hankuuuu)
* Fixing #739 unable to add more than 1 video per session due to AttributeError when closing audio track widgets (thanks to mrdav1)
* Fixing startup crash when queue file exists but is missing the 'queue' key
…filter for software encoders, --vpp-unsharp for rigaya)

* Adding #447 GOP length setting to the Advanced panel (FFmpeg -g, rigaya --gop-len) (thanks to colemar)
* Adding #498 deinterlace setting persistence in profiles
* Adding #526 -movflags +faststart toggle for MP4/MOV containers, enabled by default (thanks to Aria)
…s are incompatible with the output format (e.g. data streams in MKV)

* Fixing attachment streams (fonts, etc.) losing mimetype/filename metadata during conversion due to `-map_metadata -1` stripping per-stream tags required by the muxers
* Fixing cover image metadata targeting wrong output stream when data/attachment tracks are present (FFmpeg places `-map` streams before `-attach` streams in output order)
* Fixing data streams being auto-included by FFmpeg when encoding to MKV, causing "Only audio, video, and subtitles are supported" errors — now explicitly excludes unmapped data with `-dn` and rechecks compatibility when output format changes
…, and AV1 (SVT-AV1) encoders

* Adding #457 QSVEncC --tune parameter support (hq, ll, ull, lossless) for HEVC, AV1, and AVC encoders (thanks to Marco Ravich)
* Adding #682 HE-AAC and HE-AAC v2 audio profile selection for AAC and libfdk_aac codecs (thanks to Augusto7743)
* Adding #520 "Same as Source" option for the output file extension, matching the output container to the source format for batch encoding mixed MKV/MP4 files (thanks to x9sim9)
* Adding #480 2-pass CRF encoding for the AOM AV1 encoder for improved quality (thanks to jimbow973)
* Adding #665 profile-level control for subtitle "default" and "forced" disposition flags with Keep Source, Clear All, and Set on First Track modes (thanks to legoleigh)
* Adding #523 drag and drop folder support in the Concatenation Builder (thanks to GokieKS)
* Adding #677 "Keep source loaded after adding to queue" setting to allow tweaking and re-queuing the same source without reloading (thanks to Mine181)
* Adding #594 codec and codec+profile matching options for audio profile pattern matching, allowing users to distinguish between e.g. DTS-HD MA and regular DTS tracks (thanks to Damundai)
* Adding #202 new video filters to the Advanced panel: vibrance, color temperature, curves presets, colorbalance presets, unsharp mask, deflicker, pad/letterbox, LUT3D file loading, and nlmeans_opencl GPU-accelerated denoise — with rigaya hardware encoder support for curves (--vpp-curves), unsharp (--vpp-unsharp), pad (--vpp-pad), LUT3D (--vpp-colorspace lut3d), and nlmeans_opencl (--vpp-nlmeans)
…ndard aspect ratios (4:3 FHD, 2.76:1 ultra-wide) due to independent dimension tracking across cropdetect frames and Python falsy-zero bug (thanks to hallmansm)

* Adding structured table view to Source Details tab with grouped sections, human-readable value formatting, Download JSON export, and full path tooltips on source/output filename fields
* Fixing HDR tonemapping failing with zscale "no path between colorspaces" by passing complete source colorspace parameters (primaries, matrix, transfer) to the zscale filter, with fallback retry for crop previews when tonemapping still fails
* Fixing bitrate combobox being unreadably small on x264 and x265 encoders — combo now sizes to fit its widest item
* Fixing rigaya encoder pad/letterbox calculation ignoring crop dimensions due to incorrect type check
…r exporting mastering display and content light level data in x265-compatible format (thanks to yundebian918)
@jrff123

jrff123 commented Aug 4, 2026

Copy link
Copy Markdown

please, add support to enable the option/ability to download at fastflix start-up the lastest ffmepg software and/or rigaya software, and the option to checks stable/beta fastflix program at the start-up.
Thanks!!

cdgriffith and others added 18 commits October 20, 2026 19:47
- Keep auto-detected interlacing when a profile default is applied
- Give a kept source a fresh uuid/work_path after adding to queue
- Use explicit mode for yadif/bwdif/w3fdif/estdif deinterlace presets
- Suppress speed/reverse warnings on programmatic changes
- GOP length minimum 1, preserve values with is-not-None checks
- Restore word wrap in yes_no_message
- ElidedLabel now actually elides (small minimum size hint)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Reverse forces input-side seeking so -ss/-to are not applied to the reversed timeline
- nlmeans_opencl initializes the OpenCL device without HDR removal; falls back to CPU nlmeans
  when OpenCL is unavailable (thumbnails); hwupload format follows source bit depth (p010)
- Copy encoder no longer reverses converted audio when video filters are disabled
- Pad is applied after rotation/flip
- Text subtitle burn-in is applied before reverse
- Data/attachment per-stream metadata uses the real output index computed from emitted maps
- gop_length <= 0 is treated as unset (no -g 0)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- QSVEncC: use valid --tune values (default, psnr, ssim, ms_ssim, vmaf, perceptual); drop legacy NVEncC values
- HE-AAC only for libfdk_aac (native aac rejects it); HE-AACv2 falls back to HE-AAC when not stereo
- rigaya --audio-profile uses libavcodec names (HE-AAC, HE-AACv2)
- x264 lossless omits incompatible -profile:v (keeps high444)
- SVT-AV1/AOM lossless skip film grain / denoise options
- Merge hdr2sdr and lut3d into a single --vpp-colorspace
- rigaya pad calculation accounts for 90/270 rotation
- Treat gop_length <= 0 as unset for rigaya encoders

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…les, i18n

- Video.compute_output_dimensions: restore w:-N / -N:h custom scaling, round auto dimension to nearest multiple
- Auto-crop: ignore negative cropdetect output, use union of content rects per edge (also in GUI aggregation)
- Info panel: reset hdr10 button/min height, deleteLater tabs, plain-text labels, error box on HDR10 save failure
- Data panel: restore user's Preserve selection when container becomes compatible again
- ToggleSwitch: dimmed rendering when disabled
- Profile window: remove dead set_disposition_from_profile, add AAC (HE) profile selector
- languages.yaml: add missing keys and translations
- test_local_encode: accept webp_anim, skip unavailable hardware encoders

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…y deinterlace presets

* FFmpeg hevc_nvenc/av1_nvenc bitrate mode used -pass/-passlogfile/-2pass, which NVENC does not support
  (-2pass was removed from FFmpeg); now a single encode using -multipass
* hevc_nvenc passed -spatial_aq:v, the FFmpeg option is -spatial-aq
* Cover -attach metadata now addressed by attachment-type stream specifier (s:t:N) instead of stale outdex
* Map deinterlace filter strings saved by earlier versions back to the new explicit presets

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…einterlace toggle

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uild pipeline

Installer/uninstaller:
- Self-delete now writes a temp .bat (retry loop, deletes itself) run hidden/detached
- New shared package cmd/internal/ffinstall: path validation, separator-aware
  protected-root checks, SafeToRemove marker checks, manifest-based removal that keeps
  user files (portable fastflix.yaml), registry cleanup in both views, process detection
  incl. orphaned python.exe, IsAdmin via process token
- Installer writes install_manifest.txt; uninstall removes only installed entries and
  only the registry root that owns the install; --silent still checks running + elevates
- Elevated cleanup/installs use installer helper modes (--elevated-uninstall/-install)
  instead of cmd /c rmdir; error markers surfaced in the GUI, incl. timeout
- Finds NSIS installs via WOW6432Node view; cleans WOW6432Node uninstall key
- Shortcut creation passes paths via env vars and reports errors
- Remove dead code (runUninstall, copyFile, --elevated-copy, expired ad), use BuildDate
- Fix go vet unsafe.Pointer warnings, handle leaks, installing flag, partial extraction
- Launcher passes args through, drops ineffective PYTHONHOME/PYTHONPATH

Build/CI:
- build_distribution.py: clean wheel dir, exactly one wheel, uv.lock-pinned deps resolved
  for bundled CPython 3.13 / win_amd64|arm64, single DEFAULT_PYTHON_VERSION (3.13.16),
  runs go-winres for every cmd, -H windowsgui for uninstaller, injects version/date,
  syncs winres.json from fastflix/version.py, --installer flag, keeps license files,
  limits tests-dir deletion to known-safe packages
- Windows CI job uses the new pipeline (setup-go, go-winres v0.3.3, go vet/test, smoke test)
- Remove accidentally committed .claude/settings.local.json and detect_cards.py,
  fix .gitignore entry, drop unused deepl dev dependency
- Update WINDOWS_BUILD.md, CLAUDE.md build section and build-installer skill

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sole windows

Paths are passed to the cleanup batch through environment variables instead of being written into the
script (cmd reads batch files in the OEM code page), and the batch runs with CREATE_NO_WINDOW only, since
DETACHED_PROCESS made each ping open its own console window.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… delete checks

The elevated helpers no longer write a marker file to a user-controlled temp path
(symlink/junction overwrite risk). The GUI launches them with ShellExecuteExW
(SEE_MASK_NOCLOSEPROCESS), waits on the process handle and reads GetExitCodeProcess.

LooksInstalled now requires FastFlix.exe plus a manifest, uninstall.exe or python dir.
The legacy delete-everything branch additionally requires a folder named FastFlix with
FastFlix.exe and uninstall.exe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nux (#766)

* Implement clean_env to manage environment variables

Add clean_env function to remove LD_LIBRARY_PATH from environment.

* Add clean_env to subprocess environment

* Use clean_env() in run_check_features function

Added clean_env() to subprocess calls for feature checks.

* Add clean_env to subprocess calls in background_tasks

Updated the run method to include a clean environment for subprocesses.

* Update subprocess call to include cleaned environment

Pass cleaned environment to subprocess run for thumbnail generation.

* Use clean_env for thumbnail generation

Updated thumbnail generation to use a cleaned environment.

* Use clean environment for thumbnail generation

Updated thumbnail generation to use a cleaned environment.

* Add clean_env function to subprocess environment

---------

Co-authored-by: Chris Griffith <chris@cdgriffith.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ocessEvents

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
cdgriffith and others added 30 commits October 20, 2026 21:51
…-fruc for output fps

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
…meout and logging

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
…and quant matrix options

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
Atomic config save with .bak and corrupt-file recovery, per-profile and
per-queue-item load isolation, safer queue lock handling, history load
failures no longer wipe history, thumbnail deletion confined to its dir.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
…d HDR10+ inject window, CHANGES

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
…bit depth, tonemap, rate control

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
…d VCE b-frames, rate-control aware QSV lookahead

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
…sless) per codec

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
- Treat PGS as a bitmap subtitle for burn-in (overlay), skip bitmap tracks for MP4/MOV, gate -default_mode on Matroska
- Fix burn-in index 0 outdex shift and external burn-in si lookup
- Audio: more channel layouts, no forced stereo for unknown layouts, clamp AC-3/E-AC-3 bitrates
- Tone map before grading, overlay bitmap subs after tone map, keep 10-bit, tag bt709
- Validate pad colour, keep backslashes in start_extra on Windows, drop eq=eval=frame
- PGS OCR: derive expected srt path, ISO 639-2/B language handling, restore PATH

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
…nd VCEEncC, changelog

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
…ed hdr_metadata helpers; x264 HDR10 metadata

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
# Conflicts:
#	CHANGES
# Conflicts:
#	CHANGES
# Conflicts:
#	CHANGES
# Conflicts:
#	CHANGES
# Conflicts:
#	CHANGES
# Conflicts:
#	CHANGES
#	fastflix/encoders/common/helpers.py
# Conflicts:
#	CHANGES
#	fastflix/encoders/vaapi_hevc/command_builder.py
# Conflicts:
#	CHANGES
#	fastflix/encoders/hevc_x265/command_builder.py
- start_extra strings are split with split_extra_args (moved to
  common/helpers.py, still importable from encc_helpers) so quoted values
  such as -metadata title="My Movie" no longer keep literal quote
  characters on Windows, while backslash paths stay intact.
- Audio track title is copied into the model on every edit; the full
  command rebuild still waits for editingFinished, so a title typed right
  before queueing is never lost.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
…fely

- A history.yaml that cannot be parsed is now moved to
  history.yaml.corrupt-<time> and a new history is started, instead of
  silently disabling history updates. A file that merely cannot be read
  (e.g. locked) is still left untouched.
- ThumbnailCreator gives up on an ffmpeg that runs longer than two minutes
  so later thumbnail requests are not blocked behind it.
- The PATH extension for tesseract is applied immediately before the OCR
  try/finally so it is always restored.
- Clarify the best-effort nature of the stale queue lock check.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nqmU1Z3NsMyrrgbN5AGop
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants