Custom Save Image (Handy)
The save-node whose metadata toggle works backwards
- images
Let's be honest about what this is: a re-skin of ComfyUI's built-in Save Image node with two extra checkboxes, shipped in a pack that contains exactly one node. There's nothing wrong with that - the built-in save node is the most-reached-for output node in the tool, and a fork that exposes a couple of toggles as first-class inputs is a reasonable idea. The catch is that one of those toggles is wired backwards in the current code, so "handy" is doing some heavy lifting.
What it does
You feed it an image (or a whole batch of them), it writes PNGs to your ComfyUI output directory, and that's the whole job. It's an output node: no output sockets, nothing wires out of it. Files land as your_prefix_00000_.png, _00001_ and so on - the same counter convention the core node uses, auto-incrementing so you never silently overwrite a previous run. It's a terminal node, which makes sense in the wider ComfyUI graph: this is where a workflow stops being a graph and becomes files on disk.
Under the hood it's a thin wrapper around the same code path core ComfyUI uses - folder_paths.get_save_image_path resolves the output folder and bumps the counter, then each float tensor in the batch is converted to a PIL image and saved as PNG with compress_level=4. You don't need to care about any of that; just know that anything the core node saves, this saves identically.
The two inputs that matter
- images - the IMAGE tensor you're saving. Wire it from anything that outputs an image: VAE Decode, a viewer's output, whatever.
- filename_prefix (default
ComfyUI) - supports the usual format strings, so%date:yyyy-MM-dd%and node-value substitution like%Empty Latent Image.width%both work.
Then the two toggles that make this "custom":
- enable_batch_number (default
on) - whether a per-batch index gets embedded in the filename, so a batch of 4 becomes_0_,_1_,_2_,_3_. Turn it off if you'd rather the counter alone disambiguate the files. - enable_metadata (default
on) - and here's where you get burned.
The gotcha: enable_metadata is inverted
In the shipped code, metadata (the embedded prompt and workflow text chunks) is written to the PNG only when enable_metadata is False. Leave it at the default True and you get a plain pixels-only PNG - no workflow to drag back into ComfyUI. That's the opposite of what the label promises.
In a community where "workflow included" is basically culture, that's a real trap: save with defaults, share the image, and nobody can reconstruct your graph from it. The fix is simple - flip enable_metadata to off when you want the workflow embedded - but you have to know the code is inverted, because nothing in the UI tells you. It's a tiny pack from a single author, so this kind of bug just sits there; treat it as a feature that behaves like a keyed switch, not a named boolean.
Install
The README is nearly empty (no install steps at all), but it's a one-node pack with a single dependency, so it's painless either way:
cd ComfyUI/custom_nodes
git clone https://github.com/anhkhoatranle30/Handy-Nodes-ComfyUI
# then restart ComfyUI
Or just search "Handy-Nodes-ComfyUI" in ComfyUI Manager and let it handle the clone. Dependency-wise the only requirement is numpy, which every ComfyUI install already has. No models, no heavy downloads - the whole thing is a few hundred lines. One small warning: the pack's requirements.txt literally contains the string numpy===, which is not valid pip syntax; in practice it never bites because numpy ships with ComfyUI, but don't go running pip install -r requirements.txt on it yourself.
Should you bother?
If you just need to save an image, use the built-in node - this buys you nothing there. Where it earns its place is batch workflows where you want the index in the filename, and (once you know the trick) a workflow that embeds its own metadata. Oh, and a final flourish: this save-image node lives in a file called MaskNodes.py. It contains no masks. Some things are just vibes.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The images to save. | |
| filename_prefix | STRING | ComfyUI | The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes. |
| enable_metadataopt | BOOLEAN | true | — |
| enable_batch_numberopt | BOOLEAN | true | — |
Outputs (0)
No outputs