Make Image Saver Metadata Config
The CivitAI-readable generation data
- metadata_config
This is the half of the Image Saver Pipe that actually matters for CivitAI. It carries the generation metadata - prompt, negative, model name, sampler, steps, CFG, seed - in the a1111-style format that CivitAI's auto-detection reads. Pair it with a Make Image Saver Simple Config (the file/folder half), bundle both through Make Image Saver Pipe, and the final save writes an image that uploads to CivitAI with its resources properly linked.
Why does that matter? Because native ComfyUI metadata doesn't cut it. This is a genuinely common headache - people generate in ComfyUI, post to CivitAI, and the site shows the prompt and steps but can't figure out which checkpoint or LoRAs were used. CivitAI's whole model of "here's the image and here's exactly what made it" depends on hashes it can match against its catalogue, and ComfyUI doesn't write them the way CivitAI expects. This node (and the pack around it) exists to close that gap.
What it's collecting
Every input here is optional, because in a real workflow you connect most of them rather than typing them. The ones a beginner sets or wires:
positiveandnegative(defaultunknown) - your prompts. Multiline. Usually connected from the same text you feed the sampler so the metadata matches reality.modelname- the checkpoint filename. This is what CivitAI hashes to identify the model, so it needs to be the real file name, not a nickname.sampler_name(44 choices -euler,dpmpp_2m,dpmpp_3m_sde, and the rest of the KSampler list) andscheduler_name(simple,karras,exponential,beta,normal, and friends). These write the sampler/scheduler line that CivitAI shows. Match them to what your actual sampler ran or the metadata lies.steps,cfg,seed,denoise,width,height- the standard generation parameters. Wire them from your sampler and latent so they're accurate.
Then the two that make this node smart:
download_civitai_data(default true) - this is the good part. When on, it looks up your model and resources against CivitAI to fetch their hashes, so the upload links to the right model page. Turn it off if you're offline or generating with private models CivitAI won't know.easy_remix(default true) - helps keep the metadata in the shape CivitAI's "remix" detection likes.
Two more for edge cases: clip_skip (−24 to 24, default 0) records the CLIP skip value - mostly relevant for the SD 1.5 / SDXL anime lineage where 2 is convention; on newer LLM-text-encoder models it's a no-op you can leave at 0. And additional_hashes plus custom let you inject extra resource hashes or arbitrary metadata by hand, for LoRAs or embeddings the auto-lookup missed.
The single output is metadata_config (type METADATA_CONFIG), which feeds Make Image Saver Pipe.
How to install it
Via ComfyUI Manager: search "ComfyUI Image Saver", install, restart.
Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/alexopus/ComfyUI-Image-Saver
cd ComfyUI-Image-Saver
pip install -r requirements.txt
then restart. No models to download; it's pure Python.
Common issues & troubleshooting
CivitAI still won't detect your LoRAs. The checkpoint usually resolves fine via the model hash, but LoRAs are trickier. The pack reads LoRAs from the prompt in <lora:name:weight> format and turns them into hashes - so if your LoRAs are applied purely through loader nodes and never appear as strings, they won't get hashed. The pack's own recommendation is to route them through ImpactWildcardEncode from the Impact Pack, which converts LoRA strings into real conditioning while leaving the <lora:...> text for this node to pick up. Otherwise use additional_hashes to add them manually.
Hashes look wrong or missing. download_civitai_data needs network access and only knows about models CivitAI hosts. A private or heavily-merged checkpoint has no match, so its hash won't link anywhere - that's expected, not a bug.
The metadata doesn't match the image. This node only records what you connect to it. If you hand-type steps but your sampler ran a different value, the metadata will happily lie. Wire the parameters from the same nodes that drive the sampler.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| modelnameopt | STRING | model name (can be multiple, separated by commas) | |
| positiveopt | STRING | unknown | positive prompt |
| negativeopt | STRING | unknown | negative prompt |
| widthopt | INT | 5120–16384 | image width |
| heightopt | INT | 5120–16384 | image height |
| seedopt | INT | 00–18446744073709550000 | seed |
| stepsopt | INT | 201–10000 | number of steps |
| cfgopt | FLOAT | 7.000–100 | CFG value |
| sampler_nameopt | COMBO | sampler name (as string) | |
| scheduler_nameopt | COMBO | normal | scheduler name (as string) |
| denoiseopt | FLOAT | 1.000–1 | denoise value |
| clip_skipopt | INT | 0-24–24 | skip last CLIP layers (positive or negative value, 0 for no skip) |
| additional_hashesopt | STRING | hashes separated by commas, optionally with names. 'Name:HASH' (e.g., 'MyLoRA:FF735FF83F98') With download_civitai_data set to true, weights can be added as well. (e.g., 'HASH:Weight', 'Name:HASH:Weight') | |
| download_civitai_dataopt | BOOLEAN | true | Download and cache data from civitai.com to save correct metadata. Allows LoRA weights to be saved to the metadata. |
| easy_remixopt | BOOLEAN | true | Strip LoRAs and simplify 'embedding:path' from the prompt to make the Remix option on civitai.com more seamless. |
| customopt | STRING | custom string to add to the metadata, inserted into the a111 string between clip skip and model hash |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| metadata_config | METADATA_CONFIG | — |