Image Saver
Save images with EXIF notes and workflow metadata baked in
- images
- FILENAME
- FILE_PATH
Every ComfyUI install has a "Save Image" node, and almost everyone eventually outgrows it. Image Saver is the grown-up version: it writes PNG, JPG/JPEG, or WebP; stuffs your own note into the EXIF UserComment tag; embeds the full workflow into PNG/WebP metadata; and names files with tokens like %seed% and %date%. It's part of APW_Nodes, the utility suite Alessandro Perilli extracted from his "AP Workflows for ComfyUI" - and it's the node in the pack most people keep after they've left everything else behind.
How it works
It's a proper output node (it shows up in the UI as a save/result). Under the hood it leans on ComfyUI's folder_paths.get_save_image_path, so images land in your standard ComfyUI/output/ directory, and then:
- Formats:
png,jpg,jpeg,webp. WebP can be lossless (thelossless_webptoggle, on by default) or lossy withjpg_webp_quality(1-100, default 100) - that quality slider covers JPG too. - EXIF UserComment: anything you type into
EXIF_UserCommentgets written into theUserCommentEXIF tag (ID0x9286), readable in any EXIF-aware viewer. Think seed, model, prompt, or a "final v3" note you don't want to lose in the filename. - Workflow embedding:
embed_workflow(on by default) bakes the entire workflow JSON into the file, so you can drag the PNG back into ComfyUI and reconstruct everything. The author's own tooltip is worth quoting: it only works with PNG and WebP. Pick JPG and you're flying without the flight plan. - Filename tokens:
%seed%,%date%,%time%, plus%counter%and%image_format%in the code. Thepathfield takes the same tokens, so the default%date/drops each day's output into its own subfolder.
The code is based on receyuki's SD Prompt Saver and willmiao's Save Image (LoraManager) - the README credits both - which is why it feels more "thought through" than a from-scratch saver.
Inputs that matter
- filename - default
%seed_%date_%time_final_apw. - path - default
%date/, meaningoutput/2026-08-16/.... - seed - feed your actual seed here or
%seed%will just write 0s. - image_format, lossless_webp, jpg_webp_quality - the format knobs.
- EXIF_UserComment - your free-text metadata, multiline.
- embed_workflow - workflow JSON into PNG/WebP.
Wiring it up
The two outputs - FILENAME and FILE_PATH - are strings, and they're the reason to pick this over the stock saver. For a single image they come back as plain strings; for a batch, as a list. Wire FILE_PATH into a captioning node, an uploader, or a "copy path to clipboard" utility and you've got a tidy output-management chain.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/alessandroperilli/apw_nodes
Restart ComfyUI, or search "APW Nodes" in ComfyUI Manager. No extra pip packages and no models to download - it uses torch, Pillow, and piexif, all of which ComfyUI ships with. One heads-up: the repo is archived and the author now points to OCS_Nodes, but the code installs and runs unchanged.
Where people get burned
Three things, in order of frequency. The embed_workflow-doesn't-apply-to-JPG thing, because people assume it's universal. The seed input, because if you never wire it, %seed% in your filenames is silently 0. And the EXIF write failing silently on some formats - the node catches its own exceptions and just prints an error to the console, so if your UserComment never appears in a viewer, check the terminal before assuming the file was written.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filenameopt | STRING | %seed_%date_%time_final_apw | — |
| pathopt | STRING | %date/ | — |
| seedopt | INT | 00–18446744073709550000 | — |
| image_formatopt | COMBO | 4 options: png, jpg, jpeg, webp | |
| lossless_webpopt | BOOLEAN | true | — |
| jpg_webp_qualityopt | INT | 1001–100 | — |
| date_formatopt | STRING | %Y-%m-%d | — |
| time_formatopt | STRING | %H%M%S | — |
| EXIF_UserCommentopt | STRING | — | |
| embed_workflowopt | BOOLEAN | true | Embeds the complete workflow data into the image metadata. Only works with PNG and WebP formats. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| FILENAME | STRING | — |
| FILE_PATH | STRING | — |