Image Chooser
Batch to four, keep the one you love — the overlay Image Chooser
- images
- latents
- masks
- segs
- images
- latents
- masks
- selected
- segs
You generated a batch of four, and exactly one of them is worth keeping. Without a chooser node you'd either run each one solo (slow), or save all four and sort them in a file browser (annoying). Image Chooser is the middle path: it pauses your ComfyUI run, pops an overlay of thumbnails over the canvas, and lets you click the winner. The run resumes with only what you picked.
It's the modern re-implementation of chrisgoringe's famous cg-image-picker node, rewritten by the "Image Chooser Classic" pack author (heyburns) against current ComfyUI extension APIs - no legacy shims, no extra build metadata. If you've ever seen an old workflow with an Image Picker node and wondered where it went, this is its successor.
How it works
The node sits between a batch producer (usually a KSampler, but any IMAGE output works) and whatever consumes the images. It flattens the whole batch, renders each frame, and ships them to the front-end over a websocket. Then it blocks - the workflow genuinely stops until you answer. Your clicks come back through the /image_chooser_classic_message endpoint, the node slices the batch to just your picks, and execution continues. If you cancel instead of picking, it raises an interrupt and kills the queue cleanly.
Because it uses its own endpoint, it can technically co-exist with the legacy cg-image-picker in the same install. The author recommends against running both, and honestly the legacy one doesn't work well anymore anyway - just use this.
The inputs that matter
Only two inputs are required, and you'll actually touch just one of them most of the time:
- mode - the picker's personality, and where most of the value lives. Always pause asks every run. Repeat last selection keeps the same indices on future runs without asking (great for iterating on one seed/denoise). Repeat last cached selection does that but only when the upstream images are pixel-identical. Only pause if batch auto-passes a single image and asks when there are two or more - the setting most people land on. Progress first pick asks once, then never again. Pass through forwards the whole batch untouched (handy for disabling the node without rewiring). Take First n / Take Last n silently keep
countimages with no dialog at all. - count - how many images Take First n / Take Last n keep. Defaults to 1.
The optional inputs - images, latents, masks, segs - are all forwarded in lockstep. Feed it latents and it returns the latent tensors you picked, so you can re-run a chosen latent through a different sampler instead of re-rolling.
Outputs: images, latents, masks, and segs (matching whichever inputs you connected), plus selected - a comma-separated STRING of the indices you chose. That string is handy if you want to know which picks happened, or wire indices somewhere downstream.
Installing it
It's a zero-dependency pack: no requirements.txt, no model files to download, pure Python + JS that use what ComfyUI already ships. Either grab it via ComfyUI Manager (search "Image Chooser Classic") or clone it:
cd ComfyUI/custom_nodes
git clone https://github.com/heyburns/image-chooser-classic.git
Restart ComfyUI, then hard-refresh the browser (Ctrl+Shift+R) so the new JS actually loads. Add Node → search "Image Chooser".
Gotchas
- The chooser listens for hotkeys: 1–9 toggle thumbnails, 0 confirms/cancels, Esc cancels. There's also an optional alert sound when it pauses - toggle both under Settings → "Image Chooser: ...".
- If the overlay never appears, it's almost always a stale browser cache. Hard-refresh, or clear
web/extensions/leftovers if you previously ran the old picker node. - Always pause forces downstream nodes to re-run every time - that's by design, but it's why Only pause if batch or Repeat last selection usually feel better once you're past the experimenting stage.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | 8 options: Always pause, Repeat last selection, Repeat last cached selection, Only pause if batch, Progress first pick, Pass through, +2 | |
| count | INT | 11–999 | — |
| imagesopt | IMAGE | — | |
| latentsopt | LATENT | — | |
| masksopt | MASK | — | |
| segsopt | SEGS | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| latents | LATENT | — |
| masks | MASK | — |
| selected | STRING | — |
| segs | SEGS | — |