⭐ Star Save Image+
A save node that does PNG, JPG, WEBP and PSD at once — and embeds your metadata
- images
- options
- mask
- path
The stock Save Image node is fine until you need anything more than "PNG into the output folder." ⭐ Star Save Image+ is the pack's answer to that: one node that writes PNG, JPG, WEBP and PSD - multi-select a combination via the on-node format chips - or just previews without writing anything. It also embeds up to five custom metadata fields, tucks a mask in as an alpha channel, and organizes your files by date and preset folder so you stop drowning in ComfyUI_00042_.png files.
Here's the design choice that trips people up, so get it out of the way early: this node deliberately stores no workflow data. The README and the node description both say it flat out. The five StarMetaData fields you can feed it are your channel for custom info; if you need a drag-back-into-ComfyUI workflow embedded, this isn't the node for that - use the default Save Image or ⭐ Star Meta Injector.
How it works
You connect your IMAGE (and optionally a MASK and a STAR_SAVE_OPTIONS bundle from ⭐ Star Metadata Saver Option), and the node writes the file(s). The mask handling is the clever bit: for PNG and WEBP it's embedded as the alpha channel so ⭐ Star Load Image+ can restore it later; for JPG it's written as a separate _mask.png sidecar (JPG has no alpha); for PSD it becomes a layer mask. Path construction is fully configurable - preset folders from presets.json, a date folder on top or inside, date prefix/suffix in the filename, timestamps, your own separator.
Inputs that matter
- images - what you're saving. The only required socket.
- formats - comma-separated
png,jpg,webp,psd, driven by the on-node chips. - options - plug ⭐ Star Metadata Saver Option's
save_optionshere to embed your five custom fields. - mask - optional; see the alpha/sidecar/layer-mask behavior above.
- preset_folder - pick from the pack's presets (
Images,Video,Inpaint,Upscaled,Star/Generations…) orNoneto use custom_folder. - png_bit_depth -
8bitor16bit. 16-bit keeps more precision from the source tensor but produces bigger files and no EXIF (only tEXt metadata). - jpg_quality / webp_quality / png_compress - the usual quality dials.
The single output, path, is the save folder relative to ComfyUI's output directory (without the filename) - handy if you're feeding the path back into a text-driven workflow or another StarNodes tool.
Install
It's the Starnodes2024/ComfyUI_StarNodes pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Starnodes2024/ComfyUI_StarNodes
cd ComfyUI_StarNodes
pip install -r requirements.txt
Restart and search star. The PSD format needs psd-tools installed; if it's missing, ComfyUI prints exactly what to pip install and the rest of the pack keeps working.
Where people get burned
Besides the no-workflow-metadata gotcha, the two usual suspects are: expecting 16-bit PNGs to have EXIF (they won't - read the tooltip), and forgetting that mode is driven by the node's own buttons, not something you set in the widget list. If images "don't save," check whether you're sitting in preview mode. And if you use a preset folder, note it overrides custom_folder - set both and the preset wins.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The images to save. | |
| preset_folder | COMBO | None | Preset folder from presets.json (overrides custom folder). |
| date_folder | BOOLEAN | true | Create a folder with today's date. |
| date_folder_position | COMBO | first | Where to place the date folder: 'first' = top-level, 'subfolder' = inside the preset/custom folder. |
| custom_folder | STRING | Custom output folder name (used when preset_folder is None). | |
| custom_subfolder | STRING | Additional subfolder inside the main folder. | |
| date_in_filename | COMBO | Off | Add today's date to the filename: 'prefix' = before the name, 'suffix' = after. |
| filename | STRING | ComfyUI | Base filename for saved images (a counter is appended automatically). |
| add_timestamp | BOOLEAN | false | Append HHMMSS time to the filename for unique, sortable names. |
| separator | STRING | _ | Separator between filename parts (date, name, timestamp, counter). |
| jpg_quality | INT | 951–100 | JPEG quality (1-100). |
| webp_quality | INT | 901–100 | WEBP quality (1-100). |
| png_compress | INT | 40–9 | PNG compression level (0-9). |
| png_bit_depth | COMBO | 8bit | Bit depth for saved PNG files. 16bit preserves more precision from the source tensor (larger files, no EXIF, only tEXt metadata). |
| mode | STRING | save | save or preview (controlled by the on-node buttons). |
| formats | STRING | png | Comma separated formats: png,jpg,webp,psd (controlled by the on-node chips). |
| optionsopt | STAR_SAVE_OPTIONS | Optional ⭐ Star Metadata Saver Option output (provides the 5 StarMetaData fields to embed). | |
| maskopt | MASK | Optional mask - embedded as alpha channel (PNG/WEBP) so ⭐ Star Load Image+ can restore it. For JPG a separate _mask.png sidecar is written. For PSD it is embedded as a layer mask. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| path | STRING | Save folder path (relative to the ComfyUI output directory, without filename). |