Why Do This in Your Browser?
After loudness normalization the average level is right, but individual peaks can still spike past 0dB and clip on playback. The fix is a brickwall limiter: a fast compressor with an extremely high ratio (effectively infinite) and a ceiling parameter that the audio cannot cross. The limiter catches the brief peaks and pulls them back to the ceiling, leaving everything below untouched. The result is loud but never distorted.
Limit-after-normalize is the standard mastering chain for streaming and broadcast delivery. Spotify normalizes to -14 LUFS with a -1dBTP true-peak ceiling; Apple Music sits at -16 LUFS with the same ceiling target. Apply the normalizer first to set the average level, then apply the limiter to catch the peaks. FFmpeg's `alimiter` filter handles this — and it runs in the wasm build with no additional dependencies.
How It Works
Drop an audio file. Set the ceiling — the maximum allowed peak in dB, typically -0.3 to -1.0 for streaming (leaves headroom for codec overshoot), -0.1 for already-encoded files, or -3.0 for conservative broadcast targets. Set the release time — how quickly the limiter recovers after a peak (5–50ms typical; faster releases preserve transients, slower releases sound smoother). Optionally enable lookahead for cleaner peak detection (adds a few ms of latency but catches peaks before they happen).
FFmpeg applies `alimiter=limit=L:release=R:level=disabled:asc=1` where L is the ceiling in dB and R is the release time in milliseconds. The `level=disabled` flag means the limiter doesn't apply makeup gain — that's the normalizer's job. `asc=1` enables auto-release scaling so the limiter adapts release time based on signal dynamics. The result is exported in the original format by default.
Tip: For the loudness normalization that should precede limiting, use the Audio Normalizer first. After limiting, the Audio Compressor finishes the chain with codec/bitrate conversion for distribution.
Common Use Cases
How We Compare
Honest read on free, paid, and self-hosted options for this kind of job: