Nodes/Kumiho/🦊 Kumiho Save Video
ComfyUI Node

🦊 Kumiho Save Video

Frames in, versioned mp4/webm/GIF out β€” FFmpeg optional

By kumihocloudsΒ·Created 9 months agoΒ·Updated 8 months agoΒ· 0
🦊 Kumiho Save Video
  • images
  • images
  • revision_kref
  • lineage_json
β—„projectβ–Ί
β—„categoryoutputs/videosβ–Ί
β—„item_namevideo_outputβ–Ί
β—„item_kindvideoβ–Ί
β—„fps24β–Ί
β—„descriptionβ–Ί
β—„tagsβ€”β–Ί
β—„file_pathβ€”β–Ί
β—„auto_register_depstrueβ–Ί
β—„create_lineagetrueβ–Ί
β—„video_formatmp4β–Ί
β—„quality95β–Ί

Kumiho Save Video is the video twin of Kumiho Save Image: you give it the batch of frames your video model spat out, it encodes them to a real video file, and - if you're authenticated - registers that file with Kumiho Cloud as a versioned revision with lineage. It's the node at the end of an AnimateDiff, Wan or LTX pipeline when "outputs/videos" should mean your team's cloud, not just a folder.

How it works

The images input is the frame batch [B, H, W, C] - B is your frame count. The node assembles those into a single file and saves it under output/kumiho/<category>/. Encoding depends on video_format:

  • mp4 / webm go through FFmpeg, with your quality value translated into a CRF number (higher quality = lower CRF, roughly 51 - quality * 0.51). So the quality widget is an encoder knob, not a percentage - 95 is "big, clean", 40 is "small, crunchy".
  • gif is done in pure PIL, no FFmpeg needed.

Then the same registration machinery as Save Image kicks in: project β†’ space β†’ item β†’ revision, artifacts attached, dependencies detected from the workflow and turned into lineage edges, tags applied.

Two details are easy to miss and genuinely good. First, if FFmpeg isn't installed or the encode fails, the node silently falls back to GIF - you asked for mp4 and get an animated GIF with a .gif extension. Second, for mp4/webm it also generates a _preview.gif, because ComfyUI's output panel only previews GIFs. The preview is registered as an extra artifact, so the cloud copy carries both the real file and something the UI can actually show.

Inputs that matter

  • images - frames in, order preserved.
  • fps - default 24 (1–120). This is the playback rate; set it to what your model actually produced, because the duration recorded in metadata and the preview GIF both derive from it. Don't trust the README's older "8" here - the shipped code and the node's widget say 24.
  • video_format - mp4, webm, or gif. Default mp4.
  • category - the Kumiho space path, default outputs/videos. Keep it to the same shape as Save Image's so renders and videos don't share a namespace by accident.
  • item_name / item_kind - item identity; revisions auto-version under one item name.
  • tags, description, auto_register_deps, create_lineage - same semantics as Kumiho Save Image. file_path overrides where the file is written (and can force the format via extension).

Outputs

  • images - passthrough, so the batch still flows onward if you want a second save.
  • revision_kref - the kref of the registered revision.
  • lineage_json - the dependency/edge/seed/settings record for this video.

Install & gotchas

Same pack install as the rest: ComfyUI Manager β†’ search "Kumiho", or clone https://github.com/kumihoclouds/kumiho-comfyui into custom_nodes and pip install -r requirements.txt. No model files. Auth is the usual mandatory step: pip install kumiho-cli, kumiho-cli login, verify with kumiho-cli whoami.

The FFmpeg thing is the number one "why is my video a gif" surprise - check ffmpeg -version before you blame the node. If FFmpeg is present but missing a codec (libvpx for webm is a common gap on minimal installs), you'll get the same silent drop. Second gotcha: with no SDK/auth the file still saves locally but no cloud revision exists - the revision_kref you get back is a synthetic ?r=new placeholder. And like its image sibling, this pack is young; the README has drifted from the code before, so trust the widget values over the docs.

CategoryKumiho/Save

Inputs (13)

NameTypeDefaultDescription
projectSTRINGβ€”
imagesIMAGEβ€”
categorySTRINGoutputs/videosβ€”
item_nameSTRINGvideo_outputβ€”
item_kindSTRINGvideoβ€”
fpsFLOAT241–120β€”
descriptionoptSTRINGβ€”
tagsoptSTRINGβ€”
file_pathoptSTRINGβ€”
auto_register_depsoptBOOLEANtrueβ€”
create_lineageoptBOOLEANtrueβ€”
video_formatoptCOMBOmp43 options: mp4, webm, gif
qualityoptINT951–100Video quality (CRF for mp4/webm, affects GIF palette)

Outputs (3)

NameTypeDescription
imagesIMAGEβ€”
revision_krefSTRINGβ€”
lineage_jsonSTRINGβ€”