Image Save
The save node with formats, paths, and filename tokens
- images
- profile
- images
- files
The built-in Save Image node is deliberately bare: it drops PNGs into ComfyUI/output/ with a numbered prefix and that's it. Image Save from WAS is the upgrade you install once you start caring where files go and what they're called. Custom output path, choice of format, quality control, and - the real reason people switch - filename tokens.
If you generate at volume, the tokens alone justify it. You can bake the date, time, hostname, or CUDA device straight into the filename, so a folder of outputs is self-documenting instead of ComfyUI_00042_.png.
How it works
You feed it images and it writes them to disk in the format and location you specify. The README spells out the useful bits:
- Format support - PNG, JPEG, and WebP among them. WebP needs your system to actually have WebP support (a package install on Linux, a precompiled library on Windows), which is the one format that isn't guaranteed to just work.
- Path support - point it at any output directory, not just the default
output/folder. (Note the flip side: the node'sshow_historypreview only displays images saved insideComfyUI/output/- files written elsewhere save fine but won't show in the history strip.) - Text tokens - this is the killer feature. In the filename you can use tokens like
[time],[time(%Y-%m-%d__%I-%M%p)],[hostname],[cuda_device], and[cuda_name]. So a prefix of[hostname]_[time(%Y-%m-%d)]writes files already stamped with machine and date. You can even register your own tokens with the pack's Text Add Tokens node.
Inputs and outputs that matter
The images input is obvious. The three settings you'll actually touch: the output path (where), the filename prefix (what it's called, tokens allowed), and the format/extension (PNG for lossless and workflow embedding, JPEG/WebP when you want smaller files). There's a quality control for the lossy formats and a show_history toggle that displays previously-saved WAS images in the node.
This is a terminal node - it saves to disk and doesn't pass an image onward to chain further. It's the end of the line.
How to install it
ComfyUI Manager: search was-node-suite-comfyui, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui
then run the pack's requirements.txt in your ComfyUI venv and restart. For WebP output specifically you'll also want WebP available to your OS - apt-get install webp on Linux, or the precompiled libwebp on Windows.
Common issues & troubleshooting
WebP saves fail or the option does nothing. WebP isn't bundled - your system needs it. Install libwebp (Linux: apt-get install webp; Windows: grab the precompiled binary from the WebP project). Until then, stick to PNG or JPEG.
Files saved to a custom path don't show in the node's history. By design - show_history only previews images written under ComfyUI/output/. The files are on disk where you told them to go; they just don't appear in the strip. And ComfyUI resizes history thumbnails to a uniform size, so a mixed-resolution history looks squished.
PNG vs JPEG for sharing workflows. ComfyUI embeds the workflow graph into PNG metadata, and that's how the "drag the image back in to rebuild the graph" culture works. Save JPEG or WebP and you usually lose that embedded workflow. If you want the image and the reproducible graph, keep it PNG.
"Import Failed" for the whole suite after a ComfyUI update. Classic WAS Node Suite: it downgrades some packages for older modules, so a ComfyUI upgrade can break the import at startup. Re-install the pack's requirements against the activated venv (or run install.bat). The suite's been maintenance-only since late 2023, so this reinstall is a known, recurring step.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The images to write. Every image in the batch gets its own file, each with the next number in the sequence. | |
| root | COMBO | Which folder the files land in: ComfyUI's own 'output' or 'temp', or any folder added under paths.allow_write in config.yaml, listed by its own name. filename_prefix names the part below it. | |
| filename_prefix | STRING | ComfyUI | The name part of each file, before the number. Tokens are expanded here too, so '[time(%H-%M)]' or a custom token can go in the name rather than the folder. Cleared, the file is just the delimiter and the number. |
| filename_delimiter | STRING | _ | What sits between the name and the number: 'ComfyUI_00001.png' with the default, 'ComfyUI-00001.png' with '-'. |
| filename_number_padding | INT | 41–9 | How many digits the number is padded to with leading zeros. 4 gives '_0001', 1 gives '_1'. The count keeps rising past the padding, so too few digits sorts the files oddly rather than failing. |
| filename_number_start | BOOLEAN | false | Where the number goes. Off = last, 'ComfyUI_0001.png'; on = first, '0001_ComfyUI.png', which sorts the files by number rather than by name. |
| extension | COMBO | The file format. `png` is lossless, carries the workflow and takes 16 bits a channel; `exr` holds unclipped linear light at 16 or 32 bit; `jpg` and `jpeg` are small and lossy; `webp` is small and can be either; `tiff` and `bmp` are large and lossless; `gif` is limited to 256 colours. | |
| dpi | INT | 3001–2400 | Print resolution recorded in the file, in dots per inch. It does not resize anything, it only tells a printer or a layout program how large to place the image. Written for png, jpg and jpeg only. |
| quality | INT | 1001–100 | How much detail is kept when the format throws some away: 100 is the best the format offers, 80 is a common balance, 1 is heavily degraded. Applies to jpg, jpeg, webp and tiff; png, bmp and gif ignore it. |
| optimize_image | BOOLEAN | true | Whether to spend extra time packing the file smaller without changing how it looks. Every format except webp and bmp uses it. |
| lossless_webp | BOOLEAN | false | For the webp format only. `on` keeps every pixel exactly and makes a much larger file; `off` compresses it at the quality set above. |
| overwrite_mode | BOOLEAN | false | `off` numbers every file, so nothing is ever replaced. `on` drops the number and writes the prefix alone, overwriting the same file on every run, which suits a fixed path an external tool watches. |
| show_history | BOOLEAN | false | `off` previews the images this run wrote; `on` previews the files this node has written before instead, newest first, up to the limit in the pack's config. |
| show_history_by_prefix | BOOLEAN | true | Narrows the history preview to files in the same folder whose names start with the same prefix. Only has an effect when show_history is on. |
| embed_workflow | BOOLEAN | true | Whether to store the workflow inside the file, so dragging the image back into ComfyUI rebuilds the graph. Only png and webp can carry it, and nothing is stored if ComfyUI was started with --disable-metadata. |
| show_previews | BOOLEAN | true | Whether the saved images appear on the node. `off` still writes the files and keeps the node small, which suits a long batch. |
| bit_depth | COMBO | How finely each channel is stored. `8-bit` is 256 levels and is what every format takes; `16-bit` is 65536 and needs `png`, which keeps a gradient banding-free through further grading; `32-bit float` needs `exr` and stores light above 1.0 rather than clipping it. A depth the chosen format cannot hold fails the prompt. | |
| profileopt | WAS_COLOUR_PROFILE | A colour profile from Image Load. The images are converted from sRGB into that space and the file is written carrying it, so a photograph goes out tagged the way it came in. Left unconnected, the file is written in sRGB and carries no profile. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | The same images that came in, unchanged, so the node can sit in the middle of a chain instead of ending it. |
| files | STRING | Full path of every file written this run, in batch order. A file that could not be written is left out of the list. |