Video Picker
Keep the take you like, drop the rest
- batch
- video
Generate several clips and you need a way to keep just one. That's this node - the video counterpart to ComfyTV's Image Picker, and it's so core to the pack's flow that it auto-spawns after a Video Stage run. You wire your generated clips in, click the one you want in the node body, and that clip is what flows downstream.
How it works
Video Picker is a Compose stage with a batch input that accepts COMFYTV_VIDEO. Every clip that arrives gets appended to an internal pool - deduplicated by URL, so re-running the upstream stage doesn't double up your choices, and it survives disconnects and regeneration. The pool lives on the node as JSON (the hidden pool field), and there's a Clear button when you want to start over.
There's no Run button here. Clicking a clip sets the hidden selected_index (1-based) and re-emits the chosen clip as the video output instantly, so downstream stages update without you touching the queue. That's the whole point: pick, review, pick again - no rendering.
The inputs that actually matter:
- batch - upstream video source; each generated clip is added to the pool.
- selected_index - 1 to 999, but you never type it; clicking a thumbnail sets it.
- pool - the accumulated JSON list, managed by the UI.
The workflow it enables
This is the classic "generate variants, keep the best" pattern: a Video Stage with a few different seeds or prompts, all feeding one Picker, and you click your winner. It's also how multi-shot Director timelines select per-clip results. Because everything is snapshot-based, your picks persist with the project - close and reopen ComfyUI and the pool is still there, which is something native in-memory tensors can't do.
One honest gotcha: nothing leaves the node until you actually click a clip - hovering doesn't select. And if the pool fills with stale takes from earlier experiments, hit Clear and re-run rather than fighting the accumulated JSON.
Installing and quirks
Install is pack-standard: git clone https://github.com/jtydhr88/ComfyTV into ComfyUI/custom_nodes, restart. It shows up under ComfyTV → Compose. No models, no heavy dependencies - this one is pure project plumbing.
The output is a COMFYTV_VIDEO snapshot, so feeding your chosen clip into native ComfyUI nodes means a ← ComfyTV Video Bridge in between. If you only ever work inside ComfyTV, you won't need it - Picker output feeds Clip, Crop, Transition, or the Director timeline directly. It's a small node with a small job, but once you're generating batches of clips it becomes the one you reach for most.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| selected_index | INT | 11–999 | Which clip to extract (1-indexed). Hidden — set by clicking a clip. |
| pool | STRING | Accumulated video pool (JSON). Managed by the UI: new upstream clips are appended (deduped by URL) and survive regeneration/disconnect; emptied by the Clear button. | |
| batchopt | COMFYTV_VIDEO | Upstream video source. Each generated clip is appended to the pool. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |