Help pages named the raw widget (divisible_by, max_frames, color_match) where the card shows a label (Multiple, Limit, Tone match), so a reader could not find the control. Each such control now reads as the visible label with the widget name beside it, and option values show the text on the segment (match a, hist, cover, guided).
68 lines
3.7 KiB
Markdown
68 lines
3.7 KiB
Markdown
# Save Image
|
|
|
|
Saves an `IMAGE` batch as **PNG**, **lossless WebP** or **lossless JPEG XL**,
|
|
with the workflow embedded or deliberately left out. The name is either
|
|
composed on the node from a prefix plus the tags you switch on, or supplied
|
|
exactly by the `filename` input, so a caption or edit pass keeps the source
|
|
file's name. A caption on the `caption_text` input writes the paired `.txt`.
|
|
|
|
## The card
|
|
|
|
- **Folder** (`output_dir`): empty saves to ComfyUI's output folder; a name
|
|
such as `sets/portraits` saves to that subfolder, created if missing. Save
|
|
Image never writes outside the output folder: absolute paths, drive
|
|
letters, `~` and `..` are refused before the run, and the path preview says
|
|
so as you type. **Browse** walks the subfolders of the output folder.
|
|
- **Filename** (`filename_prefix`): the local name, subfolders allowed
|
|
(`sets/shot`). While the `filename` input is linked the field reads
|
|
`{{filename}}` and the tags fold away - an exact name is never decorated.
|
|
A workflow saved with the old `exact_name` shows that name tagged *exact*;
|
|
clear it to compose locally.
|
|
- **Path preview**: the name this save will produce, in the order the tags
|
|
are appended: `prefix[_YYYY-MM-DD][_HH-mm-ss][_WIDTHxHEIGHT][_#####][_b###]`.
|
|
After a run it shows the first file actually written.
|
|
- **Tags**: **Counter** (`name_counter`, on by default) appends the next
|
|
free five-digit number for that stem in that folder, so a save never
|
|
collides. **Date** and **Time** (`name_date`, `name_time`) stamp the local
|
|
clock. **Size** (`name_size`) appends `1024x1536`. **Batch #**
|
|
(`name_batch`) appends `b001, b002...` across an image batch, which then
|
|
shares one counter; without it each frame takes the next number. With the
|
|
counter off a single image reuses the same path and replaces the file - the
|
|
dataset replacement case - and a batch still numbers its frames.
|
|
- **Format**: **PNG** saves everywhere and keeps alpha. **WebP**
|
|
(`webp lossless`) is usually smaller than PNG, keeps alpha, and carries the
|
|
workflow in EXIF. **JXL** (`jxl lossless`, lossless JPEG XL) is the most
|
|
compact; it needs the optional `pillow-jxl-plugin` in ComfyUI's python
|
|
(also the pack's `jxl` extra) and few browsers preview it.
|
|
- **Workflow** (`save_metadata`): **embed workflow** stores the prompt and
|
|
workflow in the file (PNG text chunks, EXIF in webp and jxl) so it drags
|
|
back into ComfyUI; **off** writes a clean file for sharing or datasets.
|
|
`--disable-metadata` on the server wins.
|
|
|
|
## Inputs
|
|
|
|
- **filename** (STRING, link only): the exact name from upstream - a Load
|
|
Image name, a caption tool's id. Its image extension is swapped for the
|
|
chosen format's (`photo123.jpg` -> `photo123.png`); a batch appends
|
|
`_001`, `_002`... A linked but empty value stops the run instead of saving
|
|
under a made-up name.
|
|
- **caption_text** (STRING, link only): saved as a UTF-8 `.txt` beside every
|
|
image with the same name (`portrait.png` -> `portrait.txt`). Empty writes
|
|
no sidecar. The old `caption` box still works underneath; a linked caption
|
|
wins.
|
|
|
|
Rooted paths and `..` in names are rejected before the run. `on_existing`
|
|
from older workflows is still honored wherever a save can land on an
|
|
existing file (counter off, exact or linked names).
|
|
|
|
## Outputs
|
|
|
|
- **file_path**: absolute path of the first file saved this run (empty when
|
|
every file was skipped), for downstream nodes that want the file itself.
|
|
- **images**: the input batch, unchanged — save first, keep wiring.
|
|
|
|
The node always re-runs on Queue (a saver's job is the side effect, so
|
|
deleting a file and queueing again saves it again), and a server launched
|
|
with `--disable-metadata` overrides the metadata toggle — the owner's call
|
|
beats the widget.
|