Releases: StuartCameronCode/VapourBox
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 (BlockSize→Blocksize, SBB→Sbb, Device→device, OpenCL→opencl) that caused silent parameter drops
- Remove non-existent
vinverseSclparameter 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.pynot 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 —
nullmeans "let the preset decide" vs an explicit user override lastOptionalValuesinDynamicParameterspreserves user values across disable/re-enable cycles- Renamed
RestorationPipeline→ProcessingPipelineacross 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)
Dependencies: Uses deps-v1.2.0 — adds libdvdread, boost (for NNEDI3CL), removes FFMS2
Dependencies 1.2.0
Changes since deps-v1.1.0
- Removed FFMS2 and BestSource dependencies (replaced by FFmpeg pipe source)
- Added dvdbackup for DVD disc import support
- Smaller dependency footprint
VapourBox 0.8.0
What's New in 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
.srtextension in subtitle-only SRT mode
Bug Fixes
- Fix aspect ratio (SAR) not preserved in output video — ffmpeg
setsarfilter was receiving:as option separator instead of ratio separator
Dependencies
Uses existing dependency release: deps-v1.1.0
🤖 Generated with Claude Code
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.
Dependencies
Uses dependencies from: deps-v1.1.0
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.shto trigger CI builds and upload artifacts to draft releases - Fixed macOS debug SIGPIPE crash caused by Flutter 3.35+ merged UI/platform thread mode
Dependencies
Uses dependencies from: deps-v1.1.0
VapourBox 0.5.3
Changes
- Fixed bugs and added more options to compression codecs, including ffmpeg overrides
- Add zoom & pan support to the preview window
- Disable bilinear filtering on split preview for pixel-accurate zoom
- Fixed progress tracking of processing jobs (this was a deep rabbit hole!)
- DMG based distribution for MacOS builds, fixes symlink issues with rhttp library
Downloads
macOS: VapourBox-0.5.3-macos-arm64.dmg
Windows: VapourBox-0.5.3-windows-x64.zip
Dependencies (~185 MB) are downloaded automatically on first launch.
Uses dependency release: deps-v1.0.0
Dependencies v1.1.0
Dependencies v1.1.0
Changes from v1.0.0
- Added VIVTC.dll plugin (inverse telecine - VFM field matching + VDecimate)
Platforms
- Windows x64
- macOS x64 (pending)
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/libtoDYLD_LIBRARY_PATHto match Rust worker environment - Set
PYTHONNOUSERSITE=1to 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
Dependencies
Uses dependencies from deps-v1.0.0 (auto-downloaded on first launch).