Nodes/ComfyUI-DownsampleFPS/🕒 Downsample FPS
ComfyUI Node

🕒 Downsample FPS

Your 48 fps video wants to be 24 fps — this node eats the extra frames

By Austat·Created 9 months ago·Updated 8 months ago· 1
🕒 Downsample FPS
  • frames
  • downsampled_frames
â—„input_fps48â–º
â—„target_fps24â–º
◄method▾►
â—„cpu_threadsautoâ–º

Most of the video-adjacent tooling in ComfyUI is obsessed with making motion smoother - frame interpolation, retiming, upsampling to a higher FPS. This node is the unfashionable inverse. It takes a frame sequence at, say, 48 fps and gives you back a 24 fps sequence, with a few different ideas about which frames to keep. If you've generated or captured video at a higher rate than you actually want to deliver, that's the job. It's CPU-only, downloads no models, and runs in seconds - it's the boring, dependable utility that sits quietly before your video combine node.

The honest use case: you want the 24 fps film cadence instead of the hyper-smooth 48/60 fps look, or you're feeding a pipeline where fewer frames is strictly better. Every frame you drop here is a frame you don't have to upscale or encode. Think of it as temporal downscaling - the same budget logic as rendering at 480p and upscaling, just applied to time.

What it actually does

The node takes an IMAGE tensor in - generated frames from LTX, Wan, AnimateDiff, or frames loaded from a video - plus input_fps and target_fps (both integers, 1–240, defaults 48 → 24). Then method decides how the frames get culled:

  • Frame dropping - just picks frames at even integer intervals. Sharpest, choppiest, fastest. This is the "no motion understanding at all" option.
  • Frame blending (CPU) - averages neighboring frames instead of discarding them. It even does a bit of scene-cut detection and gamma-corrected per-channel blending, so a hard cut doesn't smear into ghosting. Mild softness, far less stutter.
  • Optical flow (CPU) - computes dense RLOF flow and warps each frame halfway toward the next. It can genuinely synthesize an intermediate-looking frame, but flow failures produce warpy stretching around edges and fast motion.
  • Motion‑compensated (CPU) - the most advanced: Farneback flow in both directions, warps the first frame forward and the second backward, then blends the two warped views weighted by flow magnitude. Uses time-accurate float indices, so 48→24 isn't a naive "every other frame" but a true retime.

The only other input that matters is cpu_threads - auto (use all cores) or a fixed count up to your core count. Leave it on auto.

The single output is downsampled_frames, an IMAGE tensor of the same shape and batch of frames, just fewer of them. Wire it into whatever video combine node you already use (VHS-style VHS_VideoCombine is the usual one) and encode at target_fps. One quiet gotcha baked into the code: if target_fps >= input_fps the node just passes the frames through untouched - it refuses to upsample, so don't reach for it when you actually need interpolation.

Installing it

Either grab it in ComfyUI Manager (search "DownsampleFPS"), or:

cd ComfyUI/custom_nodes
git clone https://github.com/Austat/ComfyUI-DownsampleFPS

Then restart ComfyUI. Requirements are torch, opencv-python, numpy, and tqdm - no model files, no weights, no VRAM pressure. This is one of the few nodes where the setup really is that short.

The one trap

Here's where people get burned, and it's buried in the source rather than the README. The Optical flow method calls cv2.optflow.createOptFlow_DenseRLOF(), which lives in OpenCV's contrib modules - but the pack's requirements.txt only installs plain opencv-python. If you install fresh and pick Optical flow, you can hit an AttributeError because cv2.optflow doesn't exist. Fix it with:

pip install opencv-contrib-python

The other three methods use only core OpenCV (Farneback is in the standard build), so they work out of the box. If you're deciding between the flow methods anyway, Motion‑compensated is the one I'd actually reach for - it's the same Farneback machinery as Optical flow but blends two warped views, which hides the worst of the warpy artifacts. And remember the failure modes are designed in: frame dropping fails by being choppy, blending fails by ghosting. There's no free lunch, just the tradeoff you picked.

The pack is small and quiet - don't expect a wiki of community war stories, because nobody's really out there reporting them. It does one thing, does it on CPU in seconds, and gets out of your way.

CategoryVideo

Inputs (5)

NameTypeDefaultDescription
framesIMAGE—
input_fpsINT481–240—
target_fpsINT241–240—
methodCOMBO4 options: Frame dropping, Frame blending (CPU), Optical flow (CPU), Motion‑compensated (CPU)
cpu_threadsCOMBOauto5 options: auto, 1, 2, 3, 4

Outputs (1)

NameTypeDescription
downsampled_framesIMAGE—