Repository navigation
feat(node): ffmpeg latest pinned + ffmpeg-patches bundled into Dockerfile - #36
Merged
Merged
Conversation
Phase 4b.4 (ADR-0709): ships docker/Dockerfile.node with four targets
(node-cpu, node-cuda, node-rocm, node-sycl). Each target compiles ffmpeg
n8.2 from source with all 15 ffmpeg-patches/ patches applied (libvmaf,
libvmaf_sycl, libvmaf_vulkan, vmaf_pre, libvmaf_tune filters), plus the
full soft-codec inventory (libx264, libx265, libvpx-vp9, libsvtav1,
libdav1d).
Adds cmd/vmafx-node Go binary with a startup encoder-inventory probe that
runs `ffmpeg -encoders` at boot and caches the result. Server scaffold
(Phase 4b.5 gRPC wiring deferred).
FFmpeg version policy (ADR-0717): pin to latest stable tagged release;
currently n8.2. libaom excluded — ffmpeg-patches/0007 references
aom_roi_map_t fields not present in any released libaom; SVT-AV1 covers
the AV1 production lane.
Deliverables:
- docker/Dockerfile.node (4 targets)
- cmd/vmafx-node/{main,probe,server} + tests
- docs/adr/0717-vmafx-node-ffmpeg-latest.md
- docs/development/vmafx-node.md
- changelog.d/added/node-ffmpeg-latest.md
- docs/state.md row, docs/rebase-notes.md entry
- docs/adr/README.md rows for ADR-0710/0711/0712/0717
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
lusoris
marked this pull request as ready for review
May 28, 2026 12:56
Union-of-rows for docs/state.md, docs/adr/README.md, docs/rebase-notes.md. Keep PR #36 HEAD version of docker/Dockerfile.node (ffmpeg n8.2 builder stage) and cmd/vmafx-node/main.go (probe/server architecture, ADR-0717).
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
docker/Dockerfile.nodewith four targets (node-cpu,node-cuda,node-rocm,node-sycl), each carrying ffmpeg n8.2 compiled from source with all 15ffmpeg-patches/patches applied.cmd/vmafx-nodeGo binary with startup encoder-inventory probe (ffmpeg -encoderscache) and gRPC server scaffold (full gRPC wiring is Phase 4b.5).n8.2); updateFFMPEG_TAGon each release-sync PR.What's included
docker/Dockerfile.nodeMulti-stage build:
vmaf-builder—libvmaf.so+vmafCLI fromcore/(CPU, release/stripped)ffmpeg-deps-base— codec build deps + SVT-AV1 from source (Ubuntu'slibsvtav1-devomitsSvtAv1Enc.pc)ffmpeg-builder-cpu— ffmpeg n8.2, patches applied, configured with--enable-libvmaf --enable-libx264 --enable-libx265 --enable-libvpx --enable-libsvtav1 --enable-libdav1dgo-builder—cmd/vmafx-nodebinaryruntime-base— distrolesscc-debian126–9.
node-cpu/node-cuda/node-rocm/node-sycl— final targetslibaom excluded:
ffmpeg-patches/0007referencesaom_roi_map_tfields not present in any released libaom. SVT-AV1 is the production AV1 lane.cmd/vmafx-nodemain.go— discoversVMAFX_FFMPEG_BIN, runs startup probe, starts serverprobe/probe.go+probe_test.go—ffmpeg -encodersinventory cacheserver/server.go+server_test.go— gRPC server scaffold (Phase 4b.5 wiring deferred)Documentation / deliverables
docs/adr/0717-vmafx-node-ffmpeg-latest.md— version policy decision recorddocs/development/vmafx-node.md— operator guide (image variants, codec matrix, env vars, smoke tests)changelog.d/added/node-ffmpeg-latest.md— release fragmentdocs/adr/README.md— index rows for ADR-0710/0711/0712/0717docs/state.md— recently-closed row for Phase 4b.4docs/rebase-notes.md— ffmpeg base bump procedure for future syncsSmoke test
Deliverables checklist
no digest needed: trivial — version pin + Dockerfile pattern established by dev/ContainerfileAGENTS.mdinvariant:no rebase-sensitive invariants — docker/Dockerfile.node is fork-local, no upstream overlapchangelog.d/added/node-ffmpeg-latest.mddocs/rebase-notes.mdentry: ffmpeg base bump procedure addedADR
ADR-0717 — parent: ADR-0709 Phase 4b item 4b.4.
Notes for reviewers
go.sumchecksum mismatch ongolang.org/x/syncis pre-existing (not introduced by this PR). Verify withgit diff master -- go.sum.node-cuda/node-sycl/node-rocmrequire the host's GPU driver at runtime; the probe logs WARN for absent HW encoders but does not block startup.🤖 Generated with Claude Code