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>
Adds an optional AUDIO input that is muxed into the encoded video via
ffmpeg. Writes the waveform to a temp WAV (stdlib wave, no new deps),
adds it as a third ffmpeg input, and maps streams explicitly with a
per-format audio codec (aac/libopus/flac/pcm). Uses -shortest to match
VideoHelperSuite behavior. GIF ignores audio.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Hide/show format-specific widgets (CRF, bitrate, ProRes profile, GIF dither,
pixel format, webp settings) based on selected save_format. Pixel format combo
updates dynamically per codec. Remove hardcoded ffv1 pix_fmt to use widget value.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Port video formats from VHS Video Combine: H.265, AV1, GIF, FFV1 lossless,
ProRes, and NVENC hardware-accelerated variants. Replace mp4/webm if-else
branching with a VIDEO_FORMATS config dict. Add proper BT.709 color space
tagging to fix washed-out colors in players.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
save_video was always producing the same filename when use_timestamp was
off, causing each run to overwrite the previous video. Now passes
auto_increment and counter_digits through to save_video, which uses
get_start_index to produce numbered filenames like frame_0001.mp4.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move FastAbsoluteSaver node from ComfyUI-Sharp-Selector into this pack
- Add save_metadata_png toggle: embeds workflow in a sidecar PNG for webp/video exports,
or in the first file for PNG sequences
- Batch GPU->CPU tensor transfer (single sync instead of per-image)
- Remove dead webp exif code and unused variables/imports
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>