# 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. - **Embed workflow** (`save_metadata`): **yes** stores the prompt and workflow in the file (PNG text chunks, EXIF in webp and jxl) so it drags back into ComfyUI; **no** writes a clean file for sharing or datasets. `--disable-metadata` on the server wins. - **Preview** (`preview`): the small switch under the card shows the saved image on the node. Off, the picture's box goes away and the node is shorter; on again, the node returns to its height with the last saved image. It is display only: the file is saved either way and the queue still lists it. ## 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.