[Feature Request] Native LUFS audio loudness normalization node
- Dominant language
- Python
- Stars
- 133k
- Forks
- 15.7k
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 158
Description
### Feature Idea
Please add a native **Normalize Audio Loudness** node that measures an audio clip's integrated loudness and applies the required gain to reach a user-selected LUFS target.
This is different from the existing native **Adjust Audio Volume** node:
- `Adjust Audio Volume` applies a fixed gain in dB without measuring the source.
- Loudness normalization first measures perceived/integrated loudness, then calculates the gain needed to bring different clips to a consistent target level.
Suggested interface:
- Input: `audio` (`AUDIO`)
- Input: `target_lufs` (`FLOAT`, default `-23.0`, step `0.1`)
- Output: normalized `audio` (`AUDIO`)
Expected behavior:
- Measure integrated loudness using ITU-R BS.1770 / EBU R128-style LUFS measurement.
- Apply equal gain across channels while preserving the sample rate and channel layout.
- Handle silence or clips whose loudness cannot be measured without producing NaNs or extreme gain.
- Clearly document whether normalization may exceed 0 dBFS, or optionally provide clipping/true-peak protection.
This would be useful for generated speech, music and video workflows where clips from different generations can have substantially different perceived loudness. A fixed dB adjustment cannot automatically make those clips consistent.
### Existing Solutions
A working custom-node implementation exists in Kijai's ComfyUI-WanVideoWrapper:
https://github.com/kijai/ComfyUI-WanVideoWrapper
The node is named **Normalize Audio Loudness**. It uses `pyloudnorm` to measure integrated loudness and normalize to a configurable target, with `-23 LUFS` as the default.
### Other
Existing custom-node UI:
Contributor guide
Assessment
This issue has not been assessed yet.