Nodes/OmniNodes/Audio Normalize πŸ”Š
ComfyUI Node

Audio Normalize πŸ”Š

Make It Loud Without Making It Clip

By TensorVizionΒ·Created 3 months agoΒ·Updated about 8 hours agoΒ· 0
Audio Normalize πŸ”Š
  • audio_samples
  • audio
  • peak_db
  • rms_db
  • summary
β—„target_db-3.0β–Ί
β—„normalize_modeβ–Ύβ–Ί
β—„remove_dc_offsettrueβ–Ί
β—„soft_cliptrueβ–Ί

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.

CategoryTensorVizion/Audio

Inputs (5)

NameTypeDefaultDescription
audio_samplesAUDIOβ€”
target_dbFLOAT-3.0-60–0β€”
normalize_modeCOMBO2 options: peak, rms
remove_dc_offsetBOOLEANtrueβ€”
soft_clipBOOLEANtrueβ€”

Outputs (4)

NameTypeDescription
audioAUDIOβ€”
peak_dbFLOATβ€”
rms_dbFLOATβ€”
summarySTRINGβ€”