Nodes/S42 CutFlow/⏩ S42 CutFlow Speed Ramp
ComfyUI Node

⏩ S42 CutFlow Speed Ramp

The CapCut-style speed ramp that lives inside your node graph

By GeekyGhost·Created 6 months ago·Updated 4 months ago· 3
⏩ S42 CutFlow Speed Ramp
  • clip
  • clip
  • frame_count
  • info
presetcustom
speed_curve0:1.0, 12:0.25:ease_in_out, 36:0.25, 48:1.0:ease_in_out
global_speed1.00
interpolationblend

Speed ramping is the signature move of modern short-form video - that burst into slow-motion in the middle of a clip that every TikTok and Reel ends up using. S42CF_SpeedRamp is GeekyGhost's take on it for ComfyUI: pick a preset like bullet_time, or write your own speed curve as a keyframe string, and the node re-times your clip frame by frame. No leaving the graph, no external editor.

Presets first

Seven presets, and bullet_time alone covers most of what people actually want: normal speed → very slow (0.15×) in the middle → back to normal. That's the "hero moment" look. The full list:

  • bullet_time - normal → 0.15× slow → normal. The dramatic reveal.
  • montage - fast → slow → fast. Dynamic edits, travel montages.
  • hero_moment - slow build → near-freeze → resume. Sports highlights, climactic beats.
  • whip_pan - slow → 3× fast → slow. The quick energy cut.
  • ramp_up / ramp_down - gradual acceleration or deceleration.

If you set preset to custom, it uses the speed_curve string instead. The format is frame:speed_multiplier:easing, comma-separated: 0:1.0, 12:0.25:ease_in, 36:0.25, 48:1.0:ease_out. That example reads "normal, ease into quarter speed by frame 12, hold it to frame 36, ease back to full speed by frame 48." The easing options are the same ten (linear, ease_in, ease_out, ease_in_out, the cubic variants, elastic, bounce) shared across the pack. global_speed is a multiplier on top of the whole curve - 0.5 makes the entire ramp half speed, 2.0 doubles it - handy for nudging a preset without rewriting the curve.

The mechanism

Under the hood it builds a per-frame speed array from your curve (interpolating between keyframes with the requested easing), then maps output frames back to source frames and either blends between them (interpolation=blend, smooth, recommended) or snaps to the nearest (duplicate, faster but jittery). Because it's pure frame resampling on a standard IMAGE batch, the output length changes - the frame_count output tells you how many frames you ended up with, and the info string reports the average speed, which is a great sanity check for "did this preset actually slow down like I thought."

Installing it

One-time pack install:

cd ComfyUI/custom_nodes/
git clone https://github.com/GeekyGhost/S42-CutFlow.git
pip install -r S42-CutFlow/requirements.txt   # Windows portable: python_embeded\python.exe -m pip

Or ComfyUI Manager, search S42 CutFlow. Restart and it's under S42 CutFlow/Clip Ops.

Gotchas

The honest caveats. First, this is frame resampling, not motion interpolation - blend crossfades between frames, which looks smooth for most footage but will ghost on fast motion. If you need true interpolated slow-mo, this isn't the node; pair it with a real interpolation pass for that. Second, because speed change alters frame count, put the ramp before anything that needs a fixed length (audio sync, segmenting) or wire the frame_count output downstream to keep things consistent. Third, after a big speed change you often see stutter; the pack's own Frame Blend node is the intended companion for smoothing that. And if you're ramping LTX/Wan output, trim the junk frames first - ramping warmup artifacts just gives you slow-motion warmup artifacts.

CategoryS42 CutFlow/Clip Ops

Inputs (5)

NameTypeDefaultDescription
clipIMAGEVideo clip to apply speed ramping to.
presetCOMBOcustomSpeed curve preset. 'custom' uses the speed_curve keyframe string. 'montage' = fast-slow-fast for dynamic edits. 'bullet_time' = dramatic slow-motion in center. 'hero_moment' = slow build to freeze frame. 'whip_pan' = fast through middle. 'ramp_up'/'ramp_down' = gradual acceleration/deceleration.
speed_curveSTRING0:1.0, 12:0.25:ease_in_out, 36:0.25, 48:1.0:ease_in_outCustom speed curve as keyframe string. Format: 'frame:speed_multiplier:easing' Example: '0:1.0, 12:0.25:ease_in, 36:0.25, 48:1.0:ease_out' Speed values: 0.1=very slow, 0.5=half speed, 1.0=normal, 2.0=double. Only used when preset='custom'.
global_speedFLOAT1.000.1–10Global speed multiplier applied on top of the curve. 1.0 = no change.
interpolationCOMBOblend'blend' = smooth linear interpolation between frames (recommended). 'duplicate' = nearest frame, faster but may look jittery.

Outputs (3)

NameTypeDescription
clipIMAGE
frame_countINT
infoSTRING