ComfyUI Node

Visual Review & Save

Look at the batch before you save it — Visual Review & Save

By smithsun00·Created 5 months ago·Updated 5 months ago· 2
Visual Review & Save
  • images
  • filtered_images
  • width
  • height
root_pathC:\AI_Outputs
selected_folder
filename_prefixImage_{index}
star_char*
star_number3
file_format
output_indices
session_filenames

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 a VAE Decode or a PreviewImage's input.
  • root_path + selected_folder - where saves land. Default root_path is C:\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, default Image_{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, or webp.

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 SaveImage it 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_Outputs means 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.

CategoryVisualReview

Inputs (9)

NameTypeDefaultDescription
imagesIMAGE
root_pathSTRINGC:\AI_Outputs
selected_folderSTRING
filename_prefixSTRINGImage_{index}
star_charSTRING*
star_numberINT31–10
file_formatCOMBO3 options: png, jpg, webp
output_indicesoptSTRING
session_filenamesoptSTRING

Outputs (3)

NameTypeDescription
filtered_imagesIMAGE
widthINT
heightINT