Nodes/ComfyUI-PainterNodes/Painter Video Combine
ComfyUI Node

Painter Video Combine

The video saver that finally lets you set the FPS — and plays the clip right on the node

By princepainter·Created 7 months ago·Updated 4 days ago· 191
Painter Video Combine
  • images
  • audio
  • frame_count
  • frame_rate
frame_rate24.0
format
filename_prefixVideo
save_workflow_infotrue

You've just generated a batch of frames - Wan output, an AnimateDiff pass, a frame-interpolation result - and now you have to get them out of ComfyUI as an actual video. This is the moment most people reach for VideoHelperSuite's VideoCombine, a node that's powerful but cluttered with options you'll never touch. Painter Video Combine is a deliberately tiny fork of exactly that node, and it trades the kitchen sink for one job done well: turn an IMAGE batch into an MP4, WebM, or GIF, with the FPS you actually want and a preview that pops up inside the node.

Why does the FPS thing matter? ComfyUI's built-in SaveImage has a video mode now, but it doesn't give you a straightforward frames-per-second field. This node does - you type 24, you get 24. And unlike stock save nodes, the encoded clip is embedded in the node's own body and starts playing automatically, so you can check your result without opening the output folder. It's the kind of "why isn't this built-in" quality-of-life that makes a one-node pack worth a look.

How it works

Under the hood it's honest, unglamorous ffmpeg. The node grabs an ffmpeg binary (from imageio-ffmpeg if none is on your PATH), writes your frames to a temp rawvideo file, and pipes that into ffmpeg:

  • MP4 → libx264, CRF 18, faster preset, yuv420p (works everywhere, quality is good)
  • WebM → libvpx-vp9, CRF 30
  • GIF → the classic palettegen/paletteuse two-step for clean colors

The video is saved to your normal ComfyUI/output folder with the usual counter naming. It also embeds the workflow as ffmetadata, so your graph metadata survives the round trip.

The inputs that matter

You only set three things, and honestly only two of them matter:

  • images - the batch of frames to encode. Wire in whatever is producing your frame sequence.
  • frame_rate - the FPS, any value from 1 to 240. The one you'll actually fiddle with; 24 is the default and a fine starting point.
  • format - MP4, WebM, or GIF. WebM is the open-codec choice for loops; GIF if you're posting to a platform that still lives in 1998.
  • filename_prefix - names the output file, defaults to Painter_Video.
  • audio (optional) - an AUDIO input that gets muxed in as AAC (MP4) or Vorbis (WebM). GIFs ignore it, and if audio processing fails the node just warns and continues - it never kills your render.

The node returns a single filename string. Being an output node, that's mostly bookkeeping - the real result is the file on disk and the preview on screen.

Installing it

No models, no weights, no downloads - it's just Python plus ffmpeg, which is fetched automatically if you don't have it. Either use ComfyUI Manager and search "PainterVideoCombine", or:

cd ComfyUI/custom_nodes
git clone https://github.com/princepainter/ComfyUI-PainterVideoCombine.git

Restart ComfyUI and the node appears under the Painter/Video category.

Things that will trip you up

  • "Why is my video silent?" - Muted is the default, by design. Hover over the preview and audio unmutes; it re-mutes when you leave. It's a feature, not a bug.
  • Odd-sized frames. The encoder floors dimensions to even numbers, so a 513px-wide frame silently loses a pixel. Feed it even dimensions and skip the surprise.
  • Keep clips short. Encoding runs with a 60-second ffmpeg timeout, so this is built for quick checks and short clips - not your 2,000-frame masterpiece. For big encodes, the heavyweight VHS node is still the right tool.
  • It's new and it's small. This pack is a single commit from early 2026, and the package metadata is stale (it still describes a different "video info" project - don't read pyproject.toml, read requirements.txt: just soundfile and numpy). Zero search traffic so far, so you're an early adopter. For a one-job utility that's fine - there's barely any surface area to break.
CategoryPainter/Video

Inputs (6)

NameTypeDefaultDescription
imagesIMAGE
frame_rateFLOAT24.01–240
formatCOMBO3 options: video/h264-mp4, video/webm, image/gif
filename_prefixSTRINGVideo
save_workflow_infoBOOLEANtrue
audiooptAUDIO

Outputs (2)

NameTypeDescription
frame_countINT
frame_rateFLOAT