Audio Normalize π
Make It Loud Without Making It Clip
- audio_samples
- audio
- peak_db
- rms_db
- summary
Every audio clip that comes out of a generator is a gamble: either whisper-quiet or slamming into the ceiling. Audio Normalize is the "make it consistent" node - it adjusts a clip's amplitude to a target level you pick, in peak or RMS mode, with DC-offset cleanup and soft-clip protection. It's the utility every audio-in-ComfyUI workflow ends up needing, because generated audio is rarely mixed to a sane level on its own.
The key choice is normalize_mode, and understanding it is half the battle:
- peak - scales so the loudest sample hits your
target_db. Safe and simple; nothing will clip, but two different clips normalized to the same peak can still feel very different in loudness, because the average level isn't controlled. - rms - scales so the average energy (root mean square) hits the target. This is the closer match to how loud a clip actually sounds. Two clips normalized to the same RMS genuinely sit at similar perceived volume.
target_db defaults to -3, which is the classic "loud but with headroom" sweet spot for a single track. Go lower (like -14) if you're normalizing stems that will be mixed together later - you don't want to blow the headroom before the mixer gets them. That's the most common beginner mistake: normalizing each stem to -3 and then summing four of them into an instant wall of clipping.
The other two toggles are mostly set-and-forget: remove_dc_offset strips a DC bias that some generators leave behind (audible as a subtle thump or uneven waveform), and soft_clip applies gentle limiting at the output so overshoots are rounded rather than harshly sliced. Leave both on.
The outputs
Beyond the processed audio, it returns peak_db and rms_db - the actual measured levels of the output, not the target - plus a summary string. That's genuinely useful: wire peak_db into a display node and you get a loudness meter you can check without a separate analyzer. If your output's RMS looks wildly different from the target, that's a hint you picked the wrong mode for the material.
Install and gotchas
ComfyUI Manager β search OmniNodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes
Restart ComfyUI; it's under TensorVizion/Audio. Pure NumPy, no extra deps.
One positioning note so you pick the right tool: this node targets a number you type. If your actual problem is "make my audio match the loudness of this other track," that's Audio Loudness Match (also in this pack) - the difference between normalizing to a fixed level and matching a reference clip. Peak vs RMS is the main trap here; otherwise this is one of the most boring, reliable nodes in the pack, and that's a compliment.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_samples | AUDIO | β | |
| target_db | FLOAT | -3.0-60β0 | β |
| normalize_mode | COMBO | 2 options: peak, rms | |
| remove_dc_offset | BOOLEAN | true | β |
| soft_clip | BOOLEAN | true | β |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | β |
| peak_db | FLOAT | β |
| rms_db | FLOAT | β |
| summary | STRING | β |