Amp_audio_Normalized
Turn a soundtrack into a per-frame value for audio-reactive animation
- audio
- normalized_amp
This is the pack's building block for audio-reactive animation - the technique where music or voice drives visual motion, ControlNet strength, or IPAdapter weight instead of a hand-typed curve. It's a small node with one job: take an AUDIO input and turn it into a single FLOAT, normalized_amp, representing loudness at a given point in the track. Wire it up correctly and you can make ControlNet strength or motion intensity pulse with a beat instead of running flat through an entire clip.
This exact pattern - separating audio into stems and using amplitude to drive keyframe transitions, ControlNet strength, and motion amount - is a real, still-active corner of the community, mostly associated with Yvann's dedicated audio-reactive node pack and used heavily in AnimateDiff-era music-video work; one recent example described pushing a ControlNet multiplier from 1.1 to 1.3 and sampler denoise from 0.55 to 0.65 specifically to get audio-driven motion rather than warping artifacts. Amp_audio_Normalized doesn't do the stem separation or the full pipeline those dedicated packs offer, but it gives you the same core primitive - audio in, a usable float out - without installing a second pack, if all you need is amplitude rather than isolated vocals/drums/bass.
The parameters: frame_rate (0–240, default 12) sets how the node chunks the audio timeline into frames - match this to your actual output video's frame rate or the amplitude values won't line up with what you're animating. operation (avg / max / sum, default max) controls how loudness gets summarized within each frame's audio window: avg gives you a smoother, less twitchy curve; max catches transient peaks (a drum hit, a sudden loud moment) even if they're brief, which is why it's the default for anything meant to look reactive rather than smoothed; sum accumulates total energy across the window, which behaves more like a loudness-over-time measure than a peak detector. Two optional fields let you work on a slice of a longer track instead of the whole thing: start_frame (default 0, can go negative) and limit_frames (default 0, meaning no limit - set it to cap how many frames get processed).
The output is a single FLOAT, not a schedule object - so the natural place to send it is AD_sch_value's territory, or directly into any node in your graph that takes a plain float, like a ControlNet strength or an IPAdapter weight input, if you want that one value to update per-frame across an animation rather than staying static for the whole render.
Installing it: ComfyUI Manager, search "ComfyUI-Apt_Preset," or clone directly - cd ComfyUI/custom_nodes && git clone https://github.com/cardenluo/ComfyUI-Apt_Preset - then install.bat and restart. No models to download for this node; it's signal processing on the audio you already have.
Troubleshooting: if the resulting values feel disconnected from your actual video timing, check frame_rate first - it needs to match your render's actual frame rate, not just be "close enough," or the amplitude-to-frame mapping drifts over a longer clip. If the curve feels too jumpy to be usable directly, switch operation from max to avg before adding smoothing elsewhere in your graph - that one change often gets you most of the way to a workable curve on its own.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| frame_rate | INT | 120–240 | — |
| operation | COMBO | max | 3 options: avg, max, sum |
| start_frameopt | INT | 0-100000–100000 | — |
| limit_framesopt | INT | 00–100000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| normalized_amp | FLOAT | — |