ComfyUI Video Combine Node: Every Setting, CRF and Loop Count

Updated 2026-10-10

Every input of the Video Combine node with its default, what crf does per format, loop_count, pingpong, ffmpeg errors, and when native Save Video is enough.

Quick answer

The ComfyUI Video Combine node is not built into ComfyUI. It comes from ComfyUI-VideoHelperSuite by Kosinkadink (node id VHS_VideoCombine, shown as "Video Combine 🎥🅥🅗🅢"). It takes a batch of frames and writes a GIF, an animated WebP, or a video through ffmpeg. Its defaults date from the AnimateDiff era: frame_rate 8, loop_count 0, filename_prefix "AnimateDiff", pingpong off, save_output on. For an H.264 MP4, pick video/h264-mp4. That format's crf defaults to 19, and lower means better quality and bigger files.

Two things trip people up most:

  • Set frame_rate to the model's rate. The default 8 plays a Wan 2.2 14B clip, made for 16 fps, at half speed and twice the length.
  • The video/* formats need ffmpeg. Without it the run stops with ffmpeg is required for video outputs and could not be found.

You may not need the node at all. Since v0.3.31 (May 2025), ComfyUI has its own Create Video and Save Video nodes, and every Wan 2.2 template it ships uses them. Video Combine is still the node for GIFs, H.265, ProRes, NVENC encoding, pingpong and loop_count.

We read VideoHelperSuite's source at its latest commit (4d907be, 2026-09-02), ComfyUI 0.39.0's source (released 2026-10-05), the official templates and the ffmpeg encoding guides on 2026-10-10. We have not timed any encode or measured file sizes ourselves.

The node and its version

ItemValue
ItemRepositoryValueKosinkadink/ComfyUI-VideoHelperSuite
ItemVersionValue1.7.9 in pyproject.toml, the latest on the Comfy Registry (2025-12-17)
ItemLatest commit on mainValue4d907be, 2026-09-02
ItemPython dependenciesValueopencv-python, imageio-ffmpeg
ItemLicenceValueGPL-3.0
ItemOutputValueFilenames (VHS_FILENAMES): whether save_output was on, plus every file

If the node shows red in a downloaded workflow, the pack is not installed or did not import. Our missing nodes page covers both.

Every input, with its default

From videohelpersuite/nodes.py:

InputDefaultRange or optionsWhat it does
InputimagesDefault—Range or optionsIMAGE or LATENTWhat it doesThe frames
Inputframe_rateDefault8Range or options1 and upWhat it doesFrames shown per second. Higher plays faster and shorter
Inputloop_countDefault0Range or options0 to 100What it doesExtra repeats. Its meaning differs between image and video formats, see below
Inputfilename_prefixDefaultAnimateDiffRange or optionsTextWhat it doesFile name; subfolder/name and %date:…% work as on Save Image
InputformatDefaultfirst in listRange or optionsimage/gif, image/webp, then the video/* formatsWhat it doesContainer and codec. Picking a video/* format adds its own widgets
InputpingpongDefaultoffRange or optionson, offWhat it doesPlays forward, then backward, for a clean loop
Inputsave_outputDefaultonRange or optionson, offWhat it doesOff writes to ComfyUI's temp folder instead of output/
InputaudioDefaultoptionalRange or optionsAUDIOWhat it doesMuxed into a second file, see below
InputvaeDefaultoptionalRange or optionsVAEWhat it doesTakes latents and decodes them in batches, which saves system RAM on long clips
Inputmeta_batchDefaultoptionalRange or optionsMeta Batch ManagerWhat it doesSplits very long sequences into parts

The vae input is not always faster. The node's own documentation warns that each Video Combine decodes again, and that changing any output setting re-runs the decode.

loop_count and pingpong, exactly

  • GIF and WebP (image/*, saved with Pillow): loop_count goes into the file's loop field. Pillow's documentation says 0 means loop forever. So the default 0 gives an endlessly looping GIF.
  • Video formats (video/*): loop_count adds ffmpeg's loop filter, which repeats the frames inside the file. 0 means play once; 2 means the clip appears three times and the file is three times as long.
  • pingpong appends the frames in reverse, without repeating the first or last frame. N frames become 2N − 2: an 81-frame Wan clip becomes 160 frames.

The formats and their extra widgets

From the JSON files in video_formats/. The first option of a list is its default.

FormatEncoderQuality controlDefaultpix_fmt optionsOther widgets
Formatvideo/h264-mp4Encoderlibx264Quality controlcrf 0–100 on the nodeDefault19pix_fmt optionsyuv420p, yuv420p10leOther widgetssave_metadata, trim_to_audio
Formatvideo/h265-mp4Encoderlibx265Quality controlcrf 0–100 on the nodeDefault22pix_fmt optionsyuv420p10le, yuv420pOther widgetssave_metadata; preset fixed at medium
Formatvideo/webmEncoderffmpeg's WebM defaultQuality controlcrf 0–100 on the nodeDefault20pix_fmt optionsyuv420p, yuva420p (transparency)Other widgetssave_metadata, trim_to_audio
Formatvideo/av1-webmEncoderlibsvtav1Quality controlcrf 0–100 on the nodeDefault23pix_fmt optionsyuv420p10le, yuv420pOther widgetsinput_color_depth (8bit, 16bit), save_metadata
Formatvideo/nvenc_h264-mp4Encoderh264_nvencQuality controlbitrate 1–999Default10, in megabitspix_fmt optionsyuv420p, p010leOther widgetsmegabit (on), save_metadata
Formatvideo/nvenc_hevc-mp4Encoderhevc_nvencQuality controlbitrate 1–999Default10, in megabitspix_fmt optionsyuv420p, p010leOther widgetsmegabit (on), save_metadata
Formatvideo/nvenc_av1-mp4Encoderav1_nvencQuality controlbitrate 1–999Default10, in megabitspix_fmt optionsyuv420p, p010leOther widgetsmegabit (on), save_metadata
Formatvideo/ProResEncoderprores_ksQuality controlprofileDefaulthqpix_fmt options—Other widgetsProfiles lt, standard, hq, 4444, 4444xq
Formatvideo/ffv1-mkvEncoderffv1 (lossless)Quality control—Default—pix_fmt options24 options, default rgba64leOther widgetslevel, coder, context, gop_size, slices, slicecrc, trim_to_audio
Formatvideo/ffmpeg-gifEncoderffmpeg GIF, generated paletteQuality controlditherDefaultsierra2_4apix_fmt options—Other widgetsNine dither modes
Formatvideo/gifskiEncodergifskiQuality controlquality 1–100Default90pix_fmt options—Other widgetsListed only if the gifski program is found
Formatvideo/8bit-png, video/16bit-pngEncoderPNG sequenceQuality control—Default—pix_fmt options—Other widgetsOne numbered PNG per frame
Formatimage/webpEncoderPillowQuality controllosslessDefaultonpix_fmt options—Other widgets—

So bitrate only exists on the three NVENC formats, and those have no crf. With megabit off, the same number is read as kilobits per second. video/webm names no codec, so ffmpeg uses the WebM container's default, which is VP9 when ffmpeg was built with it. The README says you can add your own format by dropping a JSON file in the same style into video_formats/.

What crf means for size and quality

CRF, constant rate factor, holds a quality level and lets the bitrate move. From ffmpeg's encoding guides:

EncoderDocumented CRF rangeEncoder defaultNotes from the guide
Encoderx264 (H.264), 8-bitDocumented CRF range0–51; 0 is losslessEncoder default23Notes from the guide17 or 18 is visually lossless or nearly so; +6 roughly halves the size
Encoderx264, 10-bitDocumented CRF range0–63Encoder default—Notes from the guide0 is not lossless in High 10
Encoderx265 (H.265)Documented CRF range0–51, also for 10-bitEncoder default28Notes from the guide28 should look like x264 at 23 at about half the size
EncoderVP9Documented CRF range0–63Encoder default—Notes from the guide15–35 recommended, 31 for 1080p
EncoderSVT-AV1Documented CRF range0–63Encoder default35Notes from the guideLower is better and bigger

Video Combine's defaults (19 for H.264, 22 for H.265, 20 for WebM, 23 for AV1) are all lower than the encoders' own, so its files are larger and closer to lossless than a bare ffmpeg command would give. VideoHelperSuite's documentation describes each default as visually lossless.

The node's slider goes to 100 for every format. ffmpeg's guides stop at 51 for x264 and x265 and at 63 for VP9 and AV1, so stay inside those. We have not tested what the encoders do above them.

Audio and the extra files

One Video Combine run can write three files in output/:

  1. AnimateDiff_00001.png: the first frame, carrying the workflow. Turn it off in the VideoHelperSuite settings ("Save png of first frame for metadata").
  2. AnimateDiff_00001.mp4: the video without sound.
  3. AnimateDiff_00001-audio.mp4: only when audio is connected. ffmpeg copies the video stream and adds the sound, as AAC in MP4, Opus in AV1 WebM, Vorbis in VP9 WebM.

The node pads the audio with silence to the video's length. With trim_to_audio on (H.264, WebM and FFV1 only), it does not pad, so the file ends where the audio ends. The documentation also warns that a wrong frame_rate puts audio out of sync. A setting called "Keep required intermediate files after successful execution" deletes the silent copy when you turn it off.

ffmpeg: where the node finds it

From videohelpersuite/utils.py, at start-up:

  1. If VHS_FORCE_FFMPEG_PATH is set, that path is used and nothing else is checked.
  2. Otherwise it collects every ffmpeg it can find: the one bundled with the imageio-ffmpeg Python package, the one on your system PATH, and an ffmpeg or ffmpeg.exe in the folder ComfyUI was started from.
  3. If more than one is found, it runs each with -version and picks the one with the most useful encoders (VP9, H.264, H.265, SVT-AV1, Opus), favouring newer builds.

Set VHS_USE_IMAGEIO_FFMPEG to force the bundled copy. If none is found, the start-up log says No valid ffmpeg found., the video/* formats still appear in the list, and they fail when the node runs. The fix is any of the three sources above, installed into the same Python or PATH that ComfyUI runs with:

python -m pip install imageio-ffmpeg

A launcher that does not read your shell profile may not see a system ffmpeg on PATH. That was the cause in VideoHelperSuite issue #188, on a Mac started from StabilityMatrix.

Common errors

Error or symptomCause and fix
Error or symptomffmpeg is required for video outputs and could not be found.Cause and fixNo ffmpeg found at start-up. Install imageio-ffmpeg in ComfyUI's Python or add ffmpeg to PATH, then restart
Error or symptomffmpeg says the encoder is unknown or not found, on an NVENC formatCause and fixThe ffmpeg in use was built without NVENC. In issue #485, a maintainer said from memory that the auto-installed ffmpeg has NVENC on Windows but not on Linux. Use a system ffmpeg that lists h264_nvenc, or video/h264-mp4
Error or symptomvideo/gifski missing from the listCause and fixThe gifski program is not on PATH. Install it, or point VHS_GIFSKI at it
Error or symptomOutput images were not of valid resolution and have had padding appliedCause and fixA width or height is odd. The node pads by edge pixels to an even size; set even dimensions upstream to avoid it
Error or symptomThe clip plays in slow motionCause and fixframe_rate left at 8. Set it to the model's rate, or to the rate after interpolation
Error or symptomThe node is redCause and fixThe pack is missing or failed to import; see missing nodes

A video that saves but is all black is a sampler or VAE problem, not an encoding one. Our black video output page covers it.

The native route: Create Video and Save Video

Added in ComfyUI pull request #7844 and first released in v0.3.31 (2025-05-03). They use PyAV, the av Python package that ComfyUI already requires, so no separate ffmpeg is needed.

NodeInputDefaultOptions
NodeCreate VideoInputimagesDefault—OptionsIMAGE
NodeInputfpsDefault30Options1 to 120
NodeInputaudioDefaultoptionalOptionsAUDIO
NodeInputbit_depthDefaultautoOptionsauto, 8, 10. Auto is 8-bit for sRGB, 10-bit for HDR
NodeInputcolor_spaceDefaultsRGBOptionssRGB, HDR (BT.2020 HLG), HDR PQ
NodeSave VideoInputfilename_prefixDefaultvideo/ComfyUIOptionsSame formatting as Save Image
NodeInputformatDefaultautoOptionsauto, mp4, mkv, webm. Auto means MP4, or WebM for AV1
NodeInputcodecDefaultautoOptionsauto, h264, av1; WebM takes auto or av1 only
NodeInputencoding modeDefaultautoOptionsauto, or re-encode, which shows crf: H.264 0–51 (default 18), AV1 0–63 (default 24)

How they got here:

  • v0.30.0 (2026-08-03) added the crf option to Save Video.
  • v0.34.0 (2026-08-26) added AV1, MKV, WebM and HDR, and made Create Video's bit_depth a choice.
  • v0.39.0 (2026-10-05) made CRF 18 for H.264 and 24 for AV1 the default even when you leave crf alone. Before that, an unset crf fell back to the encoder's own default.

Audio goes in as AAC in MP4 and MKV, and as Opus in WebM. Save Video embeds the workflow unless ComfyUI runs with --disable-metadata, and with the default prefix writes files like video/ComfyUI_00001_.mp4.

The Wan 2.2 templates set Create Video's fps to 16 for the 14B models and 24 for the 5B, and leave Save Video on auto. Of the 680 workflow files in Comfy-Org/workflow_templates on 2026-10-10, 258 use Save Video and 21 use Video Combine, mostly utility and community templates such as the older FILM interpolation one. The MiniMax H3 templates on our workflows page also end in Create Video and Save Video, which carries H3's sound track into the MP4.

Which one to use

You wantUse
You wantAn MP4 from a Wan, LTX or H3 templateUseSave Video. It is already there and needs no install
You wantA GIFUseVideo Combine, image/gif, video/ffmpeg-gif or video/gifski
You wantA looping clip, forward then backUseVideo Combine with pingpong
You wantH.265, ProRes, lossless FFV1 or a PNG sequenceUseVideo Combine
You wantEncoding on the GPU with NVENCUseVideo Combine, with an ffmpeg that has NVENC
You wantAV1, MKV or HDRUseEither; Save Video since v0.34.0
You wantLong clips without holding every frame in RAMUseVideo Combine's vae input, or meta_batch
You wantAn animated WebP onlyUseComfyUI's own Save Animated WEBP also works (fps default 6)

If you interpolate frames first, multiply the frame rate by the same factor on whichever node you use. Our frame interpolation page has the arithmetic for Wan's 16 and 24 fps clips.

What nobody has published

  • File sizes and a quality score for the same Wan or LTX clip saved with Video Combine's H.264 default (CRF 19) and Save Video's (CRF 18).
  • A timing of NVENC against libx264 inside Video Combine on a named consumer GPU.

Encoding is not part of the system requirements checker, whose only preset is MiniMax H3.

Licence

VideoHelperSuite and ComfyUI are both released under GPL-3.0. We do not host any of these files; install the pack through ComfyUI-Manager or from its repository.

GenVidKit is an independent guide. It is not affiliated with Comfy Org, Kosinkadink or the VideoHelperSuite contributors, the FFmpeg project, Alibaba's Wan team or MiniMax.

Sources

All read on 2026-10-10.