ComfyUI Node

VP Image Chooser

The 'pick which frame survives' popup, minus the Easy-Use baggage

By pmarmotte2·Created 4 months ago·Updated 4 months ago· 3
VP Image Chooser
  • images
  • image
modeAlways Pause
preview_rescale1.00
auto_pickfalse

Here's a workflow moment you've definitely had: the sampler spat out a batch of candidate frames, and only one of them is good enough to be the next scene's anchor. VP Image Chooser is the node that pauses the queue, pops up a preview window, and waits for you to click the winner. It's the pack's human-in-the-loop node - and its own description is refreshingly honest about the one thing it doesn't do: it previews the images without saving them to the ComfyUI output directory.

This is a re-implementation of the classic image-chooser idea, with one important difference: it has its own frontend and zero dependency on ComfyUI-Easy-Use. Most chooser tutorials you'll find assume Easy Use is installed. This one doesn't. If you've avoided that pack, or you want a chooser that doesn't drag in half of Easy-Use's machinery, this is the standalone version.

How it works

Under the hood it subclasses ComfyUI's own PreviewImage and uses its INPUT_IS_LIST mode, so it can take a batch of images and let you click one. When auto_pick is off, it saves the previews, pushes them to its own frontend over a websocket, and then blocks - politely, on an event - until you either click a selection or cancel. Cancel raises a cancel that interrupts the whole run, which is the intended "nope, regenerate that" path. When auto_pick is on, it skips the dialog entirely, grabs a random frame, and returns immediately.

There's a subtlety worth knowing: in Keep Last Selection mode it remembers your pick and reuses it on the next run when possible - so you can approve a frame once and let the loop keep going without re-clicking. Always Pause is the default, and it does what it says.

Inputs and outputs

  • mode - Always Pause / Keep Last Selection
  • preview_rescale (FLOAT, 0.05–1.0) - shrink the preview for huge batches; 1.0 shows full size
  • images (IMAGE, optional) - the batch of candidates
  • auto_pick (BOOLEAN, optional) - pick a random frame without UI
  • image (IMAGE) - the chosen frame, ready to wire downstream

It's marked as an output node, which in ComfyUI terms means it's treated as a run destination - the engine won't skip it on re-runs, which is exactly what you want for something that blocks for user input.

Where it fits in the loop

In the Video Progression wiring, it sits after your generation/edit branch and before Whole Video: the sampler makes candidates, you pick the keeper, and only that frame gets appended to the story. The README's suggested link is Story Scene Switch.AutoFlagauto_pick, which turns the whole thing into an unattended loop when you're auto-generating, and back into a decision point when you're not. That's the neat part of this pack's design - the same node serves both the "I want to babysit" and "I don't" runs.

Install and the one gotcha that bites everyone

Install is shared with the pack:

cd ComfyUI/custom_nodes
git clone https://github.com/pmarmotte2/Comfyui-Video-Progression

then restart. Hard-refresh the browser (Ctrl+F5) - the README is emphatic about this. The chooser ships its own frontend files, and if ComfyUI is still serving the old cached page the dialog simply never opens. When people report "the chooser doesn't appear," that's the fix, every time. Also: if images isn't connected, the node returns a 1×1 blank tensor rather than crashing, which is graceful but easy to mistake for a bug - your downstream nodes will just get a tiny gray frame. And if you're feeding it a frame batch, remember the output is your selection, not the batch; pipe the batch into images, not into whatever's downstream.

Categorystory/utility

Inputs (4)

NameTypeDefaultDescription
modeCOMBOAlways Pause2 options: Always Pause, Keep Last Selection
preview_rescaleFLOAT1.000.05–1
imagesoptIMAGE
auto_pickoptBOOLEANfalse

Outputs (1)

NameTypeDescription
imageIMAGE