Nodes/KRuins-ComfyUI-Node-Suite/KRuins - Save Video
ComfyUI Node

KRuins - Save Video

MP4s Named Like Your Images, From a Node That Hands the Video Back

By Rampart187·Created 8 days ago·Updated a day ago· 0
KRuins - Save Video
  • video
  • video
◄destination►
◄custom_textKRuins►
◄part_1▾►
◄enable_1true►
◄part_2▾►
◄enable_2true►
◄part_3▾►
◄enable_3true►
◄part_4▾►
◄enable_4true►

Video output in ComfyUI has a naming problem the image side got used to solving years ago. You spend forty minutes on a Wan or LTX clip, and it lands as ComfyUI_00031_.mp4 next to thirty other clips, with no clue which sampler or scheduler or settings produced it. KRuins - Save Video is the pack's answer: the same four-slot filename builder its Save Image node uses, applied to MP4, plus a VIDEO output so you can chain it instead of ending the graph.

What makes it different from the rest of the pack

This is the only node in the suite written against ComfyUI's newer backend authoring API - the "V3 schema." Instead of NODE_CLASS_MAPPINGS and INPUT_TYPES, the class subclasses io.ComfyNode, declares itself in a define_schema() returning an io.Schema(...) with io.Video.Input("video") and io.ComfyNode-style inputs, and does its work in execute(). Registration still happens through the pack's __init__.py, and this node's display name carries a search alias list so "kinetic ruins save video" finds it.

That detail matters for two practical reasons. First, it tells you this node needs a reasonably current ComfyUI - the V3 API landed in 2025 and comfy_api.latest is a moving target by design, so a stale install simply won't have it. Second, it explains where the actual encoding lives: the node calls video.save_to(path, format=Types.VideoContainer.MP4, codec=Types.VideoCodec.AUTO, metadata=...), and every bit of MP4 muxing is done by ComfyUI's own video machinery. The pack's pyproject.toml lists exactly two dependencies, numpy and Pillow - no PyAV, no ffmpeg bindings, nothing video-related at all. Which is why the README's "codec availability depends on the local ComfyUI environment" is the accurate statement and also the reason this node can fail where the rest of the pack can't.

Inputs and outputs

video is the required input, type VIDEO. That's a distinct type from IMAGE - you can't feed it a raw image batch. You need a node that assembles frames (plus optional audio) into a VIDEO, such as ComfyUI's core CreateVideo.

destination is the folder field, whose tooltip is "Click the folder button to select a destination. Empty uses ComfyUI/output." Absolute path, relative path under output/, or leave it blank. Windows gets a native folder dialog; everywhere else, type it.

custom_text defaults to "KRuins", then part_1 through part_4 with matching enable_N booleans, each part being Custom, KSampler, Scheduler, Increment, or None. Sampler and scheduler are auto-detected by scanning the run's prompt for KSampler / KSamplerAdvanced / KSamplerSelect (sampler name) and KSampler / KSamplerAdvanced / BasicScheduler (scheduler). Defaults give you KRuins-euler-normal-0001.mp4.

The output is a VIDEO - the same clip you saved, handed back. That's the design difference from the Save Image node, which is terminal. Wire it into a preview or another downstream video node and keep going.

Installing it

Manager: search KRuins ComfyUI Node Suite. Otherwise:

cd ComfyUI/custom_nodes
git clone https://github.com/Rampart187/KRuins-ComfyUI-Node-Suite.git

Restart. No models, no pip packages beyond what ComfyUI has. Update ComfyUI itself if you're on an older build - see below.

Where people get burned

Nothing installs. All five nodes vanish. This node is the reason. The pack's __init__.py imports it eagerly at module load, so from comfy_api.latest import io, ui, Input, Types runs whenever the pack loads. On an older ComfyUI that import raises, and the whole pack - including the four plain-image nodes - fails to register. Update ComfyUI, not the pack.

"Codec availability" errors on save. The node asks ComfyUI's video layer for VideoCodec.AUTO and an MP4 container. If the local install's video backend can't produce H.264, the save fails at the end of a long generation, which is the worst possible time. Do one throwaway two-second clip first to confirm MP4 output works before committing to a five-minute render.

Collision protection surprises you. There's a save lock and a count-up loop: if the target filename exists, it appends -0002, -0003, and so on, even when Increment is turned off. It never overwrites. But the live filename preview always shows 0001, so what's previewed and what's written can differ. Fine, just don't be confused by it.

No in-UI preview of the file. Like Save Image, the standard video preview is only reported back to the frontend when the destination is inside ComfyUI/output. Save to an external drive and the clip is there, but the node stays quiet.

Metadata is optional and easy to lose. The node writes workflow metadata into the MP4 unless ComfyUI is launched with --disable-metadata, but MP4 metadata is far less durable than PNG text chunks - platforms that re-encode video strip it. If the settings matter, keep the workflow JSON.

CategoryKRuins

Inputs (11)

NameTypeDefaultDescription
videoVIDEO—
destinationSTRINGClick the folder button to select a destination. Empty uses ComfyUI/output.
custom_textSTRINGKRuins—
part_1COMBO5 options: Custom, KSampler, Scheduler, Increment, None
enable_1BOOLEANtrue—
part_2COMBO5 options: Custom, KSampler, Scheduler, Increment, None
enable_2BOOLEANtrue—
part_3COMBO5 options: Custom, KSampler, Scheduler, Increment, None
enable_3BOOLEANtrue—
part_4COMBO5 options: Custom, KSampler, Scheduler, Increment, None
enable_4BOOLEANtrue—

Outputs (1)

NameTypeDescription
videoVIDEO—