Preview & Save Image
Preview like Preview, save like Save — but only when you click
- images
- images
Every ComfyUI user knows the save-node dilemma. Preview Image shows you the result but keeps nothing - the file lands in temp/, a scratch directory that gets wiped. Save Image writes every result of every run to output/ permanently, so a batch of forty candidate frames buries forty files you mostly didn't want. Preview & Save Image splits the difference the way you actually work: a run only previews, and a save button on the node writes that result to disk when you click it. Nothing queued, nothing re-run, no junk accumulating.
This is the kind of small quality-of-life fix that reads as obvious once you've seen it. You iterate on a batch, the good one shows in the preview, you click save, done. Want it again? Click again - a counter suffix (a_00001_.png, a_00002_.png) means a second click never overwrites the first. The runner keeps iterating on the same node because the output passes through unchanged to whatever comes next.
The inputs and outputs that matter
images- the batch to preview and pass through. Every image in the batch is saved (one file each) when you click.path- where the button writes: afilename_prefixunder ComfyUI's output directory, using Save Image's exact rules.shots/asavesoutput/shots/a_00001_.png;%year%,%width%and friends are expanded; absolute paths and..are refused. It's a plain string, so the pack's Path Builder feeds it nicely.images(output) - the input batch, completely unchanged.
How the save button works
The clever part is the mechanism, because a save-on-click needs a path from the browser to disk that isn't "queue another run." The pack registers an HTTP route (/arisu/save_image, mirrored under /api) on ComfyUI's server at load time. The frontend button posts the preview references to that route, and the server copies the images from temp/ into output/ at path - carrying over the PNG workflow metadata so the saved file has the same prompt/graph chunks Save Image would have written.
That design has two practical consequences. First, path is read when you click, so you can retype where you save without re-running. Second, because the preview lives in temp/, a ComfyUI restart clears it - the button will tell you to run the workflow again to refresh the preview rather than silently saving a stale frame. And if path is fed by a link rather than typed, it uses the value from the last run.
Installing it
Preview & Save Image is part of ComfyUI-Arisu-Nodes (swqa7697, GPL-3.0, new in September 2026). No runtime dependencies - the pack uses only ComfyUI-shipped APIs and its own frontend scripts, so there's no pip install and nothing extra to download. Via Manager: Manager → Install Custom Nodes → "ComfyUI-Arisu-Nodes". Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/swqa7697/ComfyUI-Arisu-Nodes.git
Restart ComfyUI, and the node is under Add Node → Arisu Nodes.
Gotchas
The run-only-preview behavior takes a beat to get used to - if you wire this in and forget to click, you'll walk away with nothing in output/. That's the feature, but it means this node is for the "decide what's worth keeping" phase, not for archival runs where you want everything on disk. If the save button itself doesn't render, check the browser console for a failed load of the pack's preview_save_image.js frontend script. Otherwise it's a rare thing in ComfyUI: a node whose default behavior is exactly what you want.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The batch to preview; every image in it is saved on click. | |
| path | STRING | ComfyUI | Where the save button writes: a filename prefix under ComfyUI's output directory, with Save Image's filename_prefix rules. 'shots/a' saves output/shots/a_00001_.png; %year%, %width% and the like are expanded; absolute paths and '..' are refused. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | The input batch, unchanged. |