Audio Normalize (LUFS)
The node that stops LTX-2's v2v volume whiplash
- audio
- AUDIO
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_timeof 0 means end of file. Leave both at 0 for the whole track. - apply_to -
full_track,selection_only, orauto_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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| target_lufs | FLOAT | -20.0-70–0 | — |
| start_time | FLOAT | 0.000–3600 | — |
| end_time | FLOAT | 0.000–3600 | — |
| apply_to | COMBO | full_track | 3 options: full_track, selection_only, auto_balance |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |