LC Save Image πΎ
A SaveImage that Civitai can actually read
- images
- metadata
- images
- saved_as
ComfyUI's built-in SaveImage writes your workflow into the PNG, which is great for you and useless to Civitai. The uploader there auto-links models and LoRAs by matching hashes, and it keys on an A1111-style parameters string - the flat Steps: β¦, CFG scale: β¦, Model: β¦ text block - neither of which the default node produces. People who post to Civitai have known this for years: the fix is a save node that writes both the Comfy graph and the Civitai-friendly chunks. LC Save Image is the LC123 pack's version of that fix, and it's the node you want if "who made this and with what" showing up correctly on an upload matters to you.
It's a proper output node in the LC123/io category, and it behaves like SaveImage where it counts: it writes real files under ComfyUI/output/, every frame of an input batch gets its own file, and the queue always runs it. What it adds is the metadata layer. On the PNG path it embeds the full ComfyUI workflow and prompt JSON - drag the file back onto the canvas and the whole graph rebuilds, as always - plus a parameters chunk in the A1111 dialect and civitaiResources JSON, and it hashes every model in the graph. JPEG and WebP output get only a short comment, because those formats have no PNG text chunks; the workflow does not travel. PNG is the master, exactly as the image-metadata rulebook says.
The inputs a beginner actually sets:
images- the batch to save. Each frame becomes a file with a counter suffix.filename(defaultLC123) - the file stem.path- a subfolder under the output directory; empty means the output root. Together they form the destination.format-png/jpeg/webp. PNG recommended.qualityonly applies to JPEG/WebP (ignored for PNG).embed_workflow,embed_civitai,hash_resources- all default on. The last one is the interesting toggle: it computes SHA-256 AutoV2 hashes of the checkpoints, UNET, CLIP, VAE, and LoRAs actually found live in the graph. Civitai lists resources from these hashes, not from filenames - so leaving it on is the entire point of the node.metadata(optional) - theLC_SAVE_METAsocket fed by the companion LC Save Metadata π·οΈ node. Wire that in and theparameters/civitaiResourceschunks get populated from it.filename_prefix(optional) - a combined prefix from the pack'sLC Easy Folder πnode; it's used when you leavefilenameat its default.
Outputs: images passes the batch through so you can chain another saver, and saved_as gives the relative path of the last file written - wire it into LC Show Text if you want to see where the output landed without hunting through folders.
Mechanism notes from the source that explain the troubleshooting. Hash collection reads the live graph and deliberately skips muted (mode 2) and bypassed (mode 4) sources, plus LoRAs with on: false - dead branches don't pollute your resource list with models that weren't really used. The first hash of any model file is slow (it reads the whole file); a .sha256 sidecar is cached beside the model so later saves are fast. And the author's README warns to re-drop old LC Save Image nodes after widget changes - the node grew and changed over versions, so an ancient copy on your canvas may serialize wrong.
Where people get burned: picking JPEG or WebP and then wondering where the workflow went (short comment only - keep PNG as your archive, export small derivatives for posting), and expecting Civitai to credit a model by name when it only matches hashes, which is precisely why hash_resources defaults on. If the first save after adding a model hangs a moment, that's the hashing - it caches, so it's a one-time tax per file.
Install: ComfyUI Manager β search "LC123" (repo ComfyUI_LC123_nodes), or cd ComfyUI/custom_nodes && git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes, restart. No pip extras or model downloads; it needs only ComfyUI's own Python env (torch, numpy, PIL). Watch for the nested-folder trap if you unzip a release inside an existing clone, and on hosted ComfyUI, remember the platform installs custom nodes itself - "missing node" on someone's shared workflow means requesting the pack, not a fix on your side.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Batch to save. Each frame is a file. | |
| filename | STRING | LC123 | File stem. Easy Folder can still be wired if you prefer one combined prefix. |
| path | STRING | Subfolder under Comfy output. Empty = output root. Separators normalized. | |
| format | COMBO | png | PNG keeps workflow + Civitai text chunks. JPEG/WebP only get a short comment. |
| quality | INT | 951β100 | JPEG / WebP quality. Ignored for PNG. |
| embed_workflow | BOOLEAN | true | Write Comfy prompt + workflow JSON into the PNG. |
| embed_civitai | BOOLEAN | true | Write A1111-style parameters from the metadata socket. |
| hash_resources | BOOLEAN | true | SHA-256 AutoV2 of checkpoints, UNET, CLIP, VAE, LoRAs found in the graph. Civitai lists resources from these hashes, not from names. |
| metadataopt | LC_SAVE_META | From LC Save Metadata. Prompts, seed, models, Civitai AIR/URL. | |
| filename_prefixopt | STRING | Optional combined prefix (Easy Folder). Used when filename is left as default and this is wired. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | β |
| saved_as | STRING | β |