Nodes/ComfyUI-Amage/Amage FPS Converter
ComfyUI Node

Amage FPS Converter

The 'interpolate' here is a lie — a straight talk about Amage FPS Converter

By Sampkao·Created 11 months ago·Updated 7 months ago· 1
Amage FPS Converter
  • images
  • IMAGE
original_fps25.00
target_fps16.00
methodinterpolate

Amage FPS Converter is the node you reach for when your video frames are the wrong count for what comes next. It takes an IMAGE batch, pretends the batch was shot at some original_fps, and resamples it so the same clip plays at target_fps. It lives in the Amage/Video category of the small ComfyUI-Amage pack, and honestly - it's the most interesting node in that pack, mostly because of what it doesn't do.

Why you'd actually use it

ComfyUI's video-save nodes (VHS Video Combine, SaveVideo) already have a frames-per-second field, so you can "fix" playback speed without touching frames at all. You reach for a resampler like this when the number of frames is the problem: you generated with AnimateDiff at 8 fps and want a 2-second clip at 16 fps (frame count matters), or you need to drop a 25 fps source to match a 16 fps target. This node is a frame-count switcher, not a codec tool.

How it works

The mechanism is one line of math: ratio = target_fps / original_fps, then it resamples the batch accordingly.

  • downsample - picks round(total_frames × ratio) evenly-spaced frames with np.linspace. This is clean timing-wise: frames stay evenly distributed, none of the stutter you'd get from naive stepping.
  • duplicate - repeats each frame round(ratio) times. Simple, zero thinking, exactly what it says.
  • interpolate - only runs when ratio > 1 and you have 2+ frames. It inserts round(ratio - 1) frames between each pair, and those frames are just linear alpha blends of the neighbors (img1*(1-alpha) + img2*alpha).

That last one is the trap, so let's be blunt: this "interpolate" is a crossfade, not interpolation. No motion estimation, no optical flow. Moving subjects get smeary double-exposure ghosts, which is exactly the artifact RIFE and the proper frame-interpolation packs exist to fix. If you want real interpolation for slow-mo or smoother motion, use RIFE or AnimateDiff-Evolved's interpolator - the KB's upscaling notes use RIFE as the standard companion for this exact job. This node's "interpolate" is for when a cheap blend is good enough to hit a frame budget.

Where people get burned

Two integer-rounding quirks hide in the source. First, original_fps and target_fps are both rounded to integers before anything runs. Second, a common case like 24 → 30 gives ratio = 1.25, which round()s to 1 - so duplicate does literally nothing (repeat every frame once) and interpolate inserts one blended frame per gap, overshooting to ~48 fps. Odd ratios produce weird results; stick to clean ratios (2x, 1.5x, half) and check the output frame count. Also note interpolate silently returns the input unchanged if ratio <= 1 - you asked to "interpolate" a slowdown and it just passes frames through without telling you.

The inputs that matter

You set four things: images (the frame batch - feed it from a video loader or your AnimateDiff/Wan output), original_fps (your source rate; the node trusts you, it doesn't sniff it), target_fps (what you want), and method (downsample / duplicate / interpolate, default interpolate - the one I'd not default to). Output is a single IMAGE batch, same shape otherwise, which wires straight into Video Combine or any node that takes frames.

Install

It's a ComfyUI Manager search away - search "Amage" and install the ComfyUI-Amage pack, then restart. Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/Sampkao/ComfyUI-Amage.git
# restart ComfyUI

One pack-wide gotcha: there's no requirements.txt, and the pack imports transformers at module load (it's only used by the Amage STT node). If transformers isn't installed in your ComfyUI Python env, all four nodes in the pack fail to load, FPS Converter included. pip install transformers into the ComfyUI venv fixes it.

Keep the batch, check the frame count, and don't expect RIFE-quality motion from a crossfade - and it'll do a perfectly honest job of re-timing your clips.

CategoryAmage/Video

Inputs (4)

NameTypeDefaultDescription
imagesIMAGE
original_fpsFLOAT25.000.1–120
target_fpsFLOAT16.000.1–120
methodCOMBOinterpolate3 options: downsample, duplicate, interpolate

Outputs (1)

NameTypeDescription
IMAGEIMAGE