Nodes/Comfy-MSS/Audio Normalize
ComfyUI Node

Audio Normalize

It doesn't make quiet audio loud, it stops clipping

By pymss-project·Created 4 months ago·Updated a day ago· 22
Audio Normalize
  • audio
  • audio

What it actually does

This is the smallest node in the pack and the one whose name most misleads. Audio Normalize does not normalize your audio in the usual loudness sense. It checks the peak level, and:

  • If the peak is above 1.0 (0 dBFS), it scales the whole waveform down so the peak sits at 0.999.
  • If the peak is at or below 1.0, it leaves the audio completely untouched - a straight clone, no gain applied.

So it's a limiter, not a leveler. Quiet audio stays quiet. Nothing gets louder. If you came here expecting a "make this stem as loud as that stem" node, that's not this, and no amount of staring at the widget will change it.

Why you'd still wire it in

Because separated stems genuinely do come back over 0 dBFS, and 24-bit PCM does not care about your feelings - anything past full scale gets clipped when it's written. Run a stem through this before Save Audio and you're guaranteed a clean file rather than a subtly crackly one.

It's also the safety net when you're comparing models. Two separators of the same track can differ by a few dB, and a level mismatch is the most common reason people pick the wrong one - the louder stem always sounds "better" for the first thirty seconds. A clip guard doesn't fix that, but it stops the file itself from being damaged while you decide.

The MSS Params and VR Params nodes have their own normalize toggles, and if that's all you need, use those - this node is the version you can drop anywhere in a graph, including on audio that never went near a separator.

Inputs and outputs

That's the whole schema:

  • Input audio - one ComfyUI AUDIO stream.
  • Output audio - the guarded waveform, same sample rate, same length. Metadata carried on the dict (source path, stem name) survives, because the node copies the dict and only rewrites the waveform.

One detail from the source worth knowing: it works on a clone, so if you fan the same input both into this node and somewhere else, the other branch is unaffected. No in-place mutation surprises.

Install

Part of Comfy-MSS:

cd ComfyUI/custom_nodes
git clone https://github.com/pymss-project/comfy-mss
python -m pip install pymss   # ComfyUI's Python env

or ComfyUI Manager → Comfy-MSS → restart. No models involved; the only requirement is that pymss imported cleanly, since the pack loads its ensemble and audio helpers from it.

Gotchas

  • The name oversells it. It's a peak guard. Peak > 1.0 → scaled to 0.999. Otherwise passthrough.
  • Peak, not RMS, not LUFS. If two files have the same peak but wildly different perceived loudness, this node has nothing to say about it.
  • Unconnected input raises audio input is required. - the pack is consistent about that across its audio utilities.
  • v1.0.x workflows. Renamed node types in v1.1.0 mean old graphs involving these utility nodes may load with missing-node errors.
Categoryaudio/pymss

Inputs (1)

NameTypeDefaultDescription
audioAUDIO

Outputs (1)

NameTypeDescription
audioAUDIO