MetaMan Embed & Save
Re-bake metadata into a PNG so any other tool can read it
- image
Here's the gap MetaManEmbedAndSave fills: you generate something in ComfyUI, then you want to drop it on Civitai or open it in A1111 - and the settings should come with it, readable by the other side. ComfyUI buries its metadata in its own chunk; A1111 and Civitai read a different one. This node takes your image, re-encodes the metadata into the format your target service understands, and saves a fresh PNG with it baked in.
It's the output node of the MetaMan pack - the other half of the load → extract → convert pipeline.
What it does
You hand it an image, a metadata JSON string, and a target service. It converts the metadata to that service's text format and embeds it into the PNG as a parameters text chunk - the standard chunk A1111 and Civitai actually read. It also stamps a metaman_converted timestamp and a version marker, so you can tell a processed file at a glance. Then it saves the result to ComfyUI's output folder, timestamped like MetaMan_automatic1111_20260816_120000.png.
The conversion is per-service, and it's the smart part:
- automatic1111 (the default) - builds the classic three-line format: prompt,
Negative prompt:, then the comma-separated params line (Steps:,Sampler:,CFG scale:,Seed:,Size:,Model:). This is the format A1111 and Civitai's info readers both parse. - comfyui - structured JSON, useful if the recipient is feeding it back into ComfyUI-land tooling.
- civitai - the A1111 string plus model hash and
<lora:name:weight>tags. - forge, tensor.ai, leonardo.ai - their own flavors, with JSON fallback if a conversion throws.
Inputs and where the output goes
Required inputs:
image(IMAGE) - the tensor you want saved. From any source; typically your VAE decode.metadata_json(STRING) -forceInput, so wire it fromMetaManLoadImage(or any node emitting a JSON string). Empty input just writes "MetaMan processed image" and saves anyway, which is a quiet footgun if you expected your prompt to be in there.target_service- the dropdown with the six services above.
One optional input: directory, defaulting to MetaMan converted. That's a subfolder under ComfyUI/output, and it's the first place to look when your file seems to vanish - it won't be in the top-level output folder.
It has no output sockets - it's an OUTPUT_NODE, a dead end that returns a UI entry so the result shows up in ComfyUI's image gallery. That's normal for saver nodes; it feels odd the first time.
Why you'd reach for it
Cross-platform handoff is the whole pitch. A ComfyUI image re-embedded in automatic1111 format opens in A1111's info tab with its prompt and settings intact, and Civitai's uploader picks up the generation data on its own. If you post a lot of images to Civitai or trade workflows with A1111 friends, that single chunk is the difference between "people can see how I made this" and "mystery image."
Install and gotchas
Same install as the rest of the pack - ComfyUI Manager (search "MetaMan") or:
cd ComfyUI/custom_nodes
git clone https://github.com/MatthewClayHarrison/ComfyUI-MetaMan
Restart, and it lands under the MetaMan category. No models to download; the dependencies (Pillow, torch, python-dateutil, piexif) are all already in your ComfyUI environment.
Two honest caveats. First: it embeds text metadata, not a workflow graph. The README talks grandly about recreating identical images across platforms - what this node actually does is re-encode the string metadata you feed it. The actual reproduction is still your job (that's what MetaManExtractComponents is for on the reading side). Second, per the README-vs-code reality check: the docs describe a monolithic "MetaMan Universal" node with an embed_in_image operation that doesn't ship. The real, working version of that idea is this node. Use this one.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| metadata_json | STRING | — | |
| target_service | COMBO | automatic1111 | 6 options: automatic1111, comfyui, civitai, forge, tensor.ai, leonardo.ai |
| directoryopt | STRING | MetaMan converted | — |
Outputs (0)
No outputs