Nodes/ComfyUI-AudioTools/Audio Normalize (LUFS)
ComfyUI Node

Audio Normalize (LUFS)

The node that stops LTX-2's v2v volume whiplash

By Urabewe·Created 7 months ago·Updated 7 months ago· 15
Audio Normalize (LUFS)
  • audio
  • AUDIO
target_lufs-20.0
start_time0.00
end_time0.00
apply_tofull_track

If you've ever extended an LTX-2 clip with v2v, you know the whiplash: the original audio sits at one level, then the regenerated segment kicks in a few dB louder (or quieter), and suddenly the whole clip sounds broken. Audio Normalize (LUFS) is the node that fixes exactly that. It measures how loud your audio actually is, then applies gain to land it on a target loudness you pick. No models, no API, no extra downloads - just gain math.

It's one half of Urabewe's ComfyUI-AudioTools pack. Its author built it for his own LTX-2 GGUF workflows, where the volume jump when LTX takes over an extended clip is a constant annoyance. You drop it between the audio decode and your combine-video step, right after its sibling Audio Enhancement (DSRE). The author's own framing is worth remembering: these nodes "help improve (not magic)" LTX-2 audio.

How it works

The node computes the RMS of your audio and estimates LUFS from that. Be honest with yourself about what that means: the source code literally comments "approximate LUFS (not true K-weighted LUFS)." It's not an EBU R128 meter - it's a loudness estimate good enough to match clips to each other, which is what you actually want here.

From there it's simple gain: how far are you from target_lufs, and how much gain gets you there. Two safeguards are baked in: if the result would clip, it pulls the peak down to 0.99, and auto-balance mode caps any gain change at ±6dB so it can't make things worse.

The inputs that actually matter

  • target_lufs - where you want the loudness to land. Default is -20, range -70 to 0. More negative = quieter. The README's cheat sheet: -14 for loud streaming, -16 for Spotify/YouTube, -20 for podcasts, -23 for broadcast.
  • start_time / end_time - the region to analyze and normalize, in seconds. end_time of 0 means end of file. Leave both at 0 for the whole track.
  • apply_to - full_track, selection_only, or auto_balance.

auto_balance is the one worth knowing. It grabs the 3 seconds of audio before your selection, measures that as the reference, and matches the selection's loudness to it (capped at ±6dB). That's the "make the regenerated segment match the original" trick, and it's what you want when LTX takes over mid-clip. The README calls it perfect for dialogue consistency, which is the same idea.

The output is a standard ComfyUI AUDIO dict (waveform + sample_rate), so it wires straight into whatever combine or save-audio node you already use.

Installing it

From ComfyUI Manager, search for ComfyUI-AudioTools and install it, or:

cd ComfyUI/custom_nodes
git clone https://github.com/Urabewe/ComfyUI-AudioTools

Then restart ComfyUI. Dependencies are resampy, soundfile, and librosa (that's the whole requirements.txt):

pip install soundfile resampy librosa

No model files, nothing heavy. One warning: the repo's README was AI-drafted and even says so at the top - don't trust its placeholder clone URL, use the one above.

Common issues

  • Output is silent or unchanged - if the region is effectively silent, the node passes it through with gain 1.0. Point it at audio that actually has content.
  • Auto-balance isn't matching - it needs real audio in the 3 seconds before start_time. If your selection starts at 0, the reference window is empty and it falls back to target-based normalization instead.
  • Too loud or too quiet after - more negative target_lufs = quieter. The range is wide (-70 to 0), easy to overshoot.
  • Numbers don't match a real LUFS meter - correct, it's RMS-approximated. Use it to match clips, not to calibrate a studio.

One workflow tip from the README that's actually correct: run enhancement before normalization. Enhancement changes levels; normalize last so it sets the final loudness.

Categoryaudio/processing

Inputs (5)

NameTypeDefaultDescription
audioAUDIO
target_lufsFLOAT-20.0-70–0
start_timeFLOAT0.000–3600
end_timeFLOAT0.000–3600
apply_toCOMBOfull_track3 options: full_track, selection_only, auto_balance

Outputs (1)

NameTypeDescription
AUDIOAUDIO