FL Audio Reactive Speed
Let the beat control playback speed
- frames
- mask
- frames
The "speed-ramps on the beat" effect you see in a lot of edited music content: instead of a constant playback rate, this node time-remaps your frame sequence so moments with a strong envelope value play faster (or slower) than quiet moments - with genuine frame interpolation, not just raw frame repeats or skips, so the result doesn't stutter.
How it works
It builds a cumulative speed multiplier from envelope_json across the clip, then resamples the frame sequence along that time-warped timeline using your chosen interpolation method. Because the remapping is cumulative rather than per-frame-independent, a sustained loud section compounds into a genuinely faster stretch of footage rather than isolated single-frame jumps - closer to how a human editor would speed-ramp a clip by hand than to a simple frame-doubling trick.
The inputs and outputs that matter
Required: frames, envelope_json.
Optional: mask; base_speed (0–3, default 1 - the resting playback multiplier before any envelope is applied); speed_intensity (-3 to 3, default 0.5 - how much the envelope swings speed; negative values mean hits slow the footage down instead of speeding it up, for a "hit and hang" feel rather than a rush); interpolation (bilinear/bicubic/nearest, default bilinear - nearest is cheapest and blockiest, bicubic smoothest and slowest); invert.
Output: frames - and worth knowing up front: because this genuinely time-remaps the clip, your output frame count generally won't equal your input frame count 1:1. Plan the rest of your pipeline (audio sync, final export length) around that instead of assuming a passthrough.
How to install it
ComfyUI Manager: search ComfyUI_Fill-Nodes, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
then restart. No extra dependency for this node - the resampling is standard torch interpolation.
Common issues & troubleshooting
Output looks jittery or warped. Try bicubic instead of nearest, or dial back how extreme speed_intensity is - large swings between successive frames' effective speed are harder to interpolate cleanly, and nearest in particular has no smoothing to hide the seams.
Video no longer matches the audio's length. That's expected, not a bug - this node deliberately changes effective playback duration. If you need the video to stay locked to the original audio's length exactly, this isn't the right tool; it's built for creative speed-ramping, not duration-preserving effects.
Effect feels backwards - quiet sections speed up instead of loud ones. Check speed_intensity's sign and invert together; with a negative speed_intensity, louder envelope values push speed down, which is the intended "hit and freeze" mode rather than a bug, but it's easy to leave that setting from a previous experiment and get confused by the result.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | — | |
| envelope_json | STRING | — | |
| maskopt | IMAGE | — | |
| base_speedopt | FLOAT | 1.000–3 | — |
| speed_intensityopt | FLOAT | 0.50-3–3 | — |
| interpolationopt | COMBO | bilinear | 3 options: bilinear, bicubic, nearest |
| invertopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |