FL Video Picker
Generate four videos in one batch, keep the two you actually like
- images
- selected_videos
- selection_info
- selected_indexes
Tiled sampling is the cheapest way to explore: one sampler call, a 2×2 mosaic of four variants, one decode. Actually using the results is the annoying part. FL Video Picker is the missing half - it cuts the decoded mosaic back into its four videos, plays them side by side, and pauses the queue while you tick the ones worth keeping.
If you've used the pack's FL_ImagePicker, this is the video-shaped sibling, and it's the same pattern as ComfyUI's own pause-and-prompt nodes: the run genuinely halts, so you're not burning GPU time while you decide.
How it works
The node slices the frame batch on pixel boundaries:
x_edges = [round(index * width / x_slices) for index in range(x_slices + 1)]
so a 1280×720 batch with x_slices=2, y_slices=2 becomes four 640×360 videos, in row-major order (top-left, top-right, bottom-left, bottom-right). Each slice keeps the full frame count - these are complete clips, not frames.
Then it writes a small H.264 preview per slice into ComfyUI's temp directory, pushes a websocket event to the frontend, and blocks on a threading.Event until you either confirm a selection or the timeout expires. The previews are downscaled (480px max side, 12fps max) so a long batch doesn't take forever to encode. On the way out - selected, cancelled, or timed out - the preview files are deleted.
Inputs and outputs
- images - the decoded mosaic. RGB or RGBA.
- x_slices / y_slices - the grid the mosaic was built with (1–8 each). These must match your sampler's tiling exactly, or you'll slice across the seams.
- frame_rate - used for the preview playback speed, the displayed duration, and downstream video assembly. Set it to the real FPS of the batch.
- timeout_seconds - how long the node waits for you (30–3600, default 300).
Outputs, and this is where it gets interesting:
- selected_videos - an IMAGE list, one item per clip you kept. Because it's a list, the rest of the graph runs once for each selection, so a video-combine or save node writes one file per picked clip.
- selection_info - a readable string, e.g.
Selected 2 of 4 videos: indices [0, 3]. - selected_indexes - the same thing as a comma-separated string, handy for filenames or logging.
The intended upstream is FL KSampler Plus/V2 with zero overlap - that's what makes the grid seamless and therefore sliceable. Audio is the one thing that can't ride along: a list output means the picker only carries pictures, so route your audio around it and pair it with each selected clip at the combine/save stage. The node's own tooltip says as much.
Install
Same pack, one install. Manager → search ComfyUI_Fill-Nodes (publisher machinedelusions), or:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
cd ComfyUI_Fill-Nodes && pip install -r requirements.txt
Restart ComfyUI. The picker also ships a small frontend extension (web/nodes/video/FL_VideoPicker.js) - that's the modal UI, and it has to load for the node to be usable. Hard-refresh the ComfyUI page if you just installed and the modal never appears; a stale browser cache is the usual culprit. The whole pack's requirements.txt is a long list of SDKs for its cloud/API nodes (google-cloud-storage, openai, anthropic, runwayml…). The picker needs none of them - it's Torch plus a couple of aiohttp routes.
Where people get bitten
- Cancel kills the run. "Cancel render" calls ComfyUI's interrupt, so it aborts the entire queue, not just this node. If you just want out of the node, pick something and move on, or let the timeout hit - same effect, same interrupted queue, but at least you know it's coming. The timeout path raises
Video selection timed out. - No selection ≠ empty output. If you let the timer run out or confirm nothing, you get all the clips back, with
No selection: returned all 4 videos. Silent in the sense that nothing errors - checkselection_infoif you care which path you took. - Mismatched grid.
x_slices/y_slicesthat don't match the mosaic layout give you a video made of quarter-clips of two neighbours. And if you left overlap on in the sampler, there will be visible seams in the slices no matter what you set here. - Slice size guard. The node refuses grids finer than the pixels available (
cannot create slices smaller than one pixel), so a 4×4 request on a 12px-tall preview will fail rather than silently clamp. - The waiting is real queue time. Nothing else in the graph advances while the modal is open. That's the feature, but don't leave a 300-second picker sitting there if a shared machine is queueing behind you - drop
timeout_secondsto 60 for quick passes.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| x_slices | INT | 21–8 | — |
| y_slices | INT | 21–8 | — |
| frame_rate | FLOAT | 24.001–120 | — |
| timeout_seconds | INT | 30030–3600 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| selected_videos | IMAGE | — |
| selection_info | STRING | — |
| selected_indexes | STRING | — |