Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
5bb6dd5
chore: ignore the local add-on staging directory
StuartCameronCode Nov 8, 2026
131b9b3
fix(debug): copy every template module into the debug bundle
StuartCameronCode Nov 8, 2026
5369eb6
feat(addons): manifest-driven add-ons, and the AI runtime add-on
StuartCameronCode Nov 8, 2026
98bd7bd
docs(addons): the manifest format, the AI runtime, adding an add-on
StuartCameronCode Nov 8, 2026
25b45c5
Merge groundwork: manifest add-ons + AI runtime
StuartCameronCode Nov 8, 2026
44a3f0a
fix(addons): commit the ai-runtime manifest
StuartCameronCode Nov 8, 2026
723c871
feat(models): convert Real-ESRGAN general and x4plus/x2plus to ONNX
StuartCameronCode Nov 8, 2026
c513f7a
feat(upscale): add-on AI upscalers and an AI strength control in the …
StuartCameronCode Nov 8, 2026
6f9fa9a
deps(1.16.0, unreleased): vszip 24.0.0 and SangNom r45 on every platform
StuartCameronCode Nov 8, 2026
b710ff0
feat(audio): audio restoration rendered before the encode
StuartCameronCode Nov 8, 2026
c49a5f5
feat(app): Audio Restoration pass and the DeepFilterNet add-on
StuartCameronCode Nov 8, 2026
66211a3
feat(upscale): offer the add-on upscalers and AI strength in Crop & R…
StuartCameronCode Nov 8, 2026
bdab367
docs(credits): credit the Real-ESRGAN and 2xLiveActionV1_SPAN add-on …
StuartCameronCode Nov 8, 2026
3eee28f
fix(audio): resample for drift, measured afftdn floor, tags on every …
StuartCameronCode Nov 8, 2026
335ef75
fix(upscale): never give VSNCNN a tile larger than the frame; test th…
StuartCameronCode Nov 8, 2026
03b35b2
feat(face-restore): convert RetinaFace, BiSeNet, RestoreFormer++, GFP…
StuartCameronCode Nov 8, 2026
044025b
feat(face-restore): the Face Restoration pass in the worker
StuartCameronCode Nov 8, 2026
c926cde
docs(audio): rules, report and notes; test that subtitles follow the …
StuartCameronCode Nov 8, 2026
8db1b6e
docs(audio): no built-in preset turns audio restoration on, and why
StuartCameronCode Nov 8, 2026
6517413
feat(face-restore): the Face Restoration pass in the app
StuartCameronCode Nov 8, 2026
7d6c7c0
Merge wave 1: audio restoration
StuartCameronCode Nov 8, 2026
09d4261
fix(face-restore): serialise model runs, keep only face regions in th…
StuartCameronCode Nov 8, 2026
d87e2f2
feat(filters): SangNom AA, NLMeans (CPU), vine dehalo, mpeg2stinx, IV…
StuartCameronCode Nov 8, 2026
8d9897c
fix(whisper): correct the small and large-v3-turbo model sizes
StuartCameronCode Nov 8, 2026
c54b08f
docs(face-restore): CLAUDE.md rules and key files for Face Restoration
StuartCameronCode Nov 8, 2026
86d46c6
docs: report on the live-action AI upscalers, AI strength and the 2xV…
StuartCameronCode Nov 8, 2026
267d590
Merge ship-every-platform (audio restoration) into classical filters
StuartCameronCode Nov 8, 2026
f41fbd2
Merge ship-every-platform (audio restoration) into the AI upscale add…
StuartCameronCode Nov 8, 2026
4ff54a4
fix(test): restore the closing brace lost in the merge
StuartCameronCode Nov 8, 2026
094aa8d
Merge ship-every-platform (audio restoration) into face restoration
StuartCameronCode Nov 8, 2026
2e5357c
docs: SangNom, NLMeans (CPU), vs-jetpack ports and deps 1.16.0 (unrel…
StuartCameronCode Nov 8, 2026
9aa82d7
Merge wave 1: AI upscaling add-ons and AI strength
StuartCameronCode Nov 8, 2026
f759444
docs(report): classical filters for deps 1.16.0 — measurements and sc…
StuartCameronCode Nov 8, 2026
aa40b4a
docs(face-restore): report, engineering notes and reports index
StuartCameronCode Nov 8, 2026
58010f8
Merge ship-every-platform (live-action upscalers) into face restoration
StuartCameronCode Nov 8, 2026
9413a7a
Merge wave 1: face restoration
StuartCameronCode Nov 8, 2026
46b6808
fix(ivtc): the fade fix crashed or hung real jobs under vspipe
StuartCameronCode Nov 8, 2026
9b885b7
docs(report): benchmark results; SangNom is the sharpest AA, not the …
StuartCameronCode Nov 8, 2026
e8df371
Merge ship-every-platform (AI upscaling add-ons, face restoration)
StuartCameronCode Nov 8, 2026
d07da89
Merge wave 1: classical filters (deps 1.16.0, unreleased)
StuartCameronCode Nov 8, 2026
0aa0f15
test(addons): installer unit tests ignore VAPOURBOX_ADDON_MIRROR
StuartCameronCode Nov 8, 2026
f2ed066
chore(addons): host the converted models on deps-v1.16.0-rc1 during 1…
StuartCameronCode Nov 8, 2026
e1fb51b
feat(crop-resize): convert BT.601 to BT.709 when SD is upscaled to HD
StuartCameronCode Nov 8, 2026
02572a3
feat(worker): --detect-crop measures borders, blanking and head switc…
StuartCameronCode Nov 8, 2026
3845af8
feat(app): Detect borders in Crop & Resize
StuartCameronCode Nov 8, 2026
d31c2ca
docs: report and notes for BT.709 conversion and Detect borders
StuartCameronCode Nov 8, 2026
6b19424
Merge branch 'ship-every-platform' into worktree-agent-a6a68dd25fa376899
StuartCameronCode Nov 8, 2026
98590cd
fix(crop-detect): repairing the band also covers black lines below it
StuartCameronCode Nov 8, 2026
e65d99e
Merge wave 2: BT.601→709 on SD→HD, and border detection
StuartCameronCode Nov 8, 2026
780142f
fix(addons): a file the mirror doesn't hold is downloaded
StuartCameronCode Nov 8, 2026
6917a64
feat(colorize): convert DDColor-T and DeOldify Video to ONNX
StuartCameronCode Nov 8, 2026
22e09f9
feat(colorize): the Colourisation pass in the worker
StuartCameronCode Nov 8, 2026
90042b7
feat(colorize): the Colourisation pass in the app
StuartCameronCode Nov 8, 2026
0686189
fix(colorize): route Expr through the templates' _expr() helper
StuartCameronCode Nov 8, 2026
efcfe98
feat(colorize): advise that Chroma Denoise is wasted before Colourisa…
StuartCameronCode Nov 8, 2026
da5c185
docs(colorize): report, engineering notes, CLAUDE.md rules
StuartCameronCode Nov 8, 2026
1280429
Merge ship-every-platform into colourisation
StuartCameronCode Nov 8, 2026
7d0b697
fix(deps): retry downloads, and fail on an HTTP error page
StuartCameronCode Nov 8, 2026
23fc3f2
Merge wave 2: colourisation (DDColor, DeOldify Video)
StuartCameronCode Nov 8, 2026
9dd56a3
deps: point the app and tests at deps-v1.16.0-rc1
StuartCameronCode Nov 8, 2026
7277d07
deps: name the release candidate's bundles 1.16.0-rc1
StuartCameronCode Nov 8, 2026
fabc90c
test: fix three CI-only failures on Windows and macOS 15
StuartCameronCode Nov 8, 2026
cd33482
test: CRLF in the ai_runtime self-test check; longer budget for x4plu…
StuartCameronCode Nov 8, 2026
61e9e36
test: kill the worker's whole tree on a harness timeout; lighter GPU …
StuartCameronCode Nov 8, 2026
5a8e3a8
test: leave GPU-dependent tests out on the GPU-less CI runners
StuartCameronCode Nov 8, 2026
1d3a8fd
test: CPU-fallback budgets for the face/colour previews and Whisper
StuartCameronCode Nov 9, 2026
bc3878b
feat(addons): let a manifest file install into a subdirectory
StuartCameronCode Nov 9, 2026
4d8db58
feat: RIFE's and the anime upscalers' models become add-ons
StuartCameronCode Nov 9, 2026
f9ca5c7
test(badges): follow the anime upscalers' new download labels
StuartCameronCode Nov 9, 2026
b9310be
Merge W8: RIFE and anime upscaler models become add-ons
StuartCameronCode Nov 9, 2026
c057af6
feat(worker): --detect-noise-halo measures a source's noise and halos
StuartCameronCode Nov 9, 2026
f586911
feat(app): suggest Noise Reduction and Dehalo from a measured picture
StuartCameronCode Nov 9, 2026
09e0aac
docs: noise and halo scores report, notes and rules
StuartCameronCode Nov 9, 2026
c1380b8
Merge W7: measured noise and halo scores suggest Noise Reduction and …
StuartCameronCode Nov 9, 2026
1314139
deps: point the app and tests at deps-v1.16.0-rc2
StuartCameronCode Nov 9, 2026
024325a
release: deps 1.16.0, and the add-on models move to addon-models-v1
StuartCameronCode Nov 9, 2026
b5d0440
chore: bump app version to 1.7.0
StuartCameronCode Nov 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 0 additions & 72 deletions .github/scripts/provision-vulkan.sh

This file was deleted.

31 changes: 11 additions & 20 deletions .github/workflows/ci-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ name: CI Tests
# Pulls the published dependency bundle + the whisper add-on (binary + small
# model) and runs the Rust test suite plus the Flutter tests, EXCLUDING the
# heavy full-encode integration tests (those run in nightly.yml via
# `--tags heavy`). macOS is tested natively on both arm64 (macos-15) and x64
# `--tags heavy`) and the `gpu` tests, which need a Vulkan device these
# runners lack (app/dart_test.yaml). macOS is tested natively on both arm64 (macos-15) and x64
# (macos-15-intel); Windows on x64; Linux on x64 (ubuntu-24.04).

on:
Expand Down Expand Up @@ -104,11 +105,6 @@ jobs:
ln -sfn "$WP/lib" addons/whisper/lib
test -x addons/whisper/bin/whisper-cli || { echo "::error::whisper-cli not found under $WP/bin"; exit 1; }

- name: Provision Vulkan (RIFE, AI upscaling)
# Lavapipe on the GPU-less Linux/Windows runners; sets
# VAPOURBOX_EXPECT_VULKAN=1 so the GPU tests must run, not skip.
run: bash .github/scripts/provision-vulkan.sh macos-${{ matrix.arch }}

- name: Rust tests
# Debug build: DependencyLocator's upward search then finds the repo-root
# deps/ and addons/ (release mode looks under ~/Library).
Expand All @@ -123,7 +119,9 @@ jobs:
- name: Flutter tests
# Excludes @Tags(['heavy']) — the full-encode integration tests, which
# run in nightly.yml. The script-only integration tests + unit tests run here.
run: cd app && flutter test --exclude-tags heavy
# Also excludes @Tags(['gpu']): the hosted runners have no GPU, and the
# tests that run RIFE / AI upscaling need a Vulkan device (dart_test.yaml).
run: cd app && flutter test --exclude-tags heavy,gpu

- name: Crash reports (on failure)
# A plugin that segfaults in vspipe shows only "signal 11" in the test
Expand Down Expand Up @@ -187,12 +185,6 @@ jobs:
cp "$(dirname "$CLI")"/*.dll addons/whisper/ 2>/dev/null || true
ls addons/whisper/

- name: Provision Vulkan (RIFE, AI upscaling)
# Lavapipe on the GPU-less Linux/Windows runners; sets
# VAPOURBOX_EXPECT_VULKAN=1 so the GPU tests must run, not skip.
shell: bash
run: bash .github/scripts/provision-vulkan.sh windows-x64

- name: Rust tests
run: cd worker && cargo test -- --nocapture

Expand All @@ -205,7 +197,9 @@ jobs:
- name: Flutter tests
# Excludes @Tags(['heavy']) — the full-encode integration tests, which
# run in nightly.yml. The script-only integration tests + unit tests run here.
run: cd app && flutter test --exclude-tags heavy
# Also excludes @Tags(['gpu']): the hosted runners have no GPU, and the
# tests that run RIFE / AI upscaling need a Vulkan device (dart_test.yaml).
run: cd app && flutter test --exclude-tags heavy,gpu

linux:
runs-on: ubuntu-24.04 # must match the deps-build runner: those binaries
Expand Down Expand Up @@ -281,11 +275,6 @@ jobs:
ln -sfn "${{ github.workspace }}/deps" "$HOME/.local/share/VapourBox/deps"
ln -sfn "${{ github.workspace }}/addons" "$HOME/.local/share/VapourBox/addons"

- name: Provision Vulkan (RIFE, AI upscaling)
# Lavapipe on the GPU-less Linux/Windows runners; sets
# VAPOURBOX_EXPECT_VULKAN=1 so the GPU tests must run, not skip.
run: bash .github/scripts/provision-vulkan.sh linux-x64

- name: Rust tests
run: cd worker && cargo test -- --nocapture

Expand All @@ -298,4 +287,6 @@ jobs:
- name: Flutter tests
# Excludes @Tags(['heavy']) — the full-encode integration tests, which
# run in nightly.yml. The script-only integration tests + unit tests run here.
run: cd app && flutter test --exclude-tags heavy
# Also excludes @Tags(['gpu']): the hosted runners have no GPU, and the
# tests that run RIFE / AI upscaling need a Vulkan device (dart_test.yaml).
run: cd app && flutter test --exclude-tags heavy,gpu
25 changes: 6 additions & 19 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,6 @@ jobs:
ln -sfn "$WP/lib" addons/whisper/lib
test -x addons/whisper/bin/whisper-cli || { echo "::error::whisper-cli not found under $WP/bin"; exit 1; }

- name: Provision Vulkan (RIFE, AI upscaling)
# Lavapipe on the GPU-less Linux/Windows runners; sets
# VAPOURBOX_EXPECT_VULKAN=1 so the GPU tests must run, not skip.
run: bash .github/scripts/provision-vulkan.sh macos-${{ matrix.arch }}

- name: Build worker (debug)
run: cd worker && cargo build

Expand All @@ -135,7 +130,8 @@ jobs:
# found" and prove nothing.
env:
VAPOURBOX_WORKER: ${{ github.workspace }}/worker/target/debug/vapourbox-worker
run: cd app && flutter test --tags heavy
# Not @Tags(['gpu']): the hosted runners have no GPU (dart_test.yaml).
run: cd app && flutter test --tags heavy --exclude-tags gpu

- name: Crash reports (on failure)
# A plugin that segfaults in vspipe shows only "signal 11" in the test
Expand Down Expand Up @@ -204,12 +200,6 @@ jobs:
cp "$(dirname "$CLI")"/*.exe addons/whisper/ 2>/dev/null || true
cp "$(dirname "$CLI")"/*.dll addons/whisper/ 2>/dev/null || true

- name: Provision Vulkan (RIFE, AI upscaling)
# Lavapipe on the GPU-less Linux/Windows runners; sets
# VAPOURBOX_EXPECT_VULKAN=1 so the GPU tests must run, not skip.
shell: bash
run: bash .github/scripts/provision-vulkan.sh windows-x64

- name: Build worker (debug)
run: cd worker && cargo build

Expand All @@ -224,7 +214,8 @@ jobs:
# `flutter test`, where the running executable is the test runner.
env:
VAPOURBOX_WORKER: ${{ github.workspace }}\worker\target\debug\vapourbox-worker.exe
run: cd app && flutter test --tags heavy
# Not @Tags(['gpu']): the hosted runners have no GPU (dart_test.yaml).
run: cd app && flutter test --tags heavy --exclude-tags gpu

linux:
if: ${{ github.event_name == 'schedule' || inputs.platform == 'all' || inputs.platform == 'linux' }}
Expand Down Expand Up @@ -294,11 +285,6 @@ jobs:
ln -sfn "${{ github.workspace }}/deps" "$HOME/.local/share/VapourBox/deps"
ln -sfn "${{ github.workspace }}/addons" "$HOME/.local/share/VapourBox/addons"

- name: Provision Vulkan (RIFE, AI upscaling)
# Lavapipe on the GPU-less Linux/Windows runners; sets
# VAPOURBOX_EXPECT_VULKAN=1 so the GPU tests must run, not skip.
run: bash .github/scripts/provision-vulkan.sh linux-x64

- name: Build worker (debug)
run: cd worker && cargo build

Expand All @@ -316,4 +302,5 @@ jobs:
# found" and prove nothing.
env:
VAPOURBOX_WORKER: ${{ github.workspace }}/worker/target/debug/vapourbox-worker
run: cd app && flutter test --tags heavy
# Not @Tags(['gpu']): the hosted runners have no GPU (dart_test.yaml).
run: cd app && flutter test --tags heavy --exclude-tags gpu
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ BundledDependencies/Scripts/*.py
!BundledDependencies/Scripts/.gitkeep

# Add-ons (whisper binary + models, downloaded at runtime)
addons/
/addons/

# Claude Code
.claude/
Expand All @@ -127,3 +127,6 @@ tmpclaude-*
licenseplan.md
*.mkv
!Tests/TestResources/soft_telecine_test.mkv

# Locally converted add-on model files awaiting upload (see docs/ADDONS.md)
addon-staging/
Loading
Loading