Nodes/ComfyUI EasyUse Anima/Easy Image Metadata
ComfyUI Node

Easy Image Metadata

It records what you tell it, and that's the whole trick

By n0va39·Created 3 months ago·Updated a day ago· 27
Easy Image Metadata
  • images
  • exif_metadata
  • parameters
positive
negative
modelname
seed0
steps20
cfg7.0
sampler_nameeuler
scheduler_namenormal
denoise1.00
clip_skip0
custom
additional_hashes

ComfyUI's stock SaveImage embeds the workflow and prompt chunks - the node graph, the seed, everything - and that's genuinely great. What it doesn't write is the flat A1111 parameters string that AUTOMATIC1111 uses and that Civitai's uploader keys on to auto-link the checkpoint and LoRAs you used. That gap is why a whole genre of custom save nodes exists, and it's the reason this node does.

Easy Image Metadata builds that A1111 block. It saves nothing, embeds no workflow, and touches no pixels - it takes your values and hands back a bundle you connect to Easy Save Image, which does the writing.

What the mechanism actually is

It composes the exact string A1111's PNG Info would show: your positive prompt, then Negative prompt: ..., then a settings line with Steps:, Sampler:, CFG scale:, Seed: and Size: WxH. Then, only when they're non-default, Denoising strength and Clip skip; then your custom text if you typed any; then Model hash:, Model:, a Hashes: {...} JSON blob, resource weights, and Version: ComfyUI.

Dimensions come from the images tensor, which is why that input is required even though the node isn't saving anything - and why you must connect the same final images you send to the saver, or the recorded size won't match the file.

Whether that string ends up in a PNG text chunk or in JPEG/WebP EXIF UserComment isn't this node's call; that's decided by the format you pick on Easy Save Image.

The inputs and outputs that matter

Wire positive and negative from whatever produces your prompt text - the pack's own prompt nodes output strings, and you can also just type them. modelname has to be a name from ComfyUI's model inventory; it deliberately refuses arbitrary file paths. That inventory lookup is what produces the Model hash: field, and the hash is what Civitai's linker actually matches on. If the name you typed isn't a local file, you get Model: with your text and no hash.

seed, steps, cfg, sampler_name, scheduler_name, denoise and clip_skip are plain widgets. The node records them. It does not read your sampler. So wire the real values from your KSampler (or type them correctly) or your metadata will confidently describe a run that never happened. The seed widget specifically has no randomize control and defaults to 0, so if you never connect the sampler's seed, every image you save will claim Seed: 0 forever.

Then there's the optional additional_hashes socket, which is where Easy Civitai Lookup goes. It's how models and LoRAs that aren't in your inventory get hashed into the metadata; duplicate keys are skipped, with verified local resources and the first manual entry taking precedence over later ones.

Outputs: exif_metadata (the opaque bundle for Easy Save Image) and parameters (the human-readable string, useful if you want to eyeball what you're about to write into someone's file).

Installing it

Manager → search EasyUse Anima, or:

cd ComfyUI/custom_nodes
git clone https://github.com/n0va39/ComfyUI-EasyUseAnima
pip install -r ComfyUI-EasyUseAnima/requirements.txt

Restart ComfyUI. Despite landing in a pack that's all about the Anima model, this node is model-agnostic - SDXL, Flux, Anima, anything. No model files to download, and none of the README's optional node packs (Impact-Pack, KJNodes, Spectrum) are needed for it.

Where people get burned

  • Metadata silently missing? Check how ComfyUI was launched. With --disable-metadata (or the equivalent server setting) this node emits empty metadata and skips resource hashing entirely. It's a global switch, and it wins over your graph.
  • Different images on the two nodes. The dimensions recorded are the ones from this node's images input. If you tap a pre-upscale image here and the post-upscale one goes to the saver, your metadata lies about the resolution.
  • An empty image batch raises [EasyUseAnima] Metadata requires a non-empty IMAGE batch. rather than writing junk.
  • Metadata drifts when you tweak the graph. Change steps from 20 to 28, forget the widget here, and the next hundred files carry the old number. It's the single most common way this kind of node quietly poisons an archive. If you already run the pack's AiO generator, let it drive these values instead of retyping them.
CategoryEasyUse Anima/Image

Inputs (13)

NameTypeDefaultDescription
imagesIMAGEFinal images whose dimensions are recorded.
positiveSTRING
negativeSTRING
modelnameSTRINGModel name from ComfyUI's model inventory; no arbitrary file paths.
seedINT00–18446744073709550000The seed used to generate the image; never randomized by this metadata node.
stepsINT201–10000
cfgFLOAT7.00–100
sampler_nameSTRINGeuler
scheduler_nameSTRINGnormal
denoiseFLOAT1.000–1
clip_skipINT00–256
customSTRING
additional_hashesoptSTRINGOptional name:hash:weight entries from Easy Civitai Lookup.

Outputs (2)

NameTypeDescription
exif_metadataEASYUSE_IMAGE_METADATAA1111 generation metadata only; workflow saving is configured on Easy Save Image.
parametersSTRINGHuman-readable A1111 generation parameters.