Painter Video Combine
The video saver that finally lets you set the FPS — and plays the clip right on the node
- images
- audio
- frame_count
- frame_rate
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,
fasterpreset, yuv420p (works everywhere, quality is good) - WebM → libvpx-vp9, CRF 30
- GIF → the classic
palettegen/paletteusetwo-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
AUDIOinput 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: justsoundfileandnumpy). 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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| frame_rate | FLOAT | 24.01–240 | — |
| format | COMBO | 3 options: video/h264-mp4, video/webm, image/gif | |
| filename_prefix | STRING | Video | — |
| save_workflow_info | BOOLEAN | true | — |
| audioopt | AUDIO | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| frame_count | INT | — |
| frame_rate | FLOAT | — |