Skip to content

Releases: StuartCameronCode/VapourBox

VapourBox 0.9.1

26 Mar 07:26

Choose a tag to compare

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

23 Mar 22:05

Choose a tag to compare

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 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 RestorationPipelineProcessingPipeline across codebase
  • Filter category restorationcleanup
  • 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

21 Mar 06:22

Choose a tag to compare

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

09 Mar 13:25

Choose a tag to compare

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 .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

Dependencies

Uses existing dependency release: deps-v1.1.0


🤖 Generated with Claude Code

VapourBox 0.7.1

08 Mar 15:01

Choose a tag to compare

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

07 Mar 09:49

Choose a tag to compare

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

Dependencies

Uses dependencies from: deps-v1.1.0

VapourBox 0.5.3

21 Feb 05:04

Choose a tag to compare

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

21 Feb 16:26

Choose a tag to compare

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

15 Feb 05:26

Choose a tag to compare

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

13 Feb 12:22

Choose a tag to compare

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).