π¦ Kumiho Save Image
Core Save Image, plus a versioning backend that never forgets a render
- images
- images
- revision_kref
- lineage_json
Kumiho Save Image is what you swap in for ComfyUI's built-in Save Image when "just save it" isn't enough - when every render should become a versioned, searchable, lineage-tracked asset your whole team can see. It does everything the core node does (saves the image, shows a preview), and then it registers the output with Kumiho Cloud, auto-detects what went into the generation, and records the edges between them. Same muscle memory, much better paper trail.
How it works
The flow is: save locally, then register. The image lands in your ComfyUI output folder under output/kumiho/<category>/ with a <item_name>_<timestamp>.<ext> filename. Then, if the SDK is available, the node walks up the Kumiho hierarchy - get or create the project, create the space path, get or create the item, create a revision, attach each saved file as an artifact. Every save is a new revision; nothing is overwritten.
Two behaviors make it genuinely useful rather than a glorified uploader:
- Workflow-in-the-PNG. In
pngformat it embeds the fullextra_pnginfoas PNG text chunks, exactly the metadata-in-the-image convention the ecosystem runs on - drag the file back and the graph rebuilds. jpg/webp skip this and use yourqualitysetting instead, so if "workflow included" matters, stay on PNG. - Automatic lineage. A hidden
WorkflowParserreads your graph and finds the checkpoints, LoRAs, VAEs, ControlNets and input images. Each gets registered (or matched if already registered) and an edge is drawn from your output revision to the dependency revision -USED_MODEL,USED_LORA,USED_CONTROLNET,USED_INPUT, that family. Your render's dependency tree gets recreated in the cloud without you touching the graph nodes.
Inputs that matter
images- the IMAGE tensor to save (also passed through untouched).category- doubles as the Kumiho space path. Defaultoutputs/images; something likeoutputs/portraitsorrenders/herokeeps your cloud organized and becomes part of every kref.item_name/item_kind- the item identity. Revisions auto-version under the same item, so a stableitem_namemeans "this slot's latest version" in the browser.tags- comma-separated, applied for real via the SDK'srevision.tag().approved,published,wipare the obvious ones.auto_register_depsandcreate_lineage- both default on. Flipcreate_lineageoff to skip the edges, orauto_register_depsoff to stop it registering your models/inputs as assets. Keep them on unless you have a reason.
project defaults to blank = your configured project, and file_path lets you override the auto-generated save location (batch saves append _0000-style indexes). image_format and quality do what they say for the local file.
Outputs
images- the tensor passes through so you can keep chaining.revision_kref- thekref://...of the revision you just created; feed it to a graph node or stash it for later.lineage_json- the full dependency/edge/seed/settings dump. This is the honest record of what that render is made of.
Install & gotchas
It ships in the kumiho-comfyui pack: ComfyUI Manager β search "Kumiho", or git clone https://github.com/kumihoclouds/kumiho-comfyui into custom_nodes plus pip install -r requirements.txt. No models to download. The one mandatory extra is auth - pip install kumiho-cli then kumiho-cli login (browser OAuth, writes ~/.kumiho/kumiho_authentication.json).
Biggest gotcha: if the SDK isn't available, the node still runs and still saves the file locally - it just skips cloud registration and hands you a synthetic ?r=new kref that doesn't exist in the cloud yet. That's a feature when you want local-only runs, and a trap when you think you've been archiving and haven't. The frontend shows a π¦ sidebar with recent registrations and notifications, so a missing toast is your tell. And since the pack is young, keep an eye on the version - the README and shipped code have drifted before (the video node's frame-rate default, for one), so trust what the node's widget actually shows.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| project | STRING | β | |
| images | IMAGE | β | |
| category | STRING | outputs/images | β |
| item_name | STRING | output | β |
| item_kind | STRING | image | β |
| descriptionopt | STRING | β | |
| tagsopt | STRING | β | |
| file_pathopt | STRING | β | |
| auto_register_depsopt | BOOLEAN | true | β |
| create_lineageopt | BOOLEAN | true | β |
| image_formatopt | COMBO | png | 3 options: png, jpg, webp |
| qualityopt | INT | 951β100 | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | β |
| revision_kref | STRING | β |
| lineage_json | STRING | β |