⏩ S42 CutFlow Speed Ramp
The CapCut-style speed ramp that lives inside your node graph
- clip
- clip
- frame_count
- info
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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | IMAGE | Video clip to apply speed ramping to. | |
| preset | COMBO | custom | Speed 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_curve | STRING | 0:1.0, 12:0.25:ease_in_out, 36:0.25, 48:1.0:ease_in_out | Custom 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_speed | FLOAT | 1.000.1–10 | Global speed multiplier applied on top of the curve. 1.0 = no change. |
| interpolation | COMBO | blend | 'blend' = smooth linear interpolation between frames (recommended). 'duplicate' = nearest frame, faster but may look jittery. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| clip | IMAGE | — |
| frame_count | INT | — |
| info | STRING | — |