Nodes/Frog Node Pack/🐸 Save: Hash Embed
ComfyUI Node

🐸 Save: Hash Embed

A1111 metadata plus SHA256 hashes for models and LoRAs

By RabbitThatIsPinkΒ·Created 3 months agoΒ·Updated 24 days agoΒ· 1
🐸 Save: Hash Embed
  • images
  • seed
  • debug
β—„filename_prefixRibbityPackβ–Ί
β—„image_formatPNGβ–Ί
β—„output_pathβ–Ί
β—„show_previewtrueβ–Ί
β—„append_countertrueβ–Ί
β—„positive_textβ€”β–Ί
β—„negative_textβ€”β–Ί

If you post your generations to Civitai, this is the save node you've been looking for, and the pack knows it - the README literally calls 🐸 Save: Hash Embed "Recommended & Tested." It does everything 🐸 Save: A1111 does - writes an A1111-style parameters block, extracts prompt/seed/settings straight from your workflow - and then adds the one thing Civitai's auto-detection keys on: SHA256 hashes of the checkpoint and every LoRA, embedded in the metadata.

Why the hash matters: Civitai's uploader matches your image to the exact model and LoRA files by their hashes, not by the text labels. The KB's metadata doc is blunt about this - ComfyUI's default save node writes the graph but not the flat A1111 parameters string with resource hashes, which is why there's a whole community genre of "stop using the default Save Image if you post to Civitai." This node is that fix, bundled into a pack that otherwise has nothing to do with Civitai.

The mechanism, from the source: the node walks your workflow graph to find the primary sampler and trace the model and LoRA chain (it follows links back through the prompt JSON to resolve names and strengths), then computes SHA256 for the checkpoint file and each detected LoRA and stuffs the short hashes into the parameters block. The results are cached on disk after the first compute - so the first save of a given file is slow-ish (hashing a multi-GB safetensors takes a moment), but every subsequent save is instant. Same model file twice in one session? Second save doesn't re-hash.

Inputs you'll actually touch:

  • images - what to save.
  • filename_prefix - defaults to RibbityPack; %date:yyyy-MM-dd% tokens work.
  • image_format - PNG, JPG, JPEG, WEBP.
  • append_counter - the one option its sibling lacks. On (default) appends a zero-padded counter so you keep every run; off overwrites the same file each run - handy when you're iterating on a single image and don't want a folder full of rejects.
  • output_path / show_preview / positive_text / negative_text - same as Save: A1111; wiring the text outputs from 🐸 CLIP Text Encode gives the most accurate metadata.

Outputs: seed (INT) and debug (STRING).

The one decision you have to make between the two save nodes is cost vs. compatibility. Save: A1111 skips hashing entirely - faster, near-zero CPU overhead, and fine if you never upload or don't care about auto-linking. Hash Embed costs a one-time hash per file (cached after), and in exchange your PNGs self-identify to Civitai and any tool that does hash-based recognition. If you're already paying the price of writing metadata at all, the hash is the difference between "Civitai guesses the model" and "Civitai knows." My take: unless you're saving thousands of images a day, just use Hash Embed and never think about it again.

Installing it

Part of Frog Node Pack:

  • ComfyUI Manager: search Frog Node Pack, install, restart.
  • Manual: cd ComfyUI/custom_nodes && git clone https://github.com/RabbitThatIsPink/FrogNodePack, restart, hard-refresh (Ctrl+Shift+R).

No pip dependencies - requirements.txt is empty; Pillow ships with ComfyUI. Find 🐸 Save: Hash Embed under 🐸 Node Pack.

Common issues

First save feels slow - that's the one-time SHA256 compute; check the debug output and confirm subsequent saves of the same files are fast. Missing hash / model not recognized - the node has to be able to trace your model and LoRA chain through the graph; exotic loaders or manually-typed names can defeat the trace, so check debug for what it resolved. Counter files piling up - flip append_counter off when iterating. And as with any metadata-writer, PNG keeps the parameters chunk most reliably; JPG/WEBP trade metadata durability for file size.

Category🐸 Node Pack

Inputs (8)

NameTypeDefaultDescription
imagesIMAGEβ€”
filename_prefixSTRINGRibbityPackPrefix for saved files. Supports %date:yyyy-MM-dd% tokens.
image_formatCOMBOPNG4 options: PNG, JPG, JPEG, WEBP
output_pathoptSTRINGβ€”
show_previewoptBOOLEANtrueβ€”
append_counteroptBOOLEANtrueAppend a zero-padded counter to the filename. Disable to overwrite the same file each run.
positive_textoptSTRINGβ€”
negative_textoptSTRINGβ€”

Outputs (2)

NameTypeDescription
seedINTβ€”
debugSTRINGβ€”