🖼️ Image Option Picker (Pause)
Make the Workflow Stop and Let You Pick One of Three
- option_1
- option_2
- option_3
- selected_image
Most ComfyUI workflows are a one-way street: you queue, it runs to the end, you look at what came out and complain. Fine - until the expensive part sits after the part that's a coin flip. Upscaling and face-detailing four candidates is a waste of VRAM when you only ever wanted one.
Image Option Picker is that, and nothing else. Three images in, a small carousel with numbered buttons, and the workflow waits for you to click one.
The pause is real, and it's a spin loop
Nothing async and clever is happening here. Open the source and the node saves a preview PNG of each candidate into ComfyUI's temp directory, fires a custom image_option_paused event over the websocket with the three preview URLs, then sits in a while loop with a 0.1-second time.sleep(), checking for an interrupt until the frontend POSTs back which one you picked. The prompt worker thread is occupied the whole time - ComfyUI's web server keeps serving, which is the only reason your click can land, but the queue is stopped dead.
Two details explain the behaviour. The node is an output node and returns a NaN-ish value from IS_CHANGED ("nan_<token>") - the classic always-rerun idiom, since a result never equal to last run's is never served from cache. That is what you want here (fresh candidates per queue), but it invalidates the cache behind the node too, so expect that sampler to re-run. And because the buttons call an aiohttp route, the backend records the choice; the frontend is just the remote control.
Inputs and output
Three required inputs, all plain IMAGE: option_1, option_2, option_3. Wire whatever you want into them - three KSamplers with different seeds, three LoRAs, three checkpoints - the node doesn't care, it only compares position.
One output, selected_image (IMAGE). It passes through the input you picked, and that's what you wire into your upscaler, detailer, or Save Image.
Caveat from the code: previews come from option_1[0], option_2[0], option_3[0] - the first frame. Feed a batch of four into one input and you preview one image but pass all four through on selection.
On the node there's a 280px preview with ‹ › arrows and a badge showing which of the three you're looking at, then buttons 1, 2, 3, plus ⛔ Cancel and Reload. They're greyed out until the pause fires. The arrows only move the preview; the buttons are what select. Arrow over, check the badge, click the matching number - fussy for about two runs.
Cancel aborts the entire run, not just this node. Reload clears your selection and bumps a counter so the next Run pauses again - the author's own comment says it's the safeguard for redoing the choice when the three images are unchanged.
Install
No dependencies: the pack's pyproject.toml declares none, and the numpy/PIL/aiohttp imports are things ComfyUI already ships. No models, no compilation. One node, MIT, in the Comfy registry.
Through Manager, search "Image Option Picker" and install. After Manager applies the changes, refresh the ComfyUI page in your browser - the README calls this out and it's not a joke, the JS extension won't register until you do. Manually:
cd ComfyUI/custom_nodes/
git clone https://github.com/lalikamala/ComfyUI-ImageOptionPicker.git
Then restart ComfyUI.
Where it bites
Previews live only in the temp folder, so the losing candidates are gone - no history panel, that's the design. And selected_image has to go somewhere: with no Save or Preview node downstream you've built a picker with no output.
The other risk is upstream, because this pack is new (the repo dates to September 2026) and it's a frontend-heavy node: it leans on ComfyUI's DOM-widget JavaScript API and a custom websocket event, which is exactly the layer the Nodes 2.0 rewrite has been breaking for third-party packs. If the carousel or buttons render wrong or not at all, switch back to the legacy canvas before you file an issue. Also, the pause plays a bundled pause_option.mp3, and the code swallows any failure - if you're staring at a frozen queue wondering why it's silent, the browser probably blocked autoplay because you hadn't clicked the page yet. The node is paused regardless; scroll to it and press a number.
If you'd rather pick from a batch of already-generated images, the older tool in this lane is chrisgoringe's cg-image-picker (Image Chooser): right-click a preview, continue. Years more mileage on it. This one is narrower and cruder - three slots, three buttons, one pause. Narrower is sometimes the point.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| option_1 | IMAGE | — | |
| option_2 | IMAGE | — | |
| option_3 | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| selected_image | IMAGE | — |