Nodes/scorpiov-nodes/Scorpiov Save Image πŸ’Ύ
ComfyUI Node

Scorpiov Save Image πŸ’Ύ

Civitai-ready PNGs with auto-detected metadata, zero typing

By scorpiovΒ·Created 3 months agoΒ·Updated 9 days agoΒ· 2
Scorpiov Save Image πŸ’Ύ
  • images
    β—„filename_prefix%date:yyyy-MM-dd%/Scorpiovβ–Ί
    β—„positive_promptβ€”β–Ί
    β—„negative_promptβ€”β–Ί
    β—„lorasβ–Ί
    β—„model_nameβ–Ί
    β—„vae_nameβ–Ί
    β—„steps0β–Ί
    β—„cfg0.0β–Ί
    β—„sampler_nameβ–Ί
    β—„schedulerβ–Ί
    β—„seed-1β–Ί
    β—„save_metadatatrueβ–Ί
    β—„model_hashβ–Ί

    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_prompt and negative_prompt - wire from a Wildcard Prompter's processed_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:

    • loras is a wire-only input - no typed-text fallback. Connect it from Lora Tag Loader's loras_info, or Image Meta Reader's loras output, and Save Image embeds a proper Lora hashes: line plus <lora:name:weight> tags so Civitai recognizes and badges every LoRA. Leave it unconnected to skip LoRA metadata entirely.
    • model_hash is computed automatically: the checkpoint file is SHA256-hashed into Civitai's "AutoV2" short hash and embedded as Model hash:. Hashing is cached by file content in scorpiov-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_metadata for a clean PNG with no embedded metadata at all - a BOOLEAN input 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.

    CategoryScorpiov/Image

    Inputs (14)

    NameTypeDefaultDescription
    imagesIMAGEβ€”
    filename_prefixSTRING%date:yyyy-MM-dd%/ScorpiovSupports %date:yyyy-MM-dd% and subfolders via /
    positive_promptSTRINGWire from Scorpiov Wildcard Prompter β†’ processed_text
    negative_promptSTRINGWire from your negative Wildcard Prompter β†’ processed_text
    lorasoptSTRINGWire from Lora Tag Loader β†’ loras_info, or Image Meta Reader β†’ loras. Leave unconnected to skip.
    model_nameoptSTRINGAuto-detected from CheckpointLoader in your workflow. Override by typing here.
    vae_nameoptSTRINGAuto-detected from VAELoader in your workflow. Override by typing here.
    stepsoptINT00–200Auto-detected from KSampler. Override by typing a non-zero value.
    cfgoptFLOAT0.00–30Auto-detected from KSampler. Override by typing a non-zero value.
    sampler_nameoptSTRINGAuto-detected from KSampler. Override by typing here.
    scheduleroptSTRINGAuto-detected from KSampler. Override by typing here.
    seedoptINT-1-1–18446744073709550000Auto-detected from KSampler. -1 = use auto-detected value.
    save_metadataoptBOOLEANtrueUncheck to save a clean PNG with no embedded metadata.
    model_hashoptSTRINGAuto-detected (SHA256 AutoV2) from the checkpoint file the first time it's used, then cached. Override by typing here.

    Outputs (0)

    No outputs