Save Image Plus (UTK)
Get an actually print-ready file out of ComfyUI
- images
Stock ComfyUI's Save Image writes a PNG with no DPI metadata at all, which is fine until a print shop asks "and what resolution is this?" and the honest answer is "the pixels are what they are." This node fixes that specific, unglamorous problem: it embeds real DPI metadata in the file - 300 by default, the standard for print - so what comes out of the graph is a file a printer actually understands. It's the difference between handing someone a file and handing them a print job.
How it works
Under the hood it's the same PIL save path ComfyUI uses, with the knobs exposed. It converts the image tensor to a uint8 PIL image and passes dpi into the file format's metadata, which works differently per format:
- PNG: DPI goes into the pHYs chunk, and with
save_workflowon, the ComfyUI workflow JSON plus your author/description ride along as text metadata - the "workflow included" sharing culture, preserved in the file. - TIFF: the one the tooltip calls out as best for professional print. LZW-compressed, with DPI, Artist and ImageDescription tags, workflow JSON included.
- JPEG / WebP: DPI and author/description go into EXIF - but only if the optional
piexiflibrary happens to be installed. If it isn't, the node still saves the file, just without the EXIF. Silent downgrade, no crash.
It's an output node: nothing to wire out, its whole effect is the file it drops into ComfyUI's output/ folder.
The inputs that matter
filename_prefix(defaultComfyUI/PrintReady) - this is a path. Use/for subfolders, soprints/my_imagelands inoutput/prints/.file_format- PNG, JPEG, TIFF or WebP. Pick TIFF for real print work, PNG if you want the embedded workflow and smaller files.dpi(72–1200, default 300) - 300 is standard print, 72 is screen. Set it once and forget it.quality(1–100) - only affects JPEG/WebP. It does nothing for PNG/TIFF, which the tooltip says plainly.png_compress_level(0–9) - only PNG. Lower is faster and bigger, higher is slower and smaller.save_workflow- embed the graph JSON. PNG and TIFF only; JPEG/WebP can't carry it.
The optional author and description fields embed into the metadata, which is handy when you're selling prints or want to know which run a file came from.
Installing it
It's part of the ComfyUI-UniversalToolkit pack. Easiest through ComfyUI Manager - search "ComfyUI-UniversalToolkit", install, restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/whmc76/ComfyUI-UniversalToolkit
pip install -r requirements.txt
then restart ComfyUI. It's a single-author MIT pack with no model downloads; the requirements are Pillow, numpy, torch and friends, which you already have if ComfyUI runs.
Where people get burned
- JPEG/WebP silently lose their DPI if
piexifisn't installed, and it's not in the pack's requirements. Check withpip show piexif; if you need DPI on JPEGs, install it. - JPEG converts to RGB, so alpha gets dropped. Save transparent work as PNG.
- The default prefix
ComfyUI/PrintReadycreates anoutput/ComfyUI/PrintReady/tree. If you can't find your file, look in the output folder, not the input folder. - A quality or compression setting that "does nothing" isn't a bug - that's just format semantics.
For getting pixel-accurate files into a print pipeline, this is the quiet utility that saves you from the "what DPI is this?" email.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_prefix | STRING | ComfyUI/PrintReady | Filename prefix. Use '/' for subfolders, e.g. 'prints/my_image'. |
| file_format | COMBO | PNG | Output file format. TIFF is best for professional print workflows. |
| dpi | INT | 30072–1200 | DPI (dots per inch) embedded in file metadata. 300 = standard print, 72 = screen. |
| quality | INT | 951–100 | Compression quality for JPEG/WEBP (1-100). Has no effect on PNG/TIFF. |
| png_compress_level | INT | 60–9 | PNG ZLIB compression level (0=none/fastest, 9=max/slowest). Only affects PNG. |
| save_workflow | BOOLEAN | true | Embed ComfyUI workflow JSON into the image metadata (PNG/TIFF only). |
| authoropt | STRING | Author name to embed in image metadata. | |
| descriptionopt | STRING | Image description to embed in metadata. |
Outputs (0)
No outputs