Save Image
A short name, a shared config, and the workflow still in the file
- images
- save_info
- preview
- images
Core's Save Image asks for a filename_prefix and that's the whole interface. Which is fine until you have four of them in a graph and you're typing project/run_a/final_ four times, then doing it again for the next project. This node makes the save node small - a short name and nothing else - and moves folder, format and metadata onto a shared Save Info node you wire in once.
It's a deliberately small node. The author's own framing is that the interesting settings live upstream so each Save Image only contributes its own label, and the whole thing still works standalone: nothing wired means output directory, PNG, metadata embedded, which is exactly core's behaviour.
The two inputs
name is the required one, default image, and you should treat it as a filename label rather than a filename: raw, upscaled, final. The actual path is filename_prefix (from Save Info) + name, resolved inside a project subfolder, with a five-digit counter keeping files unique - so proj/run_a/final_00007_.png.
Optional save_info is the wire from a Save Info node. Optional preview is a frontend carrier - the widget sets it on execute, so you never wire it. One output: images, the same images back out, for chaining. It's an output node, so it always runs.
What it writes, and how
PNG goes through Pillow's PngInfo and gets the graph as text chunks: prompt (the API-format execution graph) and whatever else is in extra_pnginfo (workflow, the UI-format graph). JPEG and WebP have no text chunks, so the metadata is packed into EXIF tags instead - prompt: in the Model tag, remaining keys counting down from Make.
That distinction is the reason "the workflow is missing from my file" is almost always a format answer and not a bug. The ComfyUI graph lives properly in a PNG. In WebP you keep a flat string at best; treat it as a metadata diet and keep the PNG as your master. And if embed_metadata is ticked but nothing got embedded, check whether ComfyUI is running with --disable-metadata - the launch flag wins over the node setting, as it should.
There's also save_workflow_json on the Save Info panel, off by default, which writes a sidecar .json with the same stem so the pair up on disk. If you want the graph recoverable without opening the image, that's the switch.
Two smaller details worth knowing, because they're the sort of thing this pack gets right. Results go out in the UI payload under a custom saved key rather than images, which is what stops ComfyUI's default bottom preview firing alongside the pack's own on-node preview - you get one preview, not two. And the destination is checked: the base directory resolves from a per-node override (confined to output/), then Settings → Nynxz, then output/; and after the folder is created, the resolved path is re-checked to be inside that base, so a symlinked subfolder can't walk your files out of it.
Install
Manager → search Nynxz → ComfyUI-NynxzNodes, or:
comfy node install comfyui-nynxz-nodes
From source:
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-NynxzNodes
cd ComfyUI-NynxzNodes
pnpm install && pnpm build
Restart afterwards. No models, no Python dependencies.
One real caveat, and it's shared across the pack: the repo gitignores the built web/ folder, so a bare git clone gives you the Python node and none of the custom widgets. This node will still save correctly - the saving is all Python - but the on-node preview won't draw. pnpm install && pnpm build is the source-install fix; Manager and comfy node install ship it built.
Troubleshooting
Files land in the wrong folder. Check new_project on the Save Info node first; it overrides the project selection and it's easy to leave filled in. Then check the project actually exists under your base directory.
"Resolves outside the base directory." The safety check fired - usually a symlinked subfolder, or a subfolder value with .. in it. Pick a real folder inside the base.
A batch saved as one file. It won't; each image in a batch gets its own counter, with %batch_num% substituted if that token is in the name.
No workflow in the saved PNG. embed_metadata off, or --disable-metadata set. If it's neither, check the node feeding this one actually produced an image - an empty save writes nothing to complain about.
Naming collides between two Save Images. They've got the same name. That's the one thing the node asks you to get right, and the counter means you get final_00007_ and final_00008_ rather than an overwrite - but a shared name makes the pair impossible to tell apart.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Images to save. | |
| name | STRING | image | This save's filename label (e.g. raw / upscaled / final). Combined with Save Info's filename prefix; a counter keeps files unique. |
| save_infoopt | NYNXZ_SAVE_INFO | Optional shared settings from a Save Info node. Unwired = save to the output dir as PNG with embedded metadata. | |
| previewopt | NYNXZ_SAVE_PREVIEW | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | The same images, for chaining. |