πͺ Save image with extra metadata
Save Image with Extra Metadata (Crystools)
- image
- Metadata RAW
This is the stock Save Image node with two things bolted on: a switch for whether the workflow gets embedded in the PNG at all, and a spot to stuff your own custom JSON into the file's metadata alongside it. Same job, same output folder, just more control over what rides along in the file.
Why you'd reach for it
ComfyUI's whole sharing culture runs on the fact that a workflow is just JSON, and that JSON can live inside the image file itself - drag a PNG back into ComfyUI and the graph that made it reconstructs. That's why "workflow included" became a norm and posts that skip it draw complaints. This node is Crystian's take on that mechanic with a knob to turn it off (with_workflow) and a way to add your own layer on top - a title, description, author tag, rating, whatever you want travelling with the file. It's genuinely useful if you're publishing images and want provenance or a signature baked in, or if you're scripting a pipeline and want machine-readable notes attached to each output.
How it works
It saves exactly like the default Save Image node - same output directory, same filename_prefix widget - but writes into the PNG's exif the same way ComfyUI natively embeds workflow data, plus whatever you put in metadata_extra. Anything saved this way reads back cleanly with Load image with metadata, and the node's own output lets you inspect what actually got written.
Inputs and outputs
Required: image (what to save), filename_prefix (defaults to ComfyUI), and with_workflow (boolean, default on - turn it off if you don't want the full node graph riding along, just your extra metadata). Optional: metadata_extra, a multiline string that ships with a template JSON - Title, Description, Author, Software, Category, Rating, UserComment, Keywords, Copyrights - you can edit, trim, or replace entirely. It's freeform text, not a validated schema, so keep it valid JSON yourself. Output: Metadata RAW, which you can wire straight into Metadata extractor to confirm exactly what landed in the file.
One README note worth knowing: there used to be a companion ComfyUI-Crystools-save extension for tagging your name and a custom workflow filename onto saves, but it was marked deprecated in mid-2025 - don't bother installing it, this node covers the same ground now.
Installing it
Through ComfyUI Manager, search crystools (the pack renamed itself to lowercase in a 2025 release, so search lowercase if the capitalized version doesn't show). Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/crystian/ComfyUI-Crystools.git
cd ComfyUI-Crystools
pip install -r requirements.txt
Restart ComfyUI. No model downloads - this is a pure utility node, the dependencies are just Python packages (psutil, pynvml) the wider pack uses for its resource monitor.
Common issues
If metadata_extra isn't valid JSON, don't expect a friendly error - it's a plain multiline text widget, nothing validates it before it gets written, so a stray trailing comma just means the field is malformed when something later tries to parse it back out. Keep it syntactically clean.
The other thing worth knowing, and this isn't specific to this node: Crystools nodes have a real history of going missing after a ComfyUI update - users have reported IMPORT FAILED in the startup console after upgrading, usually a Python module resolution issue rather than anything wrong with your graph. If this node (or any Crystools node) vanishes from the menu after an update, check the console log for that line first, then reinstall the pack so pip re-resolves its dependencies against your current environment.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| filename_prefix | STRING | ComfyUI | β |
| with_workflow | BOOLEAN | true | β |
| metadata_extraopt | STRING | { "Title": "Image generated by Crystian", "Description": "More info: https:\/\/www.instagram.com\/crystian.ia", "Author": "crystian.ia", "Software": "ComfyUI", "Category": "StableDiffusion", "Rating": 5, "UserComment": "", "Keywords": [ "" ], "Copyrights": "" } | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Metadata RAW | METADATA_RAW | β |