Nodes//Nougan Save Video 🎬
ComfyUI Node

Nougan Save Video 🎬

Save video with the workflow inside it β€” codecs, CRF and the NVENC trap

By WinnouganΒ·Created 3 months agoΒ·Updated about 16 hours agoΒ· 10
Nougan Save Video 🎬
  • images
  • audio
  • path
  • info
β—„fps24.00β–Ί
β—„codecH.264 (MP4)β–Ί
β—„quality80β–Ί
β—„filename_prefixNougan/videoβ–Ί
β—„save_to_outputtrueβ–Ί
β—„advancedfalseβ–Ί
β—„speedbalancedβ–Ί
β—„encoderCPUβ–Ί
β—„bit_depth8-bitβ–Ί
β—„resizeoriginalβ–Ί
β—„audio_bitrate192kβ–Ί
β—„embed_workflowtrueβ–Ί
β—„preview_proxytrueβ–Ί

The best thing about ComfyUI is that a PNG remembers how it was made. You drag it back onto the canvas and the entire graph rebuilds. Video has never worked that way - until a saver decides to embed the graph in the container. Nougan Save Video 🎬 does, embed_workflow is on by default, and it also plays the result back inside the node instead of spitting a path into your console.

What it does

Frames in (IMAGE), optional audio in, a file out. It drives ffmpeg - found on your PATH first, then via pip install imageio-ffmpeg - and exposes the parts of ffmpeg that actually matter to a person making a clip, without exposing the parts that require remembering what -crf does.

Nine codec/container combinations: H.264 MP4, H.265/HEVC MP4, AV1 MP4, AV1 WebM, VP9 WebM, H.264 MKV, H.265 MKV, ProRes 422 HQ MOV and FFV1 lossless MKV. H.264 MP4 is the right answer 90% of the time; ProRes or FFV1 are for when you're handing off to an editor and don't want a second generation of compression.

The settings that matter

images, fps - the frames and their rate. Get fps from something that also knows your frame count (say, Nougan Duration β†’ Frames ⏱️) and the video can't disagree with the generator about how long it is.

codec and quality (0–100, default 80). Quality isn't a vibe: it maps onto each encoder's CRF/CQ range, so higher is better and bigger. 80 is near-lossless for most generated content; 92+ is where you stop gaining anything visible and start gaining gigabytes.

encoder - CPU or GPU (NVIDIA NVENC). NVENC is much faster and uses a different quality curve; if it fails it falls back to CPU on its own. speed (fast / balanced / slow) trades time for file size at the same quality.

bit_depth - 8-bit or 10-bit. 10-bit genuinely reduces banding in gradients and skies, and genuinely breaks playback in some players. Know your audience.

resize - original, 480p through 2160p. Never upscales, so picking 4K on a 720p render does nothing.

Hidden behind advanced in the UI, but real: audio_bitrate, save_to_output, embed_workflow (store the workflow and prompt inside the video file), and preview_proxy - which builds a small H.264 copy for HEVC/ProRes/FFV1 so the in-node player works in any browser. The node's player also prints which encoders your ffmpeg actually has, which is the fastest way to find out you're running a stripped build.

filename_prefix allows subfolders (Nougan/clips/scene), which is the difference between a tidy output folder and 400 files called video_00042.mp4.

Audio gets padded with silence or trimmed to the video length - no desync surprises.

Outputs

path (STRING) - where the file went. info (STRING) - the encode summary. It's an output node, so it runs on queue.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Winnougan/Nougan_Nodes
# restart ComfyUI

Or ComfyUI Manager β†’ "Nougan". Then make sure ffmpeg exists:

ffmpeg -version   # or: pip install imageio-ffmpeg

For anything beyond H.264 you want a full ffmpeg build (the "full" builds from gyan.dev are the usual recommendation on Windows) - AV1 and HEVC encoders are frequently missing from distro packages. Hard-refresh after restart or the player and chips won't render.

Where people get burned

"This ffmpeg has no <codec> encoder". The node names the missing encoder, which is more than ffmpeg does. Swap codec or install a fuller build. libsvtav1 missing is the common one.

Frame counts that don't line up. Feeding fps by hand while the generator used a formula is how clips come out subtly sped up. Use the fps output from your duration node.

Ten-bit that won't play. Fine for your archive, hostile to WhatsApp. Render 8-bit for anything that leaves your machine.

Big files from "quality 100". You're paying for bits nobody can see. 80–85 is the sweet spot for generated video with typical noise.

Expecting the workflow embed to survive a re-encode. It's stored in the container's metadata; hand it to a service that re-encodes and it's gone - the same way a screenshot strips a PNG's workflow. The preview_proxy file is a good reminder of that: it exists for playback, not archiving.

VRAM pressure on long clips. It reads frames into ffmpeg from a queue rather than holding everything, but the frames themselves came from your sampler. If a run dies before saving, the saver was never the problem - see the usual levers: shorter clips, fewer steps, a smaller resolution, or freeing memory between stages with Nougan Refresh Page πŸ”„.

CategoryNougan

Inputs (15)

NameTypeDefaultDescription
imagesIMAGEThe video frames.
fpsFLOAT24.001–240Frames per second.
codecCOMBOH.264 (MP4)Codec and container.
qualityINT800–100Higher is better and larger. 80 is near-lossless for most content.
filename_prefixSTRINGNougan/videoSubfolders allowed, e.g. Nougan/clips/scene
save_to_outputBOOLEANtrueβ€”
advancedBOOLEANfalseβ€”
speedCOMBObalancedSlower is smaller at the same quality.
encoderCOMBOCPUGPU uses NVENC if available and falls back to CPU if it fails.
bit_depthCOMBO8-bit10-bit reduces banding. Not every player supports it.
resizeCOMBOoriginalDownscale to this height. Never upscales.
audio_bitrateCOMBO192k5 options: 96k, 128k, 192k, 256k, 320k
embed_workflowBOOLEANtrueStore the workflow and prompt inside the video file.
preview_proxyBOOLEANtrueFor HEVC / ProRes / FFV1, make a small H.264 copy so the in-node player works in any browser.
audiooptAUDIOOptional soundtrack. Padded with silence or trimmed to the video length.

Outputs (2)

NameTypeDescription
pathSTRINGβ€”
infoSTRINGβ€”