Save Video (With Options)
The video muxer with the encoder dropdown you actually want
- images
- audio_options
You generated a batch of frames - AnimateDiff, Wan, whatever - and now you need them as an actual video file with the right codec, the right frame rate, and ideally the metadata baked in so you can drag the file back into ComfyUI later. That's this node. It's the current, non-deprecated save-video node in JNodes (there's an older JNodes_SaveVideo that literally tells you to use this one instead), and the "With Options" in the name is the whole pitch: it hands you the encoder choice, quality, filename tokens, and audio muxing in one box.
If VHS_VideoCombine looks familiar, that's not a coincidence. JNodes is a quality-of-life suite that Jared Therriault (Jarether on Reddit) started in mid-2024, and he's upfront that the video nodes are built on Kosinkadink's VideoHelperSuite. The JNodes twist is "minor improvements": metadata written into gif/webp, plus tighter filename control. So the mental model is VHS with a couple of sharp edges filed off.
How it works
You feed it an images batch - that's your ordered stack of frames as an IMAGE pin - and it encodes them into a single file at frame_rate fps. It's an output node, so it terminates that branch of the graph; there are no image outputs to chain onward. The encoding backend depends on the format you pick, which is where the footguns live (more below).
The inputs that matter
output_format- the enum you'll fuss over most:image/gif,image/webp,image/apng, then the real video codecsvideo/h264-mp4,video/h265-mp4,video/h264_nvenc-mp4,video/av1-webm,video/ProRes, andvideo/webm. For sharing on the web, h264-mp4 is the safe default; for a losslessly-clean intermediate, ProRes.frame_rate(default 8) - match whatever your generator produced or your motion looks wrong.save_to_output_dir(default true) - flip it off to preview without writing to disk.quality(default 95) - only meaningful for the lossy formats.
The rest are sensible: loop_count (0 = infinite loop, relevant for gif/webp), filename_format (Comfy_%date%_%time%_%counter% - those tokens get expanded), save_metadata, save_workflow, batch_size (min 32, controls how many frames get held in memory during encode), and save_prompt_server_prompt. Two optional pins: audio_options (an AUDIO_INPUT_OPTIONS input, for muxing sound) and additional_metadata_json for stuffing extra key/values in.
How to install it
Via ComfyUI Manager: Install Custom Nodes, search "JNodes", install, restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/JaredTherriault/ComfyUI-JNodes
pip install -r ComfyUI-JNodes/requirements.txt
then restart ComfyUI. No model downloads - it's pure Python. Don't skip the requirements.txt step; the video path leans on it.
Common issues & troubleshooting
The mp4/webm/ProRes/av1 formats need ffmpeg. The image/* formats (gif, webp, apng) are handled by Pillow and work anywhere, but the true video codecs shell out to ffmpeg. No ffmpeg on the machine, no h264. If a video format silently fails or errors, that's the first thing to check.
video/h264_nvenc-mp4 needs an NVIDIA GPU with NVENC. It's hardware-accelerated encoding - great when you have it, a hard fail on CPU-only or non-NVIDIA setups. Fall back to plain video/h264-mp4 (libx264, CPU) if NVENC isn't available.
Metadata only rides in some formats. Baking workflow/prompt into gif and webp is exactly the improvement this node adds over vanilla VHS, so if you want the drag-back-into-Comfy trick, those two (or mp4) carry it. Don't expect it from every container.
Frame order looks scrambled or motion stutters. That's almost always a frame_rate mismatch with what your generator assumed, not the node - set it to match your source.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| frame_rate | INT | 8 | — |
| loop_count | INT | 00–100 | — |
| filename_format | STRING | Comfy_%date%_%time%_%counter% | — |
| output_format | COMBO | 9 options: image/gif, image/webp, image/apng, video/h264-mp4, video/h265-mp4, video/h264_nvenc-mp4, +3 | |
| save_to_output_dir | BOOLEAN | true | — |
| quality | INT | 950–100 | — |
| save_metadata | BOOLEAN | true | — |
| save_workflow | BOOLEAN | true | — |
| batch_size | INT | 128 | — |
| save_prompt_server_prompt | BOOLEAN | true | — |
| audio_optionsopt | AUDIO_INPUT_OPTIONS | — | |
| additional_metadata_jsonopt | STRING | Optionally add a secondary set of metadata key-value pairs from a stringified json. Will overwrite keys in extra_pnginfo if a key has the same name. |
Outputs (0)
No outputs