What It Does
VHS_VideoCombine is the video equivalent of SaveImage: it takes a batch of frames and encodes them into a video file. Feed it images (or latents plus a VAE to decode inside the node), set frame_rate (default 8), pick a format, and queue. For the broadest playback compatibility, start with video/h264-mp4, pix_fmt yuv420p, and the default crf 19.
The format dropdown is dynamic. image/gif and image/webp are always available via Pillow; the FFmpeg-backed formats — H.264/H.265 MP4, WebM, AV1, ProRes, lossless FFV1, PNG sequences, and NVENC hardware variants — only appear when a usable FFmpeg binary is found, and each reveals its own quality widgets (crf, pix_fmt, save_metadata, trim_to_audio, bitrate, profile) when selected.
One run can produce several files: a first-frame PNG carrying full ComfyUI metadata, the silent video, and — when audio is wired — a second file ending in -audio with the sound muxed in. The Filenames output returns all of these in order; the last path is the final video.
With save_metadata on (the default for the main formats), the prompt and workflow are also embedded in the container itself. That embedded metadata is fragile, though: editors, transcodes, and platform uploads routinely strip it, and its exact behavior has changed across VideoHelperSuite releases. Numonic therefore records the link between the rendered video, its source workflow, models, seeds, and prompts independently of what survives inside the file.
Inputs
imagesIMAGE | LATENTBatch of frames to combine. Accepts decoded images, or latents when a VAE is wired to the optional vae input.
frame_rateFLOAT/INTOutput frame rate in fps (default 8, minimum 1). Must be a single number — wiring a per-frame value list causes an FFmpeg "unable to parse option value as video rate" error.
loop_countINTPlayback repeats (default 0). For GIF/WebP, 0 means loop forever; for FFmpeg video formats, a value above 0 applies a loop filter.
filename_prefixSTRINGOutput filename prefix (default "AnimateDiff"). May include relative subfolders; avoid characters your OS forbids in paths.
formatENUMContainer/codec choice. Always includes image/gif and image/webp; FFmpeg-backed formats appear only when a usable FFmpeg binary is detected. Selecting a format reveals its own dynamic widgets (crf, pix_fmt, save_metadata, trim_to_audio, bitrate, profile…).
pingpongBOOLEANAppends reversed playback after the forward pass (default false). Not compatible with meta_batch runs.
save_outputBOOLEANtrue (default) saves to the ComfyUI output directory; false writes to the temporary directory instead.
audioAUDIOoptionalStandard ComfyUI AUDIO. When wired, the node writes the silent video first, then a second "-audio" file with sound muxed in — that file becomes the final output. Legacy VHS_AUDIO connections from old workflows fail validation.
meta_batchVHS_BatchManageroptionalSplits very long frame streams across queued executions to avoid running out of memory. GIF/WebP and pre-pass formats are rejected in batch mode; use the same manager on the upstream loader.
vaeVAEoptionalDecodes latent input to frames inside the node. Ignored when images are already decoded.
Outputs
FilenamesVHS_FILENAMESOrdered list of every file written this run (metadata PNG, silent video, "-audio" mux) plus the save_output flag. The final video is the last path. No separate fps/duration/resolution outputs exist.
Format Options
| Format | Output | Dynamic controls | Best for |
|---|---|---|---|
video/h264-mp4 | .mp4 — libx264 + AAC audio | crf (default 19), pix_fmt yuv420p/yuv420p10le, save_metadata, trim_to_audio | The compatibility default — plays everywhere, previews in ComfyUI |
video/h265-mp4 | .mp4 — libx265 + AAC audio | crf (default 22), pix_fmt, save_metadata, trim_to_audio | Smaller files than H.264; ComfyUI browser preview may show blank |
video/webm | .webm + Vorbis audio | crf (default 20), pix_fmt incl. alpha (yuva420p), save_metadata | Web delivery, including transparency |
video/av1-webm | .webm — SVT-AV1 + Opus audio | crf (default 23), 10-bit pix_fmt, input_color_depth | Best compression; slow encodes, check decoder support |
video/ProRes | .mov — prores_ks + PCM audio | profile: lt / standard / hq / 4444 / 4444xq | Editing and interchange; 4444 profiles carry alpha |
video/ffv1-mkv | .mkv — lossless FFV1 + FLAC audio | FFV1 tuning, pixel format | Archival/lossless masters, not browser delivery |
video/nvenc_h264-mp4 · nvenc_hevc-mp4 · nvenc_av1-mp4 | .mp4 — NVIDIA hardware encoders + AAC audio | bitrate (instead of crf), pix_fmt, save_metadata | Fast encodes on supported NVIDIA GPU + driver + FFmpeg builds |
video/8bit-png · video/16bit-png | Numbered PNG image sequence | Bit depth via format choice | Lossless frames for compositing — not a single playable file |
image/gif · image/webp | Animated GIF/WebP via Pillow | lossless toggle (webp); frame timing ≈ 1000 ÷ frame_rate ms | Quick short previews; incompatible with meta_batch |
video/ffmpeg-gif · video/gifski | Higher-quality GIF paths | Dither controls / gifski quality (default 90) | Better GIF palettes; gifski appears only when installed |
What Numonic Captures
- Frame rate, format, codec, and quality settings (crf, pix_fmt) from the workflow graph
- Frame count (from input batch size)
- Prompt and workflow JSON embedded in supported containers when save_metadata is on (verified against VideoHelperSuite 1.7.9)
- First-frame metadata PNG saved alongside the video output
Known Gaps
- Embedded container metadata is fragile — editors, transcodes, and platform uploads routinely strip it, and behavior differs across VideoHelperSuite versions (metadata bugs were fixed as recently as May 2026)
- The "-audio" derivative and intermediates can diverge from the silent encode’s metadata on older pack versions
- Individual frame provenance is lost in the combined output
- The audio source is not tracked
Troubleshooting
VHS_VideoCombine is missing, red, or "node type not found"
The node ships in ComfyUI-VideoHelperSuite, not ComfyUI core. Install or update the pack via ComfyUI Manager, fully restart ComfyUI, and check the startup console for a VideoHelperSuite import error — an installed pack can still fail to import due to a Python dependency conflict (opencv version clashes with packs like ReActor are a known cause).
Full fix guide: Node types were not found (red nodes) · Custom node import failed
Only GIF and WebP appear in the format dropdown
VideoHelperSuite hides FFmpeg-backed formats when it cannot find a usable FFmpeg binary. Install imageio-ffmpeg into the same Python environment that launches ComfyUI (portable installs use their own embedded Python), or put a current FFmpeg build on the PATH. Restart and check the startup log for the FFmpeg path it selected.
FFmpeg subprocess error: unknown encoder or "unrecognized option crf"
An old, minimal, or differently-compiled FFmpeg is being invoked — often a stale system-wide binary shadowing the bundled one. Check the exact binary path printed at ComfyUI startup and its encoder list. For the broadest fallback, select video/h264-mp4 with yuv420p; NVENC, HEVC, and AV1 need hardware, drivers, and an FFmpeg build that includes those encoders.
The file saves but the ComfyUI preview is blank
Confirm the output plays outside ComfyUI first. Browser preview support is narrower than encode support — H.265 and 10-bit pixel formats commonly save fine but preview empty. Re-encode with video/h264-mp4 + yuv420p as an in-browser diagnostic.
Audio is out of sync, trimmed, or the video has no sound
Expected video duration is frame_count ÷ frame_rate — compare that against your audio length. The node muxes audio after encoding the silent video: with trim_to_audio false (the default) audio is padded then cut with -shortest; with it true, no padding is applied. Also make sure the audio socket is actually wired and the source really contains an audio track.
Validation error: "Return type mismatch: VHS_AUDIO != AUDIO"
Older workflows used the legacy VHS_AUDIO type; current VideoHelperSuite expects standard ComfyUI AUDIO. Update the pack, then delete and re-add the VHS_VideoCombine node (and any old audio-loader nodes) so the sockets pick up the current types.
Full fix guide: Prompt outputs failed validation
Out of memory on long or high-resolution videos
Wire a VHS_BatchManager into meta_batch (and into the upstream VHS loader) so frames stream across multiple queued executions, and lower the loader frame batch size. Streamable formats like H.264 work in batch mode; GIF/WebP and pre-pass formats do not.
Exception: "Got unsupported ScalarType BFloat16"
An upstream node (some video VAEs and wrappers) is emitting BFloat16 frame tensors, which the frame conversion cannot process. Cast frames to fp16/fp32 before the node, or set the upstream VAE decode to a standard float mode.
Extension Pack: ComfyUI-VideoHelperSuite
This node is not built into ComfyUI. It requires the ComfyUI-VideoHelperSuite custom node package. Numonic detects and extracts metadata from this extension when it appears in workflows.
Related Nodes
Frequently Asked Questions
Quick answers about the Video Combine (VHS) node.
Keep the workflow behind every video
Container metadata is fragile — one transcode or platform upload and the embedded workflow is gone. Numonic links every render to its source workflow, models, seeds, and prompts, independently of what survives inside the file.