Scorpiov Save Image πΎ
Civitai-ready PNGs with auto-detected metadata, zero typing
- images
ComfyUI's stock Save Image embeds the full workflow JSON, which is great for reopening the workflow and near-useless for Civitai, whose metadata reader wants the A1111-style parameters chunk - prompt, sampler, steps, model hash, LoRA hashes - so it can badge your upload and let people recreate it. Scorpiov Save Image is the pack's answer: it writes both formats, and it pulls the sampler settings, seed, checkpoint name, VAE, and model hash out of your workflow graph automatically. You wire in the prompt text and the image, and the metadata mostly writes itself.
This is the node that makes the whole scorpiov pack hang together - the README frames the entire collection around "Civitai-ready image saving with automatic metadata," and this is that feature. If you upload to Civitai regularly, "the metadata writes itself" is worth a lot of manual typing.
What you must wire
Three inputs are required, and only three:
images- from VAE Decode.positive_promptandnegative_prompt- wire from a Wildcard Prompter'sprocessed_text(the tooltips say exactly that).
Everything else is optional. The lazy genius of this node is auto-detection: steps, cfg, sampler_name, scheduler, seed, model_name, and vae_name are all read from the KSampler, CheckpointLoader, and VAELoader already in your workflow. Type a value into any of those fields and it overrides the auto-detected one - but you don't have to type anything for a correct save. The settings that matter for correctness (seed, model, sampler) are auto-filled; the fields you'd only ever touch to override are tucked behind an β Advanced Settings toggle, collapsed by default.
The Civitai bits
Two inputs matter specifically for uploads:
lorasis a wire-only input - no typed-text fallback. Connect it from Lora Tag Loader'sloras_info, or Image Meta Reader'slorasoutput, and Save Image embeds a properLora hashes:line plus<lora:name:weight>tags so Civitai recognizes and badges every LoRA. Leave it unconnected to skip LoRA metadata entirely.model_hashis computed automatically: the checkpoint file is SHA256-hashed into Civitai's "AutoV2" short hash and embedded asModel hash:. Hashing is cached by file content inscorpiov-nodes/.scorpiov_hash_cache.json, so a given checkpoint is hashed exactly once - after that, saves reuse the hash instantly. Delete that file to force a clean re-hash of everything.
filename_prefix defaults to %date:yyyy-MM-dd%/Scorpiov and supports subfolders via / plus date tokens - handy if you feed it a model_tag from the Multi-Checkpoint Loader for per-checkpoint folders.
Gotchas
- The required prompt wires are real: leave them unconnected and you'll get the error. It won't guess your prompt for you.
- The auto-detection walks your graph, so anything delivered via a Scorpiov Anywhere broadcast isn't a real link and won't be seen - wire those directly if they must appear in metadata.
- Metadata is readable by A1111, Civitai, and the pack's own Image Meta Reader. Uncheck
save_metadatafor a clean PNG with no embedded metadata at all - aBOOLEANinput that stays visible.
Installing
Part of scorpiov-nodes. Install via ComfyUI Manager (search "scorpiov-nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/vikramudyawar/scorpiov-nodes
Restart ComfyUI after. No extra Python dependencies - the PNG chunk writing is all PIL, which ComfyUI ships with. If you've ever re-typed sampler settings into Civitai's manual metadata form, this node quietly deletes that chore.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | β | |
| filename_prefix | STRING | %date:yyyy-MM-dd%/Scorpiov | Supports %date:yyyy-MM-dd% and subfolders via / |
| positive_prompt | STRING | Wire from Scorpiov Wildcard Prompter β processed_text | |
| negative_prompt | STRING | Wire from your negative Wildcard Prompter β processed_text | |
| lorasopt | STRING | Wire from Lora Tag Loader β loras_info, or Image Meta Reader β loras. Leave unconnected to skip. | |
| model_nameopt | STRING | Auto-detected from CheckpointLoader in your workflow. Override by typing here. | |
| vae_nameopt | STRING | Auto-detected from VAELoader in your workflow. Override by typing here. | |
| stepsopt | INT | 00β200 | Auto-detected from KSampler. Override by typing a non-zero value. |
| cfgopt | FLOAT | 0.00β30 | Auto-detected from KSampler. Override by typing a non-zero value. |
| sampler_nameopt | STRING | Auto-detected from KSampler. Override by typing here. | |
| scheduleropt | STRING | Auto-detected from KSampler. Override by typing here. | |
| seedopt | INT | -1-1β18446744073709550000 | Auto-detected from KSampler. -1 = use auto-detected value. |
| save_metadataopt | BOOLEAN | true | Uncheck to save a clean PNG with no embedded metadata. |
| model_hashopt | STRING | Auto-detected (SHA256 AutoV2) from the checkpoint file the first time it's used, then cached. Override by typing here. |
Outputs (0)
No outputs