Visual Review & Save
Look at the batch before you save it — Visual Review & Save
- images
- filtered_images
- width
- height
You know the drill: batch size 4, hit queue, and the only thing standing between you and 400 throwaway PNGs is squinting at the preview thumbnails ComfyUI gives you. VisualSaveNode - "Visual Review & Save" in the menu - is the "actually pick the keepers first" output node for that workflow. It puts a scrollable thumbnail gallery right inside the node, lets you click through candidates at full size, stars the ones you like, saves those to a folder of your choosing, and - the part that makes it more than a fancy saver - passes your selections downstream, so only the images you hand-pick go on to, say, an upscaler or a face-fix pass.
How it works
Every time the queue runs, the node dumps each image in the batch to ComfyUI/output/visual_review_temp/ as a PNG with a random filename (deliberately random, to stop your browser caching a stale thumbnail), then returns that list to the frontend as a custom_gallery payload. The node's own JS draws the gallery from that - that's the UI you actually click on, not a ComfyUI widget.
The filtering itself is a straight priority chain in the Python: session_filenames (what's selected in the Session Library) wins, then output_indices (comma-separated picks from the current batch), then - if you picked nothing - a dummy 64×64 black image so downstream nodes don't stall the queue. That black frame is a deliberate "no selection" signal, not a bug.
The inputs that matter
You'll set a handful of these and ignore the rest:
images- your batch, usually straight from aVAE Decodeor aPreviewImage's input.root_path+selected_folder- where saves land. Defaultroot_pathisC:\AI_Outputs, which tells you everything about the author's OS and nothing about yours. Set it to something sane, or use the built-in folder browser.filename_prefix- a template, defaultImage_{index}. It understands{index},{star_chars}, and{star_number}, and the saver auto-increments the index so you don't overwrite.star_char/star_number- the rating suffix, e.g.***on a 3-star save. Cosmetic, but nice when you later sort a folder by rating.file_format-png,jpg, orwebp.
The two optional inputs - output_indices and session_filenames - are UI-managed; you don't usually type into them.
Wiring the outputs
filtered_images is the one that matters, and it's the interesting part: the IMAGE slot is declared OUTPUT_IS_LIST=True, which is ComfyUI's fan-out behavior. Whatever node you connect below it runs once per selected image, each time receiving a single-image tensor. That's exactly what you want when the downstream node chokes on a batch - the source comments call out WAS's image_width_height as a node that can't handle N>1 batches. Wire filtered_images into an upscaler, an SaveImage, or a second review pass, and each selected image flows through individually. width and height come along free if you need them for sizing.
The Session Library is the other hook: pin a good frame during one run, and it persists in ComfyUI/output/visual_review_session/ across runs. Reuse the saved selection next time without regenerating - handy when you want to curate keepers from three batches and then upscale the whole shortlist at once.
Installing
ComfyUI Manager (search "ComfyUI-SB-Visual-Review-Save-Images") or the old-school way:
cd ComfyUI/custom_nodes
git clone https://github.com/smithsun00/ComfyUI-SB-Visual-Review-Save-Images
# restart ComfyUI
No extra Python packages - it leans on Pillow, torch, and numpy, all already in a stock ComfyUI install. No models to download. The node shows up under VisualReview.
Gotchas
- The temp folder grows. Every run writes PNGs to
output/visual_review_temp/and nothing cleans them automatically. There's a delete route in the code, but I'd just sweep the folder occasionally. - No workflow metadata on your saves. This node copies the PNG with Pillow, so unlike stock
SaveImageit doesn't embed the ComfyUI graph. Keep a stock save in the chain if you want workflow-reloadable masters or CivitAI auto-linking - the review node is for curation, not archival (see the metadata rundown in the KB). - Windows default path. If
C:\AI_Outputsmeans nothing to your Linux box, the node still works - it just won't find a destination until you set one.
It's a niche tool, and honestly the community barely talks about it. But if your routine is "generate a grid, stare, save three, regret the other 97," it turns that into a single in-graph action instead of a file hunt.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| root_path | STRING | C:\AI_Outputs | — |
| selected_folder | STRING | — | |
| filename_prefix | STRING | Image_{index} | — |
| star_char | STRING | * | — |
| star_number | INT | 31–10 | — |
| file_format | COMBO | 3 options: png, jpg, webp | |
| output_indicesopt | STRING | — | |
| session_filenamesopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| filtered_images | IMAGE | — |
| width | INT | — |
| height | INT | — |