Nodes/ComfyUI-FFMPEGA/Frame Picker (FFMPEGA)
ComfyUI Node

Frame Picker (FFMPEGA)

Keep the 40 good frames out of 81 and drop the rest

By AEmotionStudio·Created 8 months ago·Updated a day ago· 16
Frame Picker (FFMPEGA)
  • images
  • audio
  • mask
  • images
  • video_path
  • audio
  • selected_indices
  • mask
pause_on_inputtrue
auto_open_editortrue
video_path
fps0.00

You generated 81 frames and about 50 of them are good. The first few wobble, two in the middle have a hand doing something anatomically creative, and the last dozen drift. Frame Picker is the node for that exact situation: it stops the queue, shows you every frame as a contact sheet, and lets you throw away the ones you don't want before anything downstream ever sees them.

How it works

When it runs, execution pauses and a grid of thumbnails opens in the ComfyUI UI. Click to select, Shift+click to grab a range, Ctrl+click to toggle one frame individually. Selected frames can be dragged into a different order. There are bulk tools for the boring parts: Select All, Deselect All, Invert, and Every Nth - which is the one you'll use most, because pulling every 4th frame is how you turn an 81-frame Wan clip into something punchier without re-rendering it.

Click Apply and the workflow continues with only your chosen frames. The node writes a temp video for the selection, passes the selected frames downstream as an IMAGE batch, and also hands off an audio output so the track travels with the clip.

The inputs that matter

Two booleans and two sources, basically:

  • pause_on_input - on by default. That's what makes it interactive. Turn it off and the node is a pure pass-through that hands all frames downstream unchanged, so you can leave it wired in on a batch run and flip it on when you want to curate.
  • auto_open_editor - if you'd rather click "Open Frame Picker" yourself than have the modal pop up. Handy when several of these are in one graph.
  • images or video_path - frames as an IMAGE batch, or a video file. Upstream connections always win over an uploaded video, so don't be surprised when a wired input overrides your upload.
  • mask - optional, and genuinely useful. Wire a MASK in and the node extracts the corresponding mask frames for whichever frames you keep, so your selection and your masks stay in sync instead of drifting by index.
  • fps - only for IMAGE input; 0 auto-detects from the source.

Outputs

images (your selection, in your order), video_path (temp file of those frames), audio, selected_indices (a string of which frames you kept, worth logging so a result is reproducible), and mask if you wired one in. The reordering is the underrated part - because the output is just the frames in the order you arranged them, you can also use this as a cheap edit: reverse a section, or pick and sequence a handful of frames into a slideshow-style sequence.

Install

ComfyUI Manager → search ComfyUI-FFMPEGA → Install, or the usual clone:

cd ComfyUI/custom_nodes
git clone https://github.com/AEmotionStudio/ComfyUI-FFMPEGA.git
pip install -r ComfyUI-FFMPEGA/requirements.txt

Restart ComfyUI. No model downloads here - it's frames and ffmpeg, and FFMPEG does need to be on PATH (that's the pack's baseline requirement, same for every node in it).

Where people get burned

It's an interactive gate, not a background node. Same trap as the pack's other pause nodes: a queued run stops at this node until a human clicks Apply. Unattended batch runs and API jobs will simply hang. Set pause_on_input off for those.

Dropping frames changes timing, not just content. If you keep 20 of 81 frames and pass them to a video-saving node that encodes at the source fps, you get a clip that's a fifth as long. That's usually what you want - but if you meant "keep these frames and the same duration," you need to be explicit about fps downstream, and you'll probably want interpolation rather than a slideshow feel.

Index drift downstream. If anything after this node assumes frame n of the original batch, it's now wrong. Feed masks through the mask input rather than rebuilding them from indices, and you sidestep most of it.

CategoryFFMPEGA

Inputs (7)

NameTypeDefaultDescription
pause_on_inputBOOLEANtrueWhen ON, pauses the workflow and shows the frame picker. Click Apply to pass selected frames downstream. When OFF, passes all frames unchanged.
auto_open_editorBOOLEANtrueWhen ON, the frame picker modal auto-opens when the workflow pauses. When OFF, click 'Open Frame Picker' manually.
imagesoptIMAGEVideo frames as IMAGE tensor batch [N,H,W,3].
video_pathoptSTRINGPath to a video file on disk. Upstream connections always win over uploaded video.
audiooptAUDIOAudio track to associate with the video.
fpsoptFLOAT0.000–120Framerate for IMAGE tensor input. 0 = auto-detect from source.
maskoptMASKOptional upstream MASK pass-through. When connected, selected frames extract corresponding mask frames.

Outputs (5)

NameTypeDescription
imagesIMAGE
video_pathSTRING
audioAUDIO
selected_indicesSTRING
maskMASK