Lazy Multi Frame Select
Pause your video workflow and hand-pick up to 6 frames
- images
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
What it actually is
You generate a video, VAE Decode spits out a batch of frames, and you want a handful of stills to do something with - re-roll one as img2img, feed the first and last frames back into the next clip, upscale a hero frame. Normally that means decoding twice or eyeballing a strip of tiny previews and guessing indices. Lazy Multi Frame Select skips all that: it shows you every frame in a grid right on the node, pauses the workflow, and waits for you to click up to six. Then it hands those out as image_1 through image_6 and the rest of the graph keeps going.
It's part of the vsaan212 Workflow Utilities pack, a grab-bag of "lazy" nodes for video pipelines (MiniMax, Wan, LTX) that all live under the vsaan212/lazy menu. This one is a pure interactive utility - no models, no API calls, no keys. It does exactly one thing and mostly gets out of the way.
How it works
The fun part is that ComfyUI normally runs a queue to completion without stopping for your input. This node is the exception, and the mechanism is worth knowing because it explains every gotcha below.
- It's an output node whose
IS_CHANGEDreturnsfloat("NaN")- the always-rerun trick from the plumbing playbook. It fires on every execution no matter what, which is what lets it reliably stop the graph. - When it runs, it copies the batch to CPU, saves each frame as a small temp thumbnail (256px max), and pushes a
vsaan212-multi-frame-selectevent to the browser. Then it just… blocks, in a thread waiting on an event, polling every quarter-second to make sure the run wasn't interrupted. - On the browser side, a small JS extension (
js/lazy_multi_frame_select.js) renders the grid as a DOM widget with Continue / Clear / Cancel. Click Continue and the frontend POSTs your chosen indices to/vsaan212/multi-frame-select, waking the waiting thread. The node slices those frames out of the batch and returns them in click order. - Cancel does what ComfyUI's stop button does - interrupts the whole prompt.
The "lazy" in the name is doing real work: the frames are already decoded, so you're paying for a selection, not a second decode.
Inputs and outputs that matter
There's exactly one input: images (IMAGE) - the batch from VAE Decode, or really any IMAGE batch. The author's tooltip says it plainly: "IMAGE batch from VAE Decode (video frames)." A single image counts as a batch of one.
Outputs are the six sockets image_1 … image_6. Selection is in click order, not frame order - the first frame you click is image_1, the second is image_2, and so on up to six. Unused slots come out as None, which is safe for optional IMAGE inputs downstream. Don't get the numbering confused: the little numbers on the thumbnails are 1-based frame indices, while the gold badges on top show your output slot. The pack's docs recommend the natural MiniMax H3 use: image_1 → first_frame, image_2 → last_frame, image_3–image_6 → reference images for I2V/FL2V/R2V. Or just feed any slot to an upscaler or a Save Image.
Install
Two ways, same as any custom node:
- ComfyUI Manager: search
vsaan212/Vsaan212-workflow-utilitiesand click Install. - Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/vsaan212/Vsaan212-workflow-utilities
Restart ComfyUI either way - this node needs its JS extension loaded, and the pack warns that a frontend refresh (R) isn't always enough the first time. No model files to download. The pack's requirements.txt lists heavy stuff (transformers, qwen-vl-utils) for its LazyPrompt node, but this node itself only touches torch, Pillow and numpy - everything ComfyUI already ships.
Common issues
- Grid empty or Continue does nothing. Almost always the JS didn't load. Restart ComfyUI after installing or updating the pack; this is the README's #1 troubleshooting entry for a reason.
- Don't queue a second prompt to "confirm" your pick. The run is already paused and waiting - Continue is what unblocks it. Queuing again starts a whole new wait, and thanks to the always-rerun behavior the node will stop the graph on every single run until you make a choice.
- Don't wire downstream nodes expecting all six outputs. Unused slots are
None. If a consumer needs a real image and you only picked two frames, feed it one of the filled slots. - It blocks the queue. That's the point - but don't put this in a workflow you intend to leave running unattended overnight, because it will park at this node waiting for a human.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | IMAGE batch from VAE Decode (video frames). The node pauses until you pick up to 6 frames. | |
| show_every | INT | 41–64 | Show every Nth frame in the grid (1 = all frames). Default 4. The last frame is always included. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| image_1 | IMAGE | — |
| image_2 | IMAGE | — |
| image_3 | IMAGE | — |
| image_4 | IMAGE | — |
| image_5 | IMAGE | — |
| image_6 | IMAGE | — |