The node's auto-downloader fetched johnvansickle/gyan static builds, which
have no NVENC, so nvenc_* formats could never work on a machine without a
system NVENC ffmpeg.
- Switch the download source to BtbN static builds (compiled with
NVENC/CUDA; ~125 MB, ship all CPU codecs too).
- _get_ffmpeg(required_encoder) now self-provisions: when no existing
ffmpeg has the requested hardware encoder, download BtbN and prefer it;
download runs at most once per process.
- Add .gitignore for the runtime-provisioned ffmpeg_bin/ and pycache.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The nvenc_* formats require an ffmpeg built with NVENC. Static builds
(e.g. johnvansickle, which _get_ffmpeg may resolve) lack it, producing a
cryptic "Unknown encoder 'av1_nvenc'" crash.
- _get_ffmpeg(required_encoder): prefer the first existing ffmpeg that
actually provides the encoder, so a NVENC-capable system ffmpeg wins
over a static build.
- save_video: if the hardware encoder is unavailable anywhere, fall back
to the CPU codec for the same container (av1_nvenc-webm -> VP9 webm,
etc.) with a loud warning instead of losing the run's output.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- nvenc_av1-webm: GPU-encoded webm via av1_nvenc (NVENC has no VP9
encoder); uses libopus since webm rejects AAC audio.
- save_latent boolean gates the latent sidecar write while keeping the
latent passthrough intact.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>