LNL Frame Selector V3
The LNL Frame Selector You Actually Want
- images
- audio
- Current image
- Image Batch (in/out)
- Frame in
- Frame out
- Filename
- Frame count (rel)
- Frame count (abs)
- Current frame (rel)
- Current frame (abs)
- Frame rate (INT)
- Frame rate (FLOAT)
- audio
First, the naming trap, because it will absolutely catch you: this node's class is LNL_FrameSelectorV4 but it displays in the node menu as "LNL Frame Selector V3". Meanwhile the other node, LNL_FrameSelectorV3, is labeled "[Deprecated] ⛔️". Yes, it's backwards. The author's internal versioning lost a round to reality. What matters: V4 is the current, supported node - it's the one that fixed the old one's audio handling, and it's the one you should be using.
What it is
A video player that lives inside a ComfyUI node. Upload a video, scrub it, mark an In and Out point on the timeline, and the node hands you back that exact range as an IMAGE batch - plus the frame numbers, counts, frame rate, and trimmed audio. No leaving the graph, no opening a desktop editor just to cut 3 seconds out of a clip.
That matters more than it sounds. Video models like Wan i2v and LTX want a specific, short run of frames at a known resolution, and feeding them an entire source clip is how you burn VRAM on junk frames. (The KB's LTX notes even flag base resolution like 512x512 as the sweet spot for the small models.) This node is the trimming step that turns "random video I downloaded" into "exactly the frames I want to animate."
How it works
Front end and back end. The web player (web/VideoPlayer) handles playback, stepping, and the scrubber with In (green) and Out (red) markers. When you hit execute, the back end reads your current frame, In, Out, and stride straight off the node's widgets, then decodes frames with OpenCV's VideoCapture into a tensor and slices the range out. Audio is handled with ffmpeg, courtesy of the bundled imageio-ffmpeg binary - no system ffmpeg required.
The inputs that matter
You'll mostly touch three things:
video_path- a dropdown pre-scanned from yourComfyUI/inputfolder (mp4,webm,mkv). Defaults to the first video it finds.force_size- resizes output frames to a preset (512x512, 512x?, custom, etc.) so the batch matches what your downstream model expects.images- an optional IMAGE batch input. Connect one and the file picker disappears; your batch becomes the timeline. Comes with anfpsoverride, since batches don't carry a frame rate on their own.
pause_on_execute (+ pause_timeout) is worth a look too: it pauses the workflow after you set your trim so you can confirm before committing a long generation.
The outputs that matter
The one you're building around is Image Batch (in/out) - the trimmed range, wired straight into a sampler or a video pipeline. Current image gives you the single frame you're parked on. Then the metadata: Frame in / Frame out, Frame count (rel) (frames in your selection) and (abs) (total in the source), Current frame relative and absolute, Filename, and frame rate as both Frame rate (INT) and a precise Frame rate (FLOAT). Finally audio - and here's V4's upgrade: it's native ComfyUI AUDIO, properly aligned to the video timeline, padded or cropped to match duration, and trimmed to your In/Out range. The old node's audio was VHS_AUDIO, which only made sense if you'd also installed VideoHelperSuite. V4 works in a plain ComfyUI install.
Install
Search Manager for LNL Frame Selector, or:
cd ComfyUI/custom_nodes
git clone https://github.com/latenightlabs/ComfyUI-LNL.git
cd ComfyUI-LNL
pip install -r requirements.txt
Dependencies are modest - opencv-python~=4.12.0, imageio-ffmpeg, Pillow - and there are no model files to download. It's a utility, not a pipeline.
Troubleshooting
The classic gotcha is in the README: numeric outputs read 0 until the node is connected (directly or transitively) to an output node - ComfyUI doesn't compute value outputs that aren't consumed. So wire something downstream before you panic about zeroes. Audio comes back silent if the source has no audio track; that's normal, not a bug. And because OpenCV is pinned at 4.12, if you've force-upgraded it elsewhere, frame decoding can silently break - reinstall the pinned version to fix it.
One honest caveat: this pack is niche, with almost no Reddit footprint, so you won't find a wall of community write-ups vouching for it. It's a solid, self-contained tool that fills a real gap - trim frames without leaving the graph. Just remember to grab the node that says V3.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| video_path | STRING | — | |
| force_size | COMBO | 12 options: Disabled, Custom Height, Custom Width, Custom, 256x?, ?x256, +6 | |
| custom_width | INT | 5120–8192 | — |
| custom_height | INT | 5120–8192 | — |
| pause_on_execute | BOOLEAN | false | — |
| pause_timeout | INT | 10001–9999999 | — |
| imagesopt | IMAGE | — | |
| audioopt | AUDIO | — | |
| fpsopt | FLOAT | 0.00–240 | — |
| graph_idopt | STRING | — |
Outputs (12)
| Name | Type | Description |
|---|---|---|
| Current image | IMAGE | — |
| Image Batch (in/out) | IMAGE | — |
| Frame in | INT | — |
| Frame out | INT | — |
| Filename | STRING | — |
| Frame count (rel) | INT | — |
| Frame count (abs) | INT | — |
| Current frame (rel) | INT | — |
| Current frame (abs) | INT | — |
| Frame rate (INT) | INT | — |
| Frame rate (FLOAT) | FLOAT | — |
| audio | AUDIO | — |