Nodes/Eden.art nodesuite/VideoFrameSelector
ComfyUI Node Runs on cloud

VideoFrameSelector

Hand-pick the frames your video-to-video actually needs

By edenartlabΒ·Created 3 years agoΒ·Updated 6 months agoΒ· 119
VideoFrameSelector
  • input_frames
  • video_info
  • Selected_frames
  • multiplier
  • frame_rate
β—„output_fps24.00β–Ί
β—„target_video_speedup_factor1.00β–Ί
β—„min_source_sampling_fps8β–Ί
β—„max_source_sampling_fps12β–Ί
β—„frame_load_cap0β–Ί

If you've ever loaded a 30-second video into ComfyUI for a frame-by-frame img2img pass, you know the two-way trap: run every frame and you're waiting hours, run every Nth frame and your motion stutters. VideoFrameSelector is Eden.art's attempt to automate the "which frames actually matter" decision - and it's the rare node that understands the real bottleneck isn't frame count, it's where the motion is.

Here's the honest caveat up front: this node expects a VHS_VIDEOINFO input, which comes from the Video Helper Suite pack, and it uses that metadata to compute which frames to keep. So it's not a drop-in standalone loader - it's a downstream selection stage for a workflow that's already loading video through VHS.

How it works

You feed it the frames you've already loaded plus the video metadata, and it computes an optimal subset. The core idea: pick a source sampling rate that sits within your chosen bounds (min_source_sampling_fps / max_source_sampling_fps, defaulting to 8–12 fps), then work out a clean integer multiplier that relates that source rate to your target output_fps and target_video_speedup_factor. Frames are selected on that schedule rather than every frame, which is what makes the node "temporal optimization" in the pack's own words.

The multiplier output is the interesting one - it's the ratio between source and target rates, and it's exactly the number you'd hand to a frame-interpolation node (like VHS's own) to expand the selected frames back up to a smooth output. Select a few frames, run img2img on those, interpolate the rest, and you've turned a 300-frame job into a 40-frame job with barely any visible quality loss.

The inputs that matter

  • input_frames - your already-loaded image batch.
  • video_info - VHS_VIDEOINFO metadata. Without Video Helper Suite installed, this socket won't even resolve.
  • output_fps (default 24) - target frames per second.
  • target_video_speedup_factor (default 1) - 0.5 slows the video to half speed (more frames selected per second of footage), 2.0 speeds it up.
  • min/max_source_sampling_fps (8–12 default) - the window the node searches for a clean sampling rate.
  • frame_load_cap (default 0) - hard cap on frames returned; 0 means no cap. Use it to force a workflow to stay within a compute budget.

Outputs: Selected_frames (the IMAGE batch you actually process), multiplier (INT), and frame_rate (FLOAT, the effective output fps after speed adjustment).

Installing

It's one node in edenartlab/eden_comfy_pipelines (Eden.art nodesuite) - but you also need Video Helper Suite (VHS) for the video_info input, or this node is a dead end. Both install the same way:

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

For VHS, use ComfyUI Manager and search "VideoHelperSuite". Also make sure ffmpeg is on your PATH - the Eden pack's video loading uses it via shutil.which("ffmpeg").

Gotchas

The min/max sampling bounds are clamped to 1–24, so don't try to sample above 24 fps with this node - the math isn't built for it. And remember the flow: this selects from frames you've already loaded, so if you loaded the video at too-low an fps upstream, the "selection" can't invent frames you don't have - you'll just get a subset of what VHS gave you. Load with a sensible rate, then let this node do the thinning.

CategoryEden 🌱

Inputs (7)

NameTypeDefaultDescription
input_framesIMAGEβ€”
video_infoVHS_VIDEOINFOβ€”
output_fpsFLOAT24.001–60β€”
target_video_speedup_factorFLOAT1.000.1–10β€”
min_source_sampling_fpsINT81–24β€”
max_source_sampling_fpsINT121–24β€”
frame_load_capINT00–1000β€”

Outputs (3)

NameTypeDescription
Selected_framesIMAGEβ€”
multiplierINTβ€”
frame_rateFLOATβ€”