ComfyUI Node

(SP) Normalizer

Make everything the same volume, the right way

By c0ffymachyne·Created 2 years ago·Updated about a year ago· 22
(SP) Normalizer
  • audio_input
  • processed_audio
mode
target_rms0.1
target_lufs_db-14.0
target_peak0.9
target_auto0.7
target_auto_alpha0.1

If you generate a few audio clips in a row, they come out at wildly different volumes - and loudness-matching them by ear is misery. (SP) Normalizer is the pack's one-stop level fixer, and it's smarter than the average "make it 90% peak" utility because it bundles four normalization approaches into one node.

The four modes are the story here, because they measure different things:

  • lufs - normalizes to a perceived loudness target (default -14 LUFS, the Spotify/streaming standard). This is the one you want for matching tracks or prepping for upload. It uses pyloudnorm's integrated loudness meter, the same kind of measurement broadcasters use.
  • rms - matches average power (default target 0.1). Good for consistent levels between clips, and less "perceptual" than LUFS.
  • peak - scales so the loudest sample hits a target (default 0.9). This is the "don't clip, ever" mode. It's the least musical of the four because it ignores how loud things feel.
  • auto - an automatic gain control that continuously smooths gain toward a target level (default 0.7) using an alpha smoothing factor (target_auto_alpha, default 0.1). Lower alpha = slower, smoother gain rides; higher alpha reacts faster and can pump.

Honest guidance: use lufs at -14 for anything you'll share or A/B against other music, use peak at 0.9 as a safety net at the very end of a chain, and treat auto as the interesting experimental one.

The knobs that matter

  • mode - the dropdown above. Everything else is a target for whichever mode you picked.
  • target_lufs_db - the LUFS target, default -14.0. Streaming platforms sit around -14 to -9; -14 is a safe, quiet-ish standard.
  • target_peak - 0.0–1.0, default 0.9. Leave it unless you're specifically squeezing.
  • target_rms / target_auto / target_auto_alpha - only read when their mode is selected. The other targets are inert, not harmful.

One processed_audio output. Clean and boring, which is what you want from a utility node.

How it fits a chain

The natural order in this pack: Load Audio → Normalizer (lufs, -14) → EQ → Filter → Limiter (to catch stray peaks) → done. A subtle trap: this node normalizes toward a target but doesn't limit, so a clip that's already loud and dynamic can still peak over 1.0 after a LUFS match - that's what the Limiter is for. And if you're comparing before/after, note that a lot of the other nodes in this pack also do a quiet LUFS re-normalization of their own, so you won't usually need both Normalizer and a loudness-preserving effect fighting each other.

Installing it

ComfyUI Manager → "Install Custom Nodes" → search ComfyUI Signal Processing, or:

cd ComfyUI/custom_nodes
git clone https://github.com/c0ffymachyne/ComfyUI_SignalProcessing

then restart ComfyUI. Dependencies from requirements.txt (scipy, pyfar, numpy, torch, torchaudio, pyloudnorm, cupy-cuda11x) - pyloudnorm is the one this node specifically leans on, and Manager installs the whole list for you. The repo is a work in progress; if the pack won't load at all, it's the pinned cupy-cuda11x (the Limiter imports CuPy kernels at startup) - fix that and Normalizer loads with everything else.

CategorySignal Processing

Inputs (7)

NameTypeDefaultDescription
audio_inputAUDIO
modeCOMBO4 options: lufs, rms, peak, auto
target_rmsFLOAT0.10–10
target_lufs_dbFLOAT-14.0-100–100
target_peakFLOAT0.90–1
target_autoFLOAT0.70–1
target_auto_alphaFLOAT0.10–10

Outputs (1)

NameTypeDescription
processed_audioAUDIO