Nodes/ComfyUI-VideoHelperSuite/Video Combine πŸŽ₯πŸ…₯πŸ…—πŸ…’
ComfyUI Node Runs on cloud

Video Combine πŸŽ₯πŸ…₯πŸ…—πŸ…’

Turn a frame batch into an actual video file

By KosinkadinkΒ·Created 3 years agoΒ·Updated 3 months agoΒ· 1,727
Video Combine πŸŽ₯πŸ…₯πŸ…—πŸ…’
  • images
  • audio
  • meta_batch
  • vae
  • Filenames
β—„frame_rate8β–Ί
β—„loop_count0β–Ί
β—„filename_prefixAnimateDiffβ–Ί
β—„formatβ–Ύβ–Ί
β—„pingpongfalseβ–Ί
β—„save_outputtrueβ–Ί

Your sampler doesn't make videos. It makes a stack of images - a batch of frames that ComfyUI happily previews one at a time and then, if you don't do anything with them, throws away. Video Combine is the node that catches that stack and mux it into a real, playable file on disk. Think of it as the Save Image node for anything that moves. Nearly every video workflow in ComfyUI - Wan, LTX, Hunyuan, AnimateDiff, whatever - ends at this node, because it's the one that actually writes the mp4.

It ships in ComfyUI-VideoHelperSuite, Kosinkadink's video I/O pack (same author as AnimateDiff-Evolved, and it shows - the thing is dependable and it's everywhere). VHS is basically the plumbing layer for video in ComfyUI: load in, combine out, model-agnostic. Two and a half years into the video-model churn it's still the default way people get frames onto disk, which tells you something.

What it does, and the one input everyone gets wrong

Frames arrive on the images input as a batch of IMAGE tensors. Video Combine writes them out in order. The catch is frame_rate - it defaults to 8, which is the old AnimateDiff cadence, and if you leave it there while your model outputs 16 fps you get a video that plays at half speed and, if you added audio, drifts out of sync. Match frame_rate to whatever produced your frames. Better still, if you loaded a source clip with Load Video, convert this to an input and wire the source's video_info fps straight in so it can't be wrong.

The other input that matters is format, and it's a genuine fork in the road (14 options). The image/* ones - image/gif, image/webp - are written with PIL and need nothing installed. The video/* ones - video/h264-mp4, video/h265-mp4, video/av1-webm and friends - are piped through ffmpeg. Pick video/h264-mp4 for the sane default: small file, plays everywhere. Gif is convenient and looks awful and weighs a ton; reach for it only when you specifically need a gif.

The rest you'll touch occasionally:

  • save_output (default true) - true drops the file in output/, false in temp/. Turn it off while you're iterating so you don't bury your drive in throwaway clips.
  • pingpong - plays the clip forward then backward for a cheap seamless-ish loop. Handy on short takes to hide the jump back to frame one.
  • loop_count - how many extra times it repeats. Watch it on 100+ frame sequences, it gets slow.
  • filename_prefix - the output name; defaults to AnimateDiff (yes, everyone's output folder is full of files named that). Supports subfolder/name and date tokens.

Wire an audio input (optional) and it gets muxed into the file - that's how you keep sound from a source video attached to your result. There's also an optional vae input that lets it take latents directly instead of decoded images, and meta_batch for chopping enormous sequences into sub-batches. When you pick a video/* format, extra widgets appear - crf (quality; lower is better and bigger, ~20 is visually lossless), pix_fmt, and save_metadata (embeds the workflow in the file so you can drag it back into ComfyUI later, exactly like a PNG).

It has one output, Filenames (a VHS_FILENAMES bundle: a flag for whether it saved, plus the list of paths it just wrote). This is a terminal output node, so most of the time you leave that output unconnected and just grab the file from the preview or the output folder.

Installing it

Two ways. In ComfyUI Manager, search ComfyUI-VideoHelperSuite, install, restart. Or from a terminal:

cd ComfyUI/custom_nodes
git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite

then restart. No model downloads - it's a utility pack, not a model.

The thing that actually bites: ffmpeg

If you export to any video/* format and it errors or refuses to produce a file, it's almost always ffmpeg - the video/* path shells out to it, and if ffmpeg isn't installed and on PATH, those formats can't run. image/gif and image/webp sidestep it entirely, so if you're stuck, that's your quick confirmation: switch the format to image/gif, and if that works, your problem is ffmpeg, not the node. Install ffmpeg (or a build that bundles it) and the mp4 options come alive.

After that it's mostly frame_rate. Wrong speed, audio desync, a clip that feels weirdly fast or slow - check the frame rate before you suspect anything cleverer. On ComfyICU, ffmpeg's already in the executor image, so the video formats just work out of the box.

CategoryVideo Helper Suite πŸŽ₯πŸ…₯πŸ…—πŸ…’

Inputs (10)

NameTypeDefaultDescription
imagesIMAGEβ€”
frame_rateFLOAT8β€”
loop_countINT00–100β€”
filename_prefixSTRINGAnimateDiffβ€”
formatCOMBO14 options: image/gif, image/webp, video/nvenc_hevc-mp4, video/h264-mp4, video/h265-mp4, video/ffv1-mkv, +8
pingpongBOOLEANfalseβ€”
save_outputBOOLEANtrueβ€”
audiooptAUDIOβ€”
meta_batchoptVHS_BatchManagerβ€”
vaeoptVAEβ€”

Outputs (1)

NameTypeDescription
FilenamesVHS_FILENAMESβ€”