Save Video by Image
You made 60 frames. Now turn them into an actual video.
- image
- audio
- file_path
Here's a situation you'll hit the week you start doing anything with video in ComfyUI: your pipeline decoded a video into frames, or generated a batch of images frame-by-frame, and now you want an actual .mp4 on disk. The stock save nodes take a VIDEO object. You don't have one - you have an IMAGE batch sitting at the end of your graph. Save Video by Image is exactly for that moment.
It encodes an image batch as video frames in order, optionally muxes an audio track, and hands you back the absolute file path. No middleman, no "convert to video" detour.
How it works
The node streams raw frames to ffmpeg via stdin using PyAV - the same stack ComfyUI itself bundles, so no extra install. It auto-aligns width/height to even numbers (a hard requirement for most encoders), and if you pass an AUDIO input it writes the waveform to a temp WAV and muxes it in, cleaning up after itself. When save_metadata is on, it writes your prompt and workflow JSON into the container's comment field, so your video carries its own "workflow included" metadata the way your PNGs do.
The inputs that matter:
- image - the batch, interpreted in time order. Frame 0 is frame 0. If your batch isn't in temporal order, fix that before this node; there's no sorting here.
- fps - default 8. That's low on purpose (smooth-ish previews at small file sizes), but for anything you'll actually watch, bump it to 16, 24, or 30.
- filename - default
video/ComfyUI, saved under ComfyUI's output directory. Supports date placeholders like%date:yyyy-MM-dd%. - auto_increment -
truegives you numbered files (name_00001_.mp4),falseoverwrites a fixed name. Keep it on unless you like losing renders. - save_output -
truewrites to output;falsewrites to temp (preview territory). - audio - optional, muxes an audio track.
Output is a single file_path string - the absolute path of the saved file. Wire it to a text-preview node if you want it visible in the UI, or just check ComfyUI/output/video/.
There's a nice alpha story here. If your frames are RGBA, you get a WEBM (VP9 + yuva420p) for playback, and when save_output is on it also exports a MOV (ProRes 4444) to the output directory - a real, chroma-key-friendly master file. That's a feature most stock save nodes don't have.
Install
Same pack for everything here - ComfyUI-1hewNodes:
cd ComfyUI/custom_nodes
git clone https://github.com/1hew/ComfyUI-1hewNodes
Restart ComfyUI. The video path relies on ffmpeg, which ComfyUI ships with; this node doesn't need anything beyond what's already in your ComfyUI install. Note the pack targets the newer v3 node API, so update ComfyUI if the nodes don't appear.
Common issues
- No video appears in the output folder - check
save_output; if it's off, it went to temp. - Timing is wrong - your batch order, not the fps, is usually the culprit.
- Audio missing - the node prints a warning and continues without audio if muxing fails (e.g., sample rate mismatch); the video itself still saves.
The honest distinction: use this node when you have an IMAGE batch. If you already have a VIDEO object from a loader or a video-generation model, use the pack's Save Video node instead, which preserves the container format. Different tools, same pack.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| fps | FLOAT | 8.000.01–120 | — |
| filename | STRING | video/ComfyUI | — |
| auto_increment | BOOLEAN | true | 为 True 时自动编号;为 False 时固定文件名并覆盖。 |
| save_output | BOOLEAN | true | — |
| save_metadata | BOOLEAN | true | — |
| audioopt | AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| file_path | STRING | — |