VP Image Chooser
The 'pick which frame survives' popup, minus the Easy-Use baggage
- images
- image
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 Selectionpreview_rescale(FLOAT, 0.05–1.0) - shrink the preview for huge batches; 1.0 shows full sizeimages(IMAGE, optional) - the batch of candidatesauto_pick(BOOLEAN, optional) - pick a random frame without UIimage(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.AutoFlag → auto_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.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | Always Pause | 2 options: Always Pause, Keep Last Selection |
| preview_rescale | FLOAT | 1.000.05–1 | — |
| imagesopt | IMAGE | — | |
| auto_pickopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |