Help us keep the list up to date and submit new video software here.
Tool
Complete Version history / Release notes / Changelog / What's New for VapourBox
VapourBox 0.9.13
Fixed
DVD import on macOS. Titles listed correctly but extracting one always failed. It now works. (Affected every signed macOS release since DVD import was added.)
Ripped DVD folders. A folder holding the DVD files directly VIDEO_TS.IFO, VTS_01_1.VOB and friends, with no VIDEO_TS subfolder is now recognised as a disc and opens the title picker, instead of queueing every VOB fragment as a separate video.
Cancelling a job could leave processing running. Cancel stopped the job but could leave vspipe/ffmpeg working at full CPU. Most likely with a source on a network drive.
Windows: previews leaked processes. Every movement of the preview scrubber left a vspipe and ffmpeg behind, and they piled up.
Dropping a folder onto the queue did nothing once the queue already had something in it. It now behaves like dropping one on the empty window.
About screen now credits every bundled component, and no longer lists one that was removed.
Notes
Dependencies are unchanged from 0.9.12 nothing new to download on upgrade.
VapourBox 0.9.12
Much faster deinterlacing on Apple Silicon and ARM
QTGMC is roughly 4x faster on Apple Silicon and ARM Linux. Measured on an M1 at 720x576, QTGMC Slow went from 10.4 to 42.9 fps.
Two separate causes, both fixed:
Expressions had no JIT on ARM. VapourSynth compiles filter expressions to machine code on x86 only; everywhere else it interpreted them once per pixel. That single gap accounted for the overwhelming majority of the time in a deinterlace. The bundle now includes a JIT that works on ARM.
The edge interpolator was running unoptimised. QTGMC's interpolator was using a build with no ARM vector support, roughly 4.7x more CPU than the equivalent that has it.
Intel Macs and Windows already had the x86 JIT and are unchanged. Output is identical apart from a single brightness level in one internal mask, which is not visible.
Cancelling a job now works properly
Three separate problems, all of which showed up when you cancelled a conversion.
Re-running a file after cancelling it would hang. The second run encoded away at full speed, but the app never showed any progress and the job never finished it just sat on "Processing" indefinitely. Each job's progress is tracked through a file named after the item, so re-running the same file reused it; the leftover "finished" marker from the cancelled run convinced the app the new encode was already complete before it had started. It was more likely on slower sources such as a network share, which is why it could seem intermittent.
Cancelling could leave the encoder running in the background, burning CPU and continuing to write to the output file, while the app reported the job as cancelled. It now shuts the whole pipeline down and waits for it to actually stop, saying so explicitly if a job ever has to be forced.
Seeking the preview left processes behind. Every scrub cancels the in-flight preview and starts another, and the ones it replaced were not always cleaned up, so they accumulated.
A cancelled item is now also reported as cancelled rather than failed, and the queue stops instead of moving on to the next file.
Under the hood
VapourSynth updated to R78 (from R73), along with the whole bundled toolchain.
Linux ARM builds gained a plugin that had never actually compiled, so ARM Linux deinterlacing was silently falling back to a slower path.
Fixes for 10-bit sources (ProRes 422 and deeper)
Several filters misbehaved on a 10-bit source without reporting an error, so they looked like they simply did not work. All of the settings below are expressed in 8-bit levels (0-255) in the UI, and were reaching filters that work in the clip's own range:
Colour Levels blew the picture out on a 10-bit source. Setting an input white of 235 mapped everything above 235 out of 1023 to white.
Colour Brightness was about a quarter as strong on a 10-bit source as on an 8-bit one (and far weaker again at 16-bit).
Chroma De-crawl failed the whole job on a 12-bit source such as ProRes 4444 XQ.
Every other filter was checked against the same content at 8-bit and produces a matching picture at 10, 12 and 16-bit.
Output colour format
New: 4:2:2 10-bit. The existing conversions were 8-bit only, so normalizing chroma on a 10-bit source meant discarding the extra precision.
Reducing bit depth is now dithered. Converting a 10-bit source to an 8-bit output could band smooth gradients skies, fades, VHS luma ramps. It no longer does.
The preview now shows the output colour format, so a conversion is visible before the encode rather than after.
An info button beside the setting explains what chroma subsampling and bit depth are, and which option to pick.
Worth knowing if you work with ProRes: the default, Match source, keeps a 10-bit source at 10-bit, which encodes as H.264 High 4:2:2 correct, but a profile QuickTime, most browsers and phones will not open. Choose 4:2:0 8-bit for anything going to someone else's device.
VapourBox 0.9.11
Changes since 0.9.10.
Interface
Filter settings now expand in place. Tap a pass and its controls appear directly beneath it, right next to the filter they belong to, instead of in a separate panel below the list tap again to collapse. The panels are resizable, so the preview and the pass list get whatever share of the window you want.
Every filter explains itself. Each one leads with a one-line summary and a More expander covering what it actually does and when you'd reach for it. All twelve built-in filters have one, so you no longer have to guess from a parameter name.
Choose where scratch files go. Settings General Temporary Files sends generated scripts, job config, preview frames and extracted DVD titles wherever you like, and puts them back to the system default. A DVD rip alone can need several gigabytes, which is a problem when system temp sits on a small or slow volume.
Report a bug without leaving the app. Settings General gains "Report a bug or give feedback", which opens the issue tracker, with About moved in beside it. The toolbar is left with just the controls that act on the current job.
New processing features
Chroma Denoise (CCD). A new pass built on the Camcorder Colour Denoise filter, for the blotchy colour noise on VHS captures and old camcorder footage. It never touches luma, so it can be pushed far harder than a general denoiser before the picture starts to soften. (#50)
Halo, ring and ghost removal. Dehalo gains four methods Fine Dehalo 2, Edge Cleaner, and Vinverse / Vinverse 2 for the vertical comb-and-ghost residue a deinterlacer leaves behind plus the sensitivity, supersampling, mask-limit, contra-sharpening and edge-processing controls that were previously unreachable. (#50)
White balance. Temperature (warm/cool) and Tint (green/magenta), alongside the existing brightness, contrast, saturation, hue and levels. (#50)
MCDegrainSharp denoising. Didιe's motion-compensated degrain, which sharpens where the motion match is confident and softens where it isn't. Also written MDegrainSharpen. (#50)
Aspect ratio control. Square up anamorphic pixels, force a display aspect for a source whose flag is wrong, or letterbox to an exact target size. (#50)
Edge-directed upscaling controls. Full neuron, neighbourhood, quality and prescreener settings for NNEDI3 and EEDI3, plus seven resampling kernels with per-kernel tuning. (#50)
Wider source support. 4:1:1 (NTSC DV), 4:1:0, 9/12/14-bit, RGB and grayscale sources all import now, and anything unrecognised is converted rather than rejected. (#50)
Higher-quality interlaced chroma, on request. Interlaced 4:2:0 stores chroma per field, so interpolating at 4:2:0 mixes the two fields together. The deinterlace pass can convert to 4:2:2 first, and separately run at 16-bit to avoid rounding accumulated across QTGMC's many internal steps. Both are off by default: the chroma option costs roughly 30% throughput (measured 35 24 fps) for a gain that is subtle on most material, so the trade-off is yours to make. (#49)
Fixes
QTGMC's Placebo and Very Slow presets no longer brighten the picture on Apple Silicon, and Draft no longer comes out nearly black. The cause was in fmtconv, not QTGMC: its non-SIMD integer scaler applied sign-conversion constants meant for the SSE2/AVX2 paths, so any resample below 16-bit returned a black plane on builds without x86 SIMD. That destroyed the Bob() call feeding QTGMC's noise pass which only Placebo and Very Slow enable by default and Draft's interpolation. Affected Apple Silicon and arm64 Linux; Windows and Intel Macs were never affected.
NTSC DV files could not be imported at all. Any source whose pixel format wasn't one of twelve recognised names failed the whole job 4:1:1 DV, ProRes 4444, RGB, grayscale and hardware-decoder formats among them. (#50)
The EEDI3 upscale was never EEDI3. Selecting it silently performed a plain Spline36 resize. (#50)
NNEDI3 upscaling was misaligned. Every upscale was offset by a quarter of a source pixel on both axes, with chroma additionally misaligned against luma on 4:2:0. (#50)
Resizing dropped the pixel aspect ratio. An anamorphic source resized to a new width came out the wrong shape, with no error. (#50)
FineDehalo now uses its documented edge-mask thresholds. The Low/High Threshold controls (thmi/thma) defaulted to 50/100 values belonging to a different pair of parameters and were passed on every run, so FineDehalo never behaved as havsfunc documents. They now default to 80/128. Saved presets keep whatever they were saved with; only a newly enabled FineDehalo pass is affected. (#50)
AMD AMF encoders were reported as broken. The availability probe encoded a 64x64 frame, which AMF rejects outright because hardware encoders have minimum dimensions; it now probes at 512x512. AMF's ffmpeg arguments were also hardened against a crash under constant-quality mode. (#51)
Field order is derived once. SetFieldBased overrides QTGMC's own TFF argument, so deriving the two separately let autodetection silently override your field-order choice, and let the preview deinterlace differently from the final render. Both now come from one value. An unsupported ChromaEdi setting is also dropped rather than passed through, where it used to corrupt chroma badly. (#49)
The macOS title bar is no longer see-through. The window was configured with a transparent background, so nothing painted behind the native title bar and it rendered as floating text over whatever sat behind the window. Present since the Flutter migration; visible on macOS 26.
Stalled jobs fail instead of hanging forever. A wedged pipeline used to spin with no progress, no completion and no diagnostics; it now gives up and reports which stage stopped. (#50)
Dependency problems are reported when they happen. The installer checked that files existed, which a macOS-quarantined install satisfies perfectly so it reported success and then failed much later with an opaque "signal 9". It now checks the dependencies actually run, and names the fix. (#50)
Numeric dropdowns (DeScratch modes, SpotLess pel) could throw when changed. (#50)
VapourBox 0.9.10
Changes since 0.9.9.
Features & improvements
Frame-accurate preview and seeking. Preview and scrubbing now map sourceoutput frames exactly through a FrameMap seam, so the previewed frame matches the encode (including after frame-rate changes like double-rate deinterlacing). (#45)
Bit-depth quality warnings. The app now shows an inline advisory when a choice will silently reduce colour precision on a >8-bit source: enabling DeScratch (8-bit-only, so a lossy round-trip), or selecting a chroma-subsampling conversion that forces 8-bit output. (#47)
Fixes
IVTC no longer fails on >8-bit sources (e.g. 10-bit ProRes 422, yuv422p10le). Inverse-telecine field matching (VFM) now runs on an 8-bit metrics copy while emitting the full-depth pixels via clip2, so no precision is lost in both preview and full encode. (#46)
Correct frame rate for field-coded interlaced sources use the picture frame rate rather than the field rate. (#44, fixes #13)
VapourBox 0.9.9
What's new for users
Intel Macs now run on macOS 12 Monterey and later. Earlier builds targeted a newer macOS and crashed on Monterey with a dyld: Symbol not found error when generating a preview or encoding (issue #39). The Intel build's VapourSynth/vspipe and every bundled library are now built to load on macOS 12+. (Apple Silicon Macs still require macOS 15 Sequoia see Downloads.)
KNLMeansCL denoiser on every platform. The OpenCL-accelerated KNLMeansCL denoiser is now bundled everywhere and automatically falls back to DFTTest on machines without usable OpenCL, so denoising works regardless of GPU support (issue #37).
More reliable encoding. The worker now retries automatically when VapourSynth intermittently fails to autoload its plugins at startup, so a transient first-frame failure no longer aborts the whole job.
VapourBox 0.9.8
VapourBox 0.9.8 builds on 0.9.7 with extensive filter integration fixes across platform, and better queue handling plus a large dependency/CI overhaul under the bonnet to verify every single filter option works on every single supported platform.
What's new
TL;DR - a focus on fixes rather than features.
Encoding (issue #19)
Intel Mac bitrate control VideoToolbox on Intel has no constant-quality mode, so the quality slider produced badly under-bitrated output. The Quality section now offers native bitrate presets (Low / Medium / High / Very High) plus an editable Mb/s field. Apple Silicon keeps its quality slider unchanged.
HEVC plays in QuickTime / Apple players HEVC in MP4/MOV is now tagged hvc1 (with faststart) so Apple players no longer reject the file.
Codec selection no longer over-blocked encoders FFmpeg actually supports stay selectable even when the hardware probe fails; a failed probe now shows a warning with a viewable, copyable error log instead of silently disabling the option (e.g. h264_videotoolbox on some Intel Macs).
Copy Log button stays available the log panel (and its copy button) now remain visible after a job completes, not just while it's running.
Deinterlacing
OpenCL auto-detect with CPU fallback on macOS, QTGMC's GPU NNEDI3 path failed on machines with no usable OpenCL device (headless, VMs, remote-desktop sessions), erroring out every deinterlace job. The worker now probes for OpenCL and falls back to CPU NNEDI3 when it isn't available. Set VAPOURBOX_DISABLE_OPENCL=1 to force CPU.
Queue handling (issue #12)
Dropping more files no longer overwrites your settings scan-type auto-configuration now runs only for the first file into an empty queue, so adding files to an already-configured queue keeps your pipeline. Added audio-settings logging to aid diagnosis.
Reliability
Fixed an intermittent plugin-load failure (No attribute fmtc) caused by a shared VapourSynth autoload config being written concurrently (#36).
Under the bonnet
Dependency binaries are no longer committed the download-deps-* scripts and CI are now the source of truth, with sha256 integrity sidecars per release and a plugin-completeness guard that fails the build on missing plugins.
Numerous deps build fixes: macOS x64 FFTW reference, arm64 liblzma for BestSource, unbundled-dylib guards (issue #28), Windows VSScript init / x64 plugin selection, and a dead fmtconv download URL.
Flutter integration tests now run headless in CI.
Worker probes input frame count when a job omits total_frames (#35).
VapourBox 0.9.7
Encoder, denoiser, and dependency fixes building on the 0.9.6 cross-platform release.
What's New
Linux hardware-accelerated encoding the bundled Linux ffmpeg now includes hardware encoders (x64: Intel QSV, NVIDIA NVENC, AMD AMF, VAAPI; arm64: NVENC, AMF, V4L2 M2M). It still encodes in software where no GPU/driver is present.
Smarter hardware-encoder availability the encoder list now probes each hardware encoder and shows only what actually works on your machine (with a brief busy indicator while checking); unavailable ones are clearly disabled. Only platform-relevant encoders are listed (VideoToolbox on macOS; QSV/NVENC/AMF on Windows + Linux).
Dependency download progress the first-launch dependency dialog now shows extraction progress (previously it sat frozen on "Extracting " at 100%, which was especially noticeable on Linux).
Fixes
MCTemporalDenoise no longer crashes the TTempSmooth plugin was missing on every platform (and FFT3DFilter was missing on macOS), so havsfunc's MCTemporalDenoise denoiser failed with No attribute with the name ttmpsm. Both plugins are now bundled, and the denoiser works across macOS, Windows, and Linux.
Clean-aperture sources fixed garbage preview/encode on sources whose decoded frame size differs from the size ffprobe reports (e.g. a 10-bit 4:2:2 ProRes file with a clean aperture: reported 720Χ576 but decoded 702Χ576). The decoder is now pinned to the declared dimensions so the raw stream stays in sync; a no-op for normal sources.
Apple VideoToolbox on Intel Macs H.264/H.265 VideoToolbox now encode correctly on Intel Macs (they require an average bitrate; the previous constant-quality flag is Apple-Silicon only and made the encode fail).
Clearer encode errors when an encoder fails, VapourBox now reports the real ffmpeg error instead of a confusing vspipe SIGPIPE.
VapourBox 0.9.6
The big one: VapourBox now runs on Linux, and macOS ships as a single universal build covering both Apple Silicon and Intel.
What's New
Linux support (x86_64 + aarch64) VapourBox is now cross-platform across macOS, Windows, and Linux. It ships as a portable tarball; the VapourSynth/FFmpeg dependency stack downloads automatically on first launch (to ~/.local/share/VapourBox/), same as the other platforms. The full filter set is available.
macOS is now a Universal build a single signed & notarized DMG runs natively on both Apple Silicon and Intel Macs (Intel support is new this release)..
Fixes
Preview no longer breaks when toggling filters rapidly fixed a race condition that could leave the preview stale or errored when filters were switched in quick succession.
Clearer worker error reporting on Unix process failures now report the terminating signal (e.g. SIGSEGV) instead of an opaque exit code.
Downloads
Windows: VapourBox-0.9.6-windows-x64.zip
macOS (Universal Apple Silicon + Intel): signed & notarized VapourBox-0.9.6-macos-universal.dmg
Linux (x86_64): VapourBox-0.9.6-linux-x64.tar.gz
Linux (aarch64): VapourBox-0.9.6-linux-arm64.tar.gz
Dependencies
Dependencies (~185 MB) are downloaded automatically on first launch.
Under the hood
New cross-platform CI test gate runs the full Rust + Flutter test suites on macOS (Apple Silicon + Intel), Windows, and Linux for every push and PR.
Linux dependencies and the Linux whisper-cli are built from source via dedicated CI workflows; macOS x64 deps now build natively on the Intel runner.
VapourBox 0.9.5
What's New
New lossless codecs: HuffYUV and FFVHuff, selectable for AVI/MKV output (fast lossless intermediates alongside FFV1).
macOS builds are now (finally) signed and notarized with a Developer ID open without Gatekeeper warnings.
Fixes
#6 MP4/MOV output no longer fails on sources with image-based (PGS/VobSub) subtitles; only text subtitles are mapped to mov_text, image-based tracks are skipped.
Output paths now use the platform separator on Windows (no more mixed D:\dir/file.mov).
Preview now reports a clear error on un-analyzed files instead of a cryptic BlankClip: invalid width.
VapourBox 0.9.3
Hotfix v0.9.3
Fix DVD extraction failing on Windows physical drives root paths like D:\ produced illegal characters in temp filenames
VapourBox 0.9.2
What's New
Film Restoration Filters
DeScratch Remove vertical scratches from scanned film (spatial, single-frame analysis)
SpotLess Remove dust, dirt, and temporal spots using motion-compensated median filtering
Chroma Fixes
Chroma Shift (Y/C Delay) Precisely align chroma planes with sub-pixel accuracy for analog sources
Fixed method dropdown showing alongside individual checkboxes in Chroma Fixes
Bug Fixes
Fixed preview template unconditionally marking clips as field-based, causing resize errors with some filters
Fixed DeScratch compatibility with field-based clips and non-8-bit formats
Dependencies (deps-v1.3.0)
Added DeScratch plugin (Windows DLL + macOS arm64 dylib)
Added TemporalMedian plugin (Windows DLL + macOS arm64 dylib)
VapourBox 0.9.1
What's New
Bug Fixes
Fix filter parameter values silently lost on UI round-trips due to schema-converter mismatches
Fix resize kernel always resetting to default when saving/loading presets
Fix MCTemporalDenoise settings param not passed to VapourSynth
Fix QTGMC built-in denoising values ignored when set from noise reduction panel
Remove dead blockSize/overlap fields from deblock filter
Improvements
Add comprehensive schema-converter integration tests (98 tests) to prevent future mismatches
Case-insensitive dropdown matching prevents silent enum fallback bugs
Dependencies
Uses deps release: deps-v1.2.0
VapourBox 0.9.0
What's New
DVD Disc Import
Import directly from DVD discs, VIDEO_TS folders, and ISO images. VapourBox extracts individual titles using libdvdread, with progress tracking and automatic cleanup of temp files. CSS decryption supported if the user installs libdvdcss separately.
OpenCL GPU Acceleration on macOS
QTGMC now automatically uses NNEDI3CL (OpenCL GPU) on macOS, where the CPU-only ZNEDI3/NNEDI3 plugins lack ARM NEON optimisations and run pure scalar C. This significantly speeds up the interpolation step on Apple Silicon.
Replace BestSource/FFMS2 with FFmpeg Pipe Source
BestSource's frame-accurate seeking could cause A/V desync on certain sources. This release replaces the entire source chain with a single FFmpeg pipe architecture:
No more slow indexing FFmpeg pipe starts immediately, no frame index needed
Consistent preview and encode paths preview uses the identical pipeline as conversion
Preview respects encoding settings chroma subsampling and other parameters reflected in previews
Advanced QTGMC Parameters Overhaul
All advanced QTGMC parameters are now optional with proper defaults matching havsfunc internals. When a checkbox is unchecked, the parameter is omitted entirely letting QTGMC use its own preset-driven defaults (matching how tools like Hybrid handle these settings).
30 advanced parameters (TrueMotion, GlobalMotion, DCT, SubPelInterp, ThSAD1/2, ThSCD1/2, etc.) are now optional previously always passed even when untouched
All optional parameter defaults match the actual havsfunc function signatures, not custom presets
User-adjusted values are preserved when disabling and re-enabling a parameter checkbox
5 parameters (Str, Amp, FastMA, ESearchP, RefineMotion) were not being passed to the script at all now properly wired through
Bug Fixes
Fix advanced settings optional parameter checkboxes not toggling (#4) optional params had null defaults, so clicking the checkbox called onChanged(null) which kept the parameter disabled
Fix 4 VapourSynth parameter name mismatches in deinterlace schema (BlockSizeBlocksize, SBBSbb, Devicedevice, OpenCLopencl) that caused silent parameter drops
Remove non-existent vinverseScl parameter from Vinverse filter (havsfunc Vinverse only has sstr, amnt, chroma)
Fix all filter schema defaults to match actual havsfunc function signatures (dehalo, noise_reduction, sharpen, deband, chroma_fixes)
Fix display aspect ratio for anamorphic DVD previews (SAR correction)
Fix queue info dialog overflow when showing long DVD extraction logs
Fix ffmpeg reading full audio track when exporting trimmed segments
Fix orphaned vspipe process on cancel by calling vspipe-bin directly
Fix progress tracking showing wrong frame count when trimming with in/out points
Fix phase-aware progress tracking for telecine pipeline
Fix whisper deadlock on long videos and subtitle-only output path bugs
Fix pipe_source.py not bundled in release builds
Embed VapourBox version in output file metadata and preserve source subtitles
Testing
Added schema-driven integration tests for all filter types (QTGMC, noise reduction, dehalo, deblock, deband, sharpen, chroma fixes, color correction)
Tests verify every optional parameter name and value in the generated VapourSynth script against the filter schema
Basic-mode test verifies no advanced parameters leak into the script when Advanced mode is off
12 new integration tests, all passing
Internal
QTGMC parameters are now nullable null means "let the preset decide" vs an explicit user override
lastOptionalValues in DynamicParameters preserves user values across disable/re-enable cycles
Renamed RestorationPipeline ProcessingPipeline across codebase
Filter category restoration cleanup
Removed FFMS2 and BestSource dependencies entirely smaller dependency footprint
Patched havsfunc EEDI3CL fallback for modern eedi3m plugin (no OpenCL EEDI3)
VapourBox 0.8.0
Whisper Subtitle Generation
Add Whisper-powered subtitle generation as a pipeline pass (SRT file, embedded, or both)
Subtitle-only mode: generate subtitles without video re-encoding
UX Improvements
Visual "Post-Processing" separator between video filters and subtitles in pass list
Context-aware pass summary (e.g. "2 video passes, subtitles enabled", "Subtitle generation only")
Context-aware completion label ("Subtitles saved to:" vs "Output saved to:")
Output path automatically switches to .srt extension in subtitle-only SRT mode
Bug Fixes
Fix aspect ratio (SAR) not preserved in output video ffmpeg setsar filter was receiving : as option separator instead of ratio separator
VapourBox 0.7.1
Changes
Fix false telecine detection on VHS tapes: Interlaced PAL VHS content was being misclassified as hard telecine due to stray repeated fields from tracking instability. Now requires 15% repeated fields ratio (real 3:2 pulldown is ~40%) instead of triggering on any single repeated field.
Skip VHS leader for scan analysis: idet analysis now skips the first 2 seconds of longer videos to avoid unstable VHS leader/tracking sections.
VapourBox 0.7.0
What's New
Soft Telecine Support
Added soft telecine (IVTC) as a deinterlace method
Replaced scan type detection with ffmpeg idet filter for more accurate interlace/telecine detection
Auto-detects soft telecine content and suggests appropriate processing
Preset System Improvements
Update presets: Sync button on user presets to update with current settings
Overwrite warning: Confirmation dialog when saving a preset with a duplicate name
UI/UX Improvements
Show actual frame rates (e.g., 29.97 fps) in QTGMC output rate options instead of rounded values
Disable processing button during active processing, with cancel confirmation dialog
Hide TFF field order parameter when not using QTGMC deinterlace method
Developer Improvements
Added macOS debug build-and-run script (Scripts/run-debug-macos.sh)
Fixed macOS GitHub Actions workflow (correct Rust action, xcodebuild build process)
Added Scripts/ci-build-and-release.sh to trigger CI builds and upload artifacts to draft releases
Fixed macOS debug SIGPIPE crash caused by Flutter 3.35+ merged UI/platform thread mode
VapourBox 0.5.2
Changes
Update to try to track down dependency resolution issues. For diagnostics on MacOS launch from the terminal with /Applications/VapourBox.app/Contents/MacOS/vapourbox.
Fix macOS dependency detection after extraction
Ad-hoc codesign all dylibs and executables after dependency download (fixes Gatekeeper blocking on macOS Sequoia+)
Add python/lib to DYLD_LIBRARY_PATH to match Rust worker environment
Set PYTHONNOUSERSITE=1 to prevent user site-packages interference
Add diagnostic logging to ToolLocator for easier debugging
Uses dependencies from: deps-v1.0.0
VapourBox 0.5.1
Changes
Fix hardware codec determination, show all hardware codecs and warn about the unsupported ones
Centralize tool path management, fix warnings
Bug fixes and improvements
VapourBox 0.5.0
What's New
Hardware Encoding Support
Added support for hardware-accelerated encoding: NVENC (NVIDIA), QSV (Intel), VideoToolbox (macOS), AMF (AMD)
Audio & Encoding Improvements
Audio mode selection (copy, transcode, or remove)
Chroma subsampling options
Codec and pixel format info in video info dialog
Quality of Life
Videos can now be re-processed without restarting the app
Dependencies
Uses existing dependency release: deps-v1.0.0
Full Changelog
Add hardware encoding support (NVENC, QSV, VideoToolbox, AMF)
Add audio mode selection, chroma subsampling, and integration tests
Add codec and pixel format info to video info dialog
Document macOS build workaround and release packaging requirements
VapourBox 0.4.0
What's New
Processing Improvements
Batch processing fix: Fixed race condition in batch processing queue
Re-process videos: Videos can now be re-processed without restarting the app
Overwrite confirmation: Added confirmation dialog when output file already exists
Video Info
Codec and pixel format info: Video info dialog now shows codec name and pixel format details
Auto-Updates
Update checker: App now checks for updates on startup and notifies when a new version is available
VapourBox 0.3.0
What's New
Video Queue
Batch processing: Add multiple videos to a queue for sequential processing
Process your entire collection without manual intervention
Output Configuration
Custom output directory: Choose where processed videos are saved
Filename patterns: Configure output filenames with variables like {original}, {date}, etc.
Compatibility
NTSC DV support: Automatically convert 4:1:1 chroma to 4:2:2 for filter compatibility
VapourBox 0.2.1
What's New
Bug Fixes & Improvements
Fix preview generation working directory for dependency paths
Add delay before worker exit to ensure completion message is received
Remove legacy qtgmc_template fallback and fix dev path security
Add audio codec compatibility warning dialog and full E2E tests
Document dev vs production build strategy for dependency location
macOS
Build for Apple Silicon (arm64) only - Intel Mac support removed
Fixed release script version parsing
VapourBox 0.2.0
Cross-platform video restoration application using VapourSynth.
Changes
Switch from http to rhttp for Windows certificate support
Security: Only check development paths in debug builds
Fix macOS deps storage location to use Application Support
Reorganize Settings dialog into Input and Output tabs
Update README with screenshot and improved description
VapourBox 0.1.0
A user-friendly wrapper for VapourSynth that makes video processing accessible to everyone.
VapourBox Screenshot
What is VapourBox?
VapourBox provides a simple drag-and-drop interface for powerful video processing tasks that normally require scripting knowledge. Convert interlaced footage, apply QTGMC deinterlacing, reduce noise, and fix common video problemsno command line needed.
Features
QTGMC deinterlacing - Industry-standard deinterlacing with full parameter control
Multi-pass restoration pipeline - Denoise, sharpen, dehalo, deblock, deband
Real-time preview - Side-by-side before/after comparison
Timeline with zoom - Navigate and set in/out points for partial exports
Multiple output codecs - ProRes, FFV1, H.264, H.265
Preset system - Save and reuse your filter configurations
Use Cases
Convert interlaced video to progressive
Clean up noisy or soft footage
Archive DVDs with proper deinterlacing
Restore VHS captures
Platforms
macOS ARM64 (Apple Silicon)
Windows x64
Installation
Download the zip for your platform
Extract and run
Dependencies (~94 MB macOS, ~183 MB Windows) download automatically on first launch
Requirements
macOS 11+ (Apple Silicon) or Windows 10/11 (x64)
Internet connection for first launch
Fixed
DVD import on macOS. Titles listed correctly but extracting one always failed. It now works. (Affected every signed macOS release since DVD import was added.)
Ripped DVD folders. A folder holding the DVD files directly VIDEO_TS.IFO, VTS_01_1.VOB and friends, with no VIDEO_TS subfolder is now recognised as a disc and opens the title picker, instead of queueing every VOB fragment as a separate video.
Cancelling a job could leave processing running. Cancel stopped the job but could leave vspipe/ffmpeg working at full CPU. Most likely with a source on a network drive.
Windows: previews leaked processes. Every movement of the preview scrubber left a vspipe and ffmpeg behind, and they piled up.
Dropping a folder onto the queue did nothing once the queue already had something in it. It now behaves like dropping one on the empty window.
About screen now credits every bundled component, and no longer lists one that was removed.
Notes
Dependencies are unchanged from 0.9.12 nothing new to download on upgrade.
VapourBox 0.9.12
Much faster deinterlacing on Apple Silicon and ARM
QTGMC is roughly 4x faster on Apple Silicon and ARM Linux. Measured on an M1 at 720x576, QTGMC Slow went from 10.4 to 42.9 fps.
Two separate causes, both fixed:
Expressions had no JIT on ARM. VapourSynth compiles filter expressions to machine code on x86 only; everywhere else it interpreted them once per pixel. That single gap accounted for the overwhelming majority of the time in a deinterlace. The bundle now includes a JIT that works on ARM.
The edge interpolator was running unoptimised. QTGMC's interpolator was using a build with no ARM vector support, roughly 4.7x more CPU than the equivalent that has it.
Intel Macs and Windows already had the x86 JIT and are unchanged. Output is identical apart from a single brightness level in one internal mask, which is not visible.
Cancelling a job now works properly
Three separate problems, all of which showed up when you cancelled a conversion.
Re-running a file after cancelling it would hang. The second run encoded away at full speed, but the app never showed any progress and the job never finished it just sat on "Processing" indefinitely. Each job's progress is tracked through a file named after the item, so re-running the same file reused it; the leftover "finished" marker from the cancelled run convinced the app the new encode was already complete before it had started. It was more likely on slower sources such as a network share, which is why it could seem intermittent.
Cancelling could leave the encoder running in the background, burning CPU and continuing to write to the output file, while the app reported the job as cancelled. It now shuts the whole pipeline down and waits for it to actually stop, saying so explicitly if a job ever has to be forced.
Seeking the preview left processes behind. Every scrub cancels the in-flight preview and starts another, and the ones it replaced were not always cleaned up, so they accumulated.
A cancelled item is now also reported as cancelled rather than failed, and the queue stops instead of moving on to the next file.
Under the hood
VapourSynth updated to R78 (from R73), along with the whole bundled toolchain.
Linux ARM builds gained a plugin that had never actually compiled, so ARM Linux deinterlacing was silently falling back to a slower path.
Fixes for 10-bit sources (ProRes 422 and deeper)
Several filters misbehaved on a 10-bit source without reporting an error, so they looked like they simply did not work. All of the settings below are expressed in 8-bit levels (0-255) in the UI, and were reaching filters that work in the clip's own range:
Colour Levels blew the picture out on a 10-bit source. Setting an input white of 235 mapped everything above 235 out of 1023 to white.
Colour Brightness was about a quarter as strong on a 10-bit source as on an 8-bit one (and far weaker again at 16-bit).
Chroma De-crawl failed the whole job on a 12-bit source such as ProRes 4444 XQ.
Every other filter was checked against the same content at 8-bit and produces a matching picture at 10, 12 and 16-bit.
Output colour format
New: 4:2:2 10-bit. The existing conversions were 8-bit only, so normalizing chroma on a 10-bit source meant discarding the extra precision.
Reducing bit depth is now dithered. Converting a 10-bit source to an 8-bit output could band smooth gradients skies, fades, VHS luma ramps. It no longer does.
The preview now shows the output colour format, so a conversion is visible before the encode rather than after.
An info button beside the setting explains what chroma subsampling and bit depth are, and which option to pick.
Worth knowing if you work with ProRes: the default, Match source, keeps a 10-bit source at 10-bit, which encodes as H.264 High 4:2:2 correct, but a profile QuickTime, most browsers and phones will not open. Choose 4:2:0 8-bit for anything going to someone else's device.
VapourBox 0.9.11
Changes since 0.9.10.
Interface
Filter settings now expand in place. Tap a pass and its controls appear directly beneath it, right next to the filter they belong to, instead of in a separate panel below the list tap again to collapse. The panels are resizable, so the preview and the pass list get whatever share of the window you want.
Every filter explains itself. Each one leads with a one-line summary and a More expander covering what it actually does and when you'd reach for it. All twelve built-in filters have one, so you no longer have to guess from a parameter name.
Choose where scratch files go. Settings General Temporary Files sends generated scripts, job config, preview frames and extracted DVD titles wherever you like, and puts them back to the system default. A DVD rip alone can need several gigabytes, which is a problem when system temp sits on a small or slow volume.
Report a bug without leaving the app. Settings General gains "Report a bug or give feedback", which opens the issue tracker, with About moved in beside it. The toolbar is left with just the controls that act on the current job.
New processing features
Chroma Denoise (CCD). A new pass built on the Camcorder Colour Denoise filter, for the blotchy colour noise on VHS captures and old camcorder footage. It never touches luma, so it can be pushed far harder than a general denoiser before the picture starts to soften. (#50)
Halo, ring and ghost removal. Dehalo gains four methods Fine Dehalo 2, Edge Cleaner, and Vinverse / Vinverse 2 for the vertical comb-and-ghost residue a deinterlacer leaves behind plus the sensitivity, supersampling, mask-limit, contra-sharpening and edge-processing controls that were previously unreachable. (#50)
White balance. Temperature (warm/cool) and Tint (green/magenta), alongside the existing brightness, contrast, saturation, hue and levels. (#50)
MCDegrainSharp denoising. Didιe's motion-compensated degrain, which sharpens where the motion match is confident and softens where it isn't. Also written MDegrainSharpen. (#50)
Aspect ratio control. Square up anamorphic pixels, force a display aspect for a source whose flag is wrong, or letterbox to an exact target size. (#50)
Edge-directed upscaling controls. Full neuron, neighbourhood, quality and prescreener settings for NNEDI3 and EEDI3, plus seven resampling kernels with per-kernel tuning. (#50)
Wider source support. 4:1:1 (NTSC DV), 4:1:0, 9/12/14-bit, RGB and grayscale sources all import now, and anything unrecognised is converted rather than rejected. (#50)
Higher-quality interlaced chroma, on request. Interlaced 4:2:0 stores chroma per field, so interpolating at 4:2:0 mixes the two fields together. The deinterlace pass can convert to 4:2:2 first, and separately run at 16-bit to avoid rounding accumulated across QTGMC's many internal steps. Both are off by default: the chroma option costs roughly 30% throughput (measured 35 24 fps) for a gain that is subtle on most material, so the trade-off is yours to make. (#49)
Fixes
QTGMC's Placebo and Very Slow presets no longer brighten the picture on Apple Silicon, and Draft no longer comes out nearly black. The cause was in fmtconv, not QTGMC: its non-SIMD integer scaler applied sign-conversion constants meant for the SSE2/AVX2 paths, so any resample below 16-bit returned a black plane on builds without x86 SIMD. That destroyed the Bob() call feeding QTGMC's noise pass which only Placebo and Very Slow enable by default and Draft's interpolation. Affected Apple Silicon and arm64 Linux; Windows and Intel Macs were never affected.
NTSC DV files could not be imported at all. Any source whose pixel format wasn't one of twelve recognised names failed the whole job 4:1:1 DV, ProRes 4444, RGB, grayscale and hardware-decoder formats among them. (#50)
The EEDI3 upscale was never EEDI3. Selecting it silently performed a plain Spline36 resize. (#50)
NNEDI3 upscaling was misaligned. Every upscale was offset by a quarter of a source pixel on both axes, with chroma additionally misaligned against luma on 4:2:0. (#50)
Resizing dropped the pixel aspect ratio. An anamorphic source resized to a new width came out the wrong shape, with no error. (#50)
FineDehalo now uses its documented edge-mask thresholds. The Low/High Threshold controls (thmi/thma) defaulted to 50/100 values belonging to a different pair of parameters and were passed on every run, so FineDehalo never behaved as havsfunc documents. They now default to 80/128. Saved presets keep whatever they were saved with; only a newly enabled FineDehalo pass is affected. (#50)
AMD AMF encoders were reported as broken. The availability probe encoded a 64x64 frame, which AMF rejects outright because hardware encoders have minimum dimensions; it now probes at 512x512. AMF's ffmpeg arguments were also hardened against a crash under constant-quality mode. (#51)
Field order is derived once. SetFieldBased overrides QTGMC's own TFF argument, so deriving the two separately let autodetection silently override your field-order choice, and let the preview deinterlace differently from the final render. Both now come from one value. An unsupported ChromaEdi setting is also dropped rather than passed through, where it used to corrupt chroma badly. (#49)
The macOS title bar is no longer see-through. The window was configured with a transparent background, so nothing painted behind the native title bar and it rendered as floating text over whatever sat behind the window. Present since the Flutter migration; visible on macOS 26.
Stalled jobs fail instead of hanging forever. A wedged pipeline used to spin with no progress, no completion and no diagnostics; it now gives up and reports which stage stopped. (#50)
Dependency problems are reported when they happen. The installer checked that files existed, which a macOS-quarantined install satisfies perfectly so it reported success and then failed much later with an opaque "signal 9". It now checks the dependencies actually run, and names the fix. (#50)
Numeric dropdowns (DeScratch modes, SpotLess pel) could throw when changed. (#50)
VapourBox 0.9.10
Changes since 0.9.9.
Features & improvements
Frame-accurate preview and seeking. Preview and scrubbing now map sourceoutput frames exactly through a FrameMap seam, so the previewed frame matches the encode (including after frame-rate changes like double-rate deinterlacing). (#45)
Bit-depth quality warnings. The app now shows an inline advisory when a choice will silently reduce colour precision on a >8-bit source: enabling DeScratch (8-bit-only, so a lossy round-trip), or selecting a chroma-subsampling conversion that forces 8-bit output. (#47)
Fixes
IVTC no longer fails on >8-bit sources (e.g. 10-bit ProRes 422, yuv422p10le). Inverse-telecine field matching (VFM) now runs on an 8-bit metrics copy while emitting the full-depth pixels via clip2, so no precision is lost in both preview and full encode. (#46)
Correct frame rate for field-coded interlaced sources use the picture frame rate rather than the field rate. (#44, fixes #13)
VapourBox 0.9.9
What's new for users
Intel Macs now run on macOS 12 Monterey and later. Earlier builds targeted a newer macOS and crashed on Monterey with a dyld: Symbol not found error when generating a preview or encoding (issue #39). The Intel build's VapourSynth/vspipe and every bundled library are now built to load on macOS 12+. (Apple Silicon Macs still require macOS 15 Sequoia see Downloads.)
KNLMeansCL denoiser on every platform. The OpenCL-accelerated KNLMeansCL denoiser is now bundled everywhere and automatically falls back to DFTTest on machines without usable OpenCL, so denoising works regardless of GPU support (issue #37).
More reliable encoding. The worker now retries automatically when VapourSynth intermittently fails to autoload its plugins at startup, so a transient first-frame failure no longer aborts the whole job.
VapourBox 0.9.8
VapourBox 0.9.8 builds on 0.9.7 with extensive filter integration fixes across platform, and better queue handling plus a large dependency/CI overhaul under the bonnet to verify every single filter option works on every single supported platform.
What's new
TL;DR - a focus on fixes rather than features.
Encoding (issue #19)
Intel Mac bitrate control VideoToolbox on Intel has no constant-quality mode, so the quality slider produced badly under-bitrated output. The Quality section now offers native bitrate presets (Low / Medium / High / Very High) plus an editable Mb/s field. Apple Silicon keeps its quality slider unchanged.
HEVC plays in QuickTime / Apple players HEVC in MP4/MOV is now tagged hvc1 (with faststart) so Apple players no longer reject the file.
Codec selection no longer over-blocked encoders FFmpeg actually supports stay selectable even when the hardware probe fails; a failed probe now shows a warning with a viewable, copyable error log instead of silently disabling the option (e.g. h264_videotoolbox on some Intel Macs).
Copy Log button stays available the log panel (and its copy button) now remain visible after a job completes, not just while it's running.
Deinterlacing
OpenCL auto-detect with CPU fallback on macOS, QTGMC's GPU NNEDI3 path failed on machines with no usable OpenCL device (headless, VMs, remote-desktop sessions), erroring out every deinterlace job. The worker now probes for OpenCL and falls back to CPU NNEDI3 when it isn't available. Set VAPOURBOX_DISABLE_OPENCL=1 to force CPU.
Queue handling (issue #12)
Dropping more files no longer overwrites your settings scan-type auto-configuration now runs only for the first file into an empty queue, so adding files to an already-configured queue keeps your pipeline. Added audio-settings logging to aid diagnosis.
Reliability
Fixed an intermittent plugin-load failure (No attribute fmtc) caused by a shared VapourSynth autoload config being written concurrently (#36).
Under the bonnet
Dependency binaries are no longer committed the download-deps-* scripts and CI are now the source of truth, with sha256 integrity sidecars per release and a plugin-completeness guard that fails the build on missing plugins.
Numerous deps build fixes: macOS x64 FFTW reference, arm64 liblzma for BestSource, unbundled-dylib guards (issue #28), Windows VSScript init / x64 plugin selection, and a dead fmtconv download URL.
Flutter integration tests now run headless in CI.
Worker probes input frame count when a job omits total_frames (#35).
VapourBox 0.9.7
Encoder, denoiser, and dependency fixes building on the 0.9.6 cross-platform release.
What's New
Linux hardware-accelerated encoding the bundled Linux ffmpeg now includes hardware encoders (x64: Intel QSV, NVIDIA NVENC, AMD AMF, VAAPI; arm64: NVENC, AMF, V4L2 M2M). It still encodes in software where no GPU/driver is present.
Smarter hardware-encoder availability the encoder list now probes each hardware encoder and shows only what actually works on your machine (with a brief busy indicator while checking); unavailable ones are clearly disabled. Only platform-relevant encoders are listed (VideoToolbox on macOS; QSV/NVENC/AMF on Windows + Linux).
Dependency download progress the first-launch dependency dialog now shows extraction progress (previously it sat frozen on "Extracting " at 100%, which was especially noticeable on Linux).
Fixes
MCTemporalDenoise no longer crashes the TTempSmooth plugin was missing on every platform (and FFT3DFilter was missing on macOS), so havsfunc's MCTemporalDenoise denoiser failed with No attribute with the name ttmpsm. Both plugins are now bundled, and the denoiser works across macOS, Windows, and Linux.
Clean-aperture sources fixed garbage preview/encode on sources whose decoded frame size differs from the size ffprobe reports (e.g. a 10-bit 4:2:2 ProRes file with a clean aperture: reported 720Χ576 but decoded 702Χ576). The decoder is now pinned to the declared dimensions so the raw stream stays in sync; a no-op for normal sources.
Apple VideoToolbox on Intel Macs H.264/H.265 VideoToolbox now encode correctly on Intel Macs (they require an average bitrate; the previous constant-quality flag is Apple-Silicon only and made the encode fail).
Clearer encode errors when an encoder fails, VapourBox now reports the real ffmpeg error instead of a confusing vspipe SIGPIPE.
VapourBox 0.9.6
The big one: VapourBox now runs on Linux, and macOS ships as a single universal build covering both Apple Silicon and Intel.
What's New
Linux support (x86_64 + aarch64) VapourBox is now cross-platform across macOS, Windows, and Linux. It ships as a portable tarball; the VapourSynth/FFmpeg dependency stack downloads automatically on first launch (to ~/.local/share/VapourBox/), same as the other platforms. The full filter set is available.
macOS is now a Universal build a single signed & notarized DMG runs natively on both Apple Silicon and Intel Macs (Intel support is new this release)..
Fixes
Preview no longer breaks when toggling filters rapidly fixed a race condition that could leave the preview stale or errored when filters were switched in quick succession.
Clearer worker error reporting on Unix process failures now report the terminating signal (e.g. SIGSEGV) instead of an opaque exit code.
Downloads
Windows: VapourBox-0.9.6-windows-x64.zip
macOS (Universal Apple Silicon + Intel): signed & notarized VapourBox-0.9.6-macos-universal.dmg
Linux (x86_64): VapourBox-0.9.6-linux-x64.tar.gz
Linux (aarch64): VapourBox-0.9.6-linux-arm64.tar.gz
Dependencies
Dependencies (~185 MB) are downloaded automatically on first launch.
Under the hood
New cross-platform CI test gate runs the full Rust + Flutter test suites on macOS (Apple Silicon + Intel), Windows, and Linux for every push and PR.
Linux dependencies and the Linux whisper-cli are built from source via dedicated CI workflows; macOS x64 deps now build natively on the Intel runner.
VapourBox 0.9.5
What's New
New lossless codecs: HuffYUV and FFVHuff, selectable for AVI/MKV output (fast lossless intermediates alongside FFV1).
macOS builds are now (finally) signed and notarized with a Developer ID open without Gatekeeper warnings.
Fixes
#6 MP4/MOV output no longer fails on sources with image-based (PGS/VobSub) subtitles; only text subtitles are mapped to mov_text, image-based tracks are skipped.
Output paths now use the platform separator on Windows (no more mixed D:\dir/file.mov).
Preview now reports a clear error on un-analyzed files instead of a cryptic BlankClip: invalid width.
VapourBox 0.9.3
Hotfix v0.9.3
Fix DVD extraction failing on Windows physical drives root paths like D:\ produced illegal characters in temp filenames
VapourBox 0.9.2
What's New
Film Restoration Filters
DeScratch Remove vertical scratches from scanned film (spatial, single-frame analysis)
SpotLess Remove dust, dirt, and temporal spots using motion-compensated median filtering
Chroma Fixes
Chroma Shift (Y/C Delay) Precisely align chroma planes with sub-pixel accuracy for analog sources
Fixed method dropdown showing alongside individual checkboxes in Chroma Fixes
Bug Fixes
Fixed preview template unconditionally marking clips as field-based, causing resize errors with some filters
Fixed DeScratch compatibility with field-based clips and non-8-bit formats
Dependencies (deps-v1.3.0)
Added DeScratch plugin (Windows DLL + macOS arm64 dylib)
Added TemporalMedian plugin (Windows DLL + macOS arm64 dylib)
VapourBox 0.9.1
What's New
Bug Fixes
Fix filter parameter values silently lost on UI round-trips due to schema-converter mismatches
Fix resize kernel always resetting to default when saving/loading presets
Fix MCTemporalDenoise settings param not passed to VapourSynth
Fix QTGMC built-in denoising values ignored when set from noise reduction panel
Remove dead blockSize/overlap fields from deblock filter
Improvements
Add comprehensive schema-converter integration tests (98 tests) to prevent future mismatches
Case-insensitive dropdown matching prevents silent enum fallback bugs
Dependencies
Uses deps release: deps-v1.2.0
VapourBox 0.9.0
What's New
DVD Disc Import
Import directly from DVD discs, VIDEO_TS folders, and ISO images. VapourBox extracts individual titles using libdvdread, with progress tracking and automatic cleanup of temp files. CSS decryption supported if the user installs libdvdcss separately.
OpenCL GPU Acceleration on macOS
QTGMC now automatically uses NNEDI3CL (OpenCL GPU) on macOS, where the CPU-only ZNEDI3/NNEDI3 plugins lack ARM NEON optimisations and run pure scalar C. This significantly speeds up the interpolation step on Apple Silicon.
Replace BestSource/FFMS2 with FFmpeg Pipe Source
BestSource's frame-accurate seeking could cause A/V desync on certain sources. This release replaces the entire source chain with a single FFmpeg pipe architecture:
No more slow indexing FFmpeg pipe starts immediately, no frame index needed
Consistent preview and encode paths preview uses the identical pipeline as conversion
Preview respects encoding settings chroma subsampling and other parameters reflected in previews
Advanced QTGMC Parameters Overhaul
All advanced QTGMC parameters are now optional with proper defaults matching havsfunc internals. When a checkbox is unchecked, the parameter is omitted entirely letting QTGMC use its own preset-driven defaults (matching how tools like Hybrid handle these settings).
30 advanced parameters (TrueMotion, GlobalMotion, DCT, SubPelInterp, ThSAD1/2, ThSCD1/2, etc.) are now optional previously always passed even when untouched
All optional parameter defaults match the actual havsfunc function signatures, not custom presets
User-adjusted values are preserved when disabling and re-enabling a parameter checkbox
5 parameters (Str, Amp, FastMA, ESearchP, RefineMotion) were not being passed to the script at all now properly wired through
Bug Fixes
Fix advanced settings optional parameter checkboxes not toggling (#4) optional params had null defaults, so clicking the checkbox called onChanged(null) which kept the parameter disabled
Fix 4 VapourSynth parameter name mismatches in deinterlace schema (BlockSizeBlocksize, SBBSbb, Devicedevice, OpenCLopencl) that caused silent parameter drops
Remove non-existent vinverseScl parameter from Vinverse filter (havsfunc Vinverse only has sstr, amnt, chroma)
Fix all filter schema defaults to match actual havsfunc function signatures (dehalo, noise_reduction, sharpen, deband, chroma_fixes)
Fix display aspect ratio for anamorphic DVD previews (SAR correction)
Fix queue info dialog overflow when showing long DVD extraction logs
Fix ffmpeg reading full audio track when exporting trimmed segments
Fix orphaned vspipe process on cancel by calling vspipe-bin directly
Fix progress tracking showing wrong frame count when trimming with in/out points
Fix phase-aware progress tracking for telecine pipeline
Fix whisper deadlock on long videos and subtitle-only output path bugs
Fix pipe_source.py not bundled in release builds
Embed VapourBox version in output file metadata and preserve source subtitles
Testing
Added schema-driven integration tests for all filter types (QTGMC, noise reduction, dehalo, deblock, deband, sharpen, chroma fixes, color correction)
Tests verify every optional parameter name and value in the generated VapourSynth script against the filter schema
Basic-mode test verifies no advanced parameters leak into the script when Advanced mode is off
12 new integration tests, all passing
Internal
QTGMC parameters are now nullable null means "let the preset decide" vs an explicit user override
lastOptionalValues in DynamicParameters preserves user values across disable/re-enable cycles
Renamed RestorationPipeline ProcessingPipeline across codebase
Filter category restoration cleanup
Removed FFMS2 and BestSource dependencies entirely smaller dependency footprint
Patched havsfunc EEDI3CL fallback for modern eedi3m plugin (no OpenCL EEDI3)
VapourBox 0.8.0
Whisper Subtitle Generation
Add Whisper-powered subtitle generation as a pipeline pass (SRT file, embedded, or both)
Subtitle-only mode: generate subtitles without video re-encoding
UX Improvements
Visual "Post-Processing" separator between video filters and subtitles in pass list
Context-aware pass summary (e.g. "2 video passes, subtitles enabled", "Subtitle generation only")
Context-aware completion label ("Subtitles saved to:" vs "Output saved to:")
Output path automatically switches to .srt extension in subtitle-only SRT mode
Bug Fixes
Fix aspect ratio (SAR) not preserved in output video ffmpeg setsar filter was receiving : as option separator instead of ratio separator
VapourBox 0.7.1
Changes
Fix false telecine detection on VHS tapes: Interlaced PAL VHS content was being misclassified as hard telecine due to stray repeated fields from tracking instability. Now requires 15% repeated fields ratio (real 3:2 pulldown is ~40%) instead of triggering on any single repeated field.
Skip VHS leader for scan analysis: idet analysis now skips the first 2 seconds of longer videos to avoid unstable VHS leader/tracking sections.
VapourBox 0.7.0
What's New
Soft Telecine Support
Added soft telecine (IVTC) as a deinterlace method
Replaced scan type detection with ffmpeg idet filter for more accurate interlace/telecine detection
Auto-detects soft telecine content and suggests appropriate processing
Preset System Improvements
Update presets: Sync button on user presets to update with current settings
Overwrite warning: Confirmation dialog when saving a preset with a duplicate name
UI/UX Improvements
Show actual frame rates (e.g., 29.97 fps) in QTGMC output rate options instead of rounded values
Disable processing button during active processing, with cancel confirmation dialog
Hide TFF field order parameter when not using QTGMC deinterlace method
Developer Improvements
Added macOS debug build-and-run script (Scripts/run-debug-macos.sh)
Fixed macOS GitHub Actions workflow (correct Rust action, xcodebuild build process)
Added Scripts/ci-build-and-release.sh to trigger CI builds and upload artifacts to draft releases
Fixed macOS debug SIGPIPE crash caused by Flutter 3.35+ merged UI/platform thread mode
VapourBox 0.5.2
Changes
Update to try to track down dependency resolution issues. For diagnostics on MacOS launch from the terminal with /Applications/VapourBox.app/Contents/MacOS/vapourbox.
Fix macOS dependency detection after extraction
Ad-hoc codesign all dylibs and executables after dependency download (fixes Gatekeeper blocking on macOS Sequoia+)
Add python/lib to DYLD_LIBRARY_PATH to match Rust worker environment
Set PYTHONNOUSERSITE=1 to prevent user site-packages interference
Add diagnostic logging to ToolLocator for easier debugging
Uses dependencies from: deps-v1.0.0
VapourBox 0.5.1
Changes
Fix hardware codec determination, show all hardware codecs and warn about the unsupported ones
Centralize tool path management, fix warnings
Bug fixes and improvements
VapourBox 0.5.0
What's New
Hardware Encoding Support
Added support for hardware-accelerated encoding: NVENC (NVIDIA), QSV (Intel), VideoToolbox (macOS), AMF (AMD)
Audio & Encoding Improvements
Audio mode selection (copy, transcode, or remove)
Chroma subsampling options
Codec and pixel format info in video info dialog
Quality of Life
Videos can now be re-processed without restarting the app
Dependencies
Uses existing dependency release: deps-v1.0.0
Full Changelog
Add hardware encoding support (NVENC, QSV, VideoToolbox, AMF)
Add audio mode selection, chroma subsampling, and integration tests
Add codec and pixel format info to video info dialog
Document macOS build workaround and release packaging requirements
VapourBox 0.4.0
What's New
Processing Improvements
Batch processing fix: Fixed race condition in batch processing queue
Re-process videos: Videos can now be re-processed without restarting the app
Overwrite confirmation: Added confirmation dialog when output file already exists
Video Info
Codec and pixel format info: Video info dialog now shows codec name and pixel format details
Auto-Updates
Update checker: App now checks for updates on startup and notifies when a new version is available
VapourBox 0.3.0
What's New
Video Queue
Batch processing: Add multiple videos to a queue for sequential processing
Process your entire collection without manual intervention
Output Configuration
Custom output directory: Choose where processed videos are saved
Filename patterns: Configure output filenames with variables like {original}, {date}, etc.
Compatibility
NTSC DV support: Automatically convert 4:1:1 chroma to 4:2:2 for filter compatibility
VapourBox 0.2.1
What's New
Bug Fixes & Improvements
Fix preview generation working directory for dependency paths
Add delay before worker exit to ensure completion message is received
Remove legacy qtgmc_template fallback and fix dev path security
Add audio codec compatibility warning dialog and full E2E tests
Document dev vs production build strategy for dependency location
macOS
Build for Apple Silicon (arm64) only - Intel Mac support removed
Fixed release script version parsing
VapourBox 0.2.0
Cross-platform video restoration application using VapourSynth.
Changes
Switch from http to rhttp for Windows certificate support
Security: Only check development paths in debug builds
Fix macOS deps storage location to use Application Support
Reorganize Settings dialog into Input and Output tabs
Update README with screenshot and improved description
VapourBox 0.1.0
A user-friendly wrapper for VapourSynth that makes video processing accessible to everyone.
VapourBox Screenshot
What is VapourBox?
VapourBox provides a simple drag-and-drop interface for powerful video processing tasks that normally require scripting knowledge. Convert interlaced footage, apply QTGMC deinterlacing, reduce noise, and fix common video problemsno command line needed.
Features
QTGMC deinterlacing - Industry-standard deinterlacing with full parameter control
Multi-pass restoration pipeline - Denoise, sharpen, dehalo, deblock, deband
Real-time preview - Side-by-side before/after comparison
Timeline with zoom - Navigate and set in/out points for partial exports
Multiple output codecs - ProRes, FFV1, H.264, H.265
Preset system - Save and reuse your filter configurations
Use Cases
Convert interlaced video to progressive
Clean up noisy or soft footage
Archive DVDs with proper deinterlacing
Restore VHS captures
Platforms
macOS ARM64 (Apple Silicon)
Windows x64
Installation
Download the zip for your platform
Extract and run
Dependencies (~94 MB macOS, ~183 MB Windows) download automatically on first launch
Requirements
macOS 11+ (Apple Silicon) or Windows 10/11 (x64)
Internet connection for first launch