Skip to content

Add TTempSmooth (+ macOS FFT3DFilter) for MCTemporalDenoise; unify deps to 1.4.0#26

Merged
StuartCameronCode merged 6 commits into
mainfrom
fix-ttempsmooth-plugin
Jun 10, 2026
Merged

Add TTempSmooth (+ macOS FFT3DFilter) for MCTemporalDenoise; unify deps to 1.4.0#26
StuartCameronCode merged 6 commits into
mainfrom
fix-ttempsmooth-plugin

Conversation

@StuartCameronCode

Copy link
Copy Markdown
Owner

Draft — Linux + macOS-x64 + Windows fixes are validated; macOS arm64 deps build is blocked by a separate, pre-existing runner-env issue (handoff doc included) and must go green before this ships.

Problem

A user crash: No attribute with the name ttmpsmhavsfunc.MCTemporalDenoise needs core.ttmpsm.TTempSmooth and core.fft3dfilter.FFT3DFilter. Inspecting the published deps zips: ttmpsm was missing on every platform, and macOS also lacked fft3dfilter.

Fix

Platform ttmpsm fft3dfilter Status
Linux added (build_plugin, meson) already present ✅ CI build green; core.ttmpsm + MCTemporalDenoise verified
Windows added (prebuilt TTempSmooth-r4.1-win64.7z) already present scripted (Windows deps built off-CI)
macOS x64 added (source build) added (source build) ✅ CI: Built TTempSmooth + Built FFT3DFilter
macOS arm64 added (yuygfgg prebuilt) added (yuygfgg prebuilt) ⚠️ blocked — see below

Also unifies deps to a single 1.4.0 / deps-v1.4.0 across all platforms (app/assets/deps-version.json, sha256/size null pending a clean rebuild — every platform's deps change and 1.4.0 hasn't shipped in an app release yet).

Why this is a draft (macOS arm64)

build-deps-macos.yml's arm64 job fails on pre-existing issues unrelated to this change: the macos-15 runner's Homebrew Python 3.14 breaks mvtools/znedi3's build-time import vapoursynth include probe (recent main builds were already failing). The Linux dev box can't reproduce/fix macOS builds, so docs/macos-arm64-deps-build-handoff.md is a step-by-step plan for a macOS instance to unblock it.

Before merge / release

  • Get the macOS arm64 deps build green (handoff doc).
  • Rebuild + publish all deps at deps-v1.4.0 (build-deps-linux.yml, build-deps-macos.yml, Windows deps re-run), then fill the five sha256/size values in deps-version.json.

🤖 Generated with Claude Code

StuartCameronCode and others added 6 commits June 9, 2026 23:00
havsfunc's MCTemporalDenoise (used by the noise-reduction filter) calls
core.ttmpsm.TTempSmooth, which wasn't built for Linux, so jobs using it
crashed with "No attribute with the name ttmpsm". Add it via the existing
build_plugin helper (meson, HomeOfVapourSynthEvolution/VapourSynth-TTempSmooth).

Verified: the built plugin loads as core.ttmpsm and MCTemporalDenoise runs.

Note: ttmpsm is also absent from the published macOS and Windows deps, and
macOS additionally lacks fft3dfilter (which MCTemporalDenoise also needs) —
so that filter is currently broken on those platforms too (tracked separately).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
havsfunc MCTemporalDenoise needs core.ttmpsm.TTempSmooth and
core.fft3dfilter.FFT3DFilter. Checking the published deps zips showed
ttmpsm absent on every platform, and macOS additionally missing
fft3dfilter — so the noise-reduction filter was broken everywhere.

- Windows: add TTempSmooth (prebuilt r4.1 win64 7z); fft3dfilter already present.
- macOS: add TTempSmooth + FFT3DFilter — arm64 from the yuygfgg prebuilt
  pool (mirrors dfttest, with the FFTW install-name fixup), x86_64 built
  from source via meson (mirrors descratch/nnedi3cl; FFT3DFilter repointed
  at the bundled FFTW like dfttest).
- Linux already adds ttmpsm (prior commit); has fft3dfilter.

Unify all platforms back to deps 1.4.0 (deps-v1.4.0) with null sha/size
pending a rebuild — every platform's deps change, and 1.4.0 hasn't shipped
in an app release yet, so the per-platform version split is dropped.

NOTE: the macOS build steps are CI/maintainer-validated (build-deps-macos.yml)
— they couldn't be built/tested on the Linux dev machine.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A macOS instance can build the deps locally (the Linux dev box can't).
Captures the pre-existing macos-15 runner env drift (Python 3.14 breaking
mvtools/znedi3 VS-include probes), evidence, where to look, and a step-by-step
fix/verify plan. The TTempSmooth/FFT3DFilter additions are validated on Linux
and macOS x64; this unblocks the separate arm64 infra failure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The macОS arm64 plugin builds failed on current macos-15 images (host
Homebrew Python 3.14 has no `vapoursynth` module) and on pre-existing
issues unrelated to the TTempSmooth/FFT3DFilter additions:

- build_plugin: patch the meson `import vapoursynth; vs.get_include()`
  probe to the from-source VS include dir (mvtools, bm3d, eedi3m), and
  export PKG_CONFIG_PATH so `dependency('vapoursynth')` resolves
  (removegrain, cas, nnedi3cl, nnedi3 configure). VS_PC_DIR/VS_INC_DIR
  are now computed for both arches.
- znedi3: clone --recurse-submodules (graphengine + vsxx carry the
  headers); without them: "'znedi3.h' file not found".
- nnedi3: strip the hardcoded -mfpu=neon (clang rejects it on arm64;
  NEON is baseline on aarch64).
- fft3dfilter: arm64 uses the yuygfgg prebuilt; guard the source build
  to non-arm64 (it needs fftw3f_threads).
- Add a repoint pass before signing: rewrite plugins' absolute Homebrew
  fftw/boost references to the bundled @loader_path/../../lib copies and
  normalize each plugin's install id, so plugins load on users' Macs.

Verified locally on Apple Silicon: 25/25 plugins build, no failed
plugins, all refs bundled, and MCTemporalDenoise renders (ttmpsm /
fft3dfilter / mvtools all load).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Homebrew's arm64 ffmpeg 8.1.1 is thinly dynamically-linked (~17 deps
under /opt/homebrew/Cellar/ffmpeg, plus x264/x265/dav1d/openssl/...), so
`cp $BREW_PREFIX/bin/ffmpeg` produced a 444 KB binary that can't run on a
user's Mac (encoding would fail). Runner drift silently broke this; the
1.3.0 arm64 deps shipped a 61 MB static ffmpeg from martin-riedl.de.

Download the static arm64 ffmpeg/ffprobe from martin-riedl.de (links only
system frameworks), mirroring the evermeet.cx static build used for x64.
Update docs accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Windows deps had no CI (only macOS/Linux did), so the windows-x64 bundle
had to be built by hand on a Windows box. download-deps-windows.ps1 fetches
everything from upstream release URLs and uses the 7-Zip preinstalled on
windows-latest, so it runs cleanly in CI. Mirrors build-deps-macos.yml /
build-deps-linux.yml: version + optional release_tag inputs, uploads an
artifact and (when release_tag is set) to the deps release.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@StuartCameronCode StuartCameronCode merged commit ae22a79 into main Jun 10, 2026
1 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant