A Firefox and Chrome extension that automatically equalizes the volume of YouTube videos, especially podcasts where every producer has their own idea of what the correct levels should be.
YT Levelr is a Featured extension on the Chrome Web Store and is available for both Firefox and Chromium-based browsers.
- Automatic Loudness Normalization: Automatically adjusts audio levels between videos to create a consistent listening experience
- Smart Gain Management: Uses asymmetric gain limits (more aggressive cuts than boosts) to prevent sudden loud blasts
- Gradual Confidence Growth: Gain limits start narrow and widen linearly until full adjustment range is available at 30s, allowing the algorithm to make small initial corrections before committing to its final decision
- Drift Correction: Slow automatic correction every 3 minutes after lock to handle long-term level shifts
- Noise Floor Protection: Ignores silence periods to avoid skewing measurements
- Local Processing Only: All audio processing happens entirely within your browser - no data is collected or transmitted
- Cross Browser Support: uses Manifest V3 for compatibility with chrome/edge/comet and firefox
Install from the official Firefox Add-on Store.
Install from the official Chrome Web Store.
To install manually:
- Download and unzip the latest release from GitHub Releases
- Go to
chrome://extensions/, enable Developer mode - Click "Load unpacked" and select the unzipped folder
YT Levelr uses the Web Audio API to intercept audio output from YouTube's video element and applies automatic gain correction:
- Audio Interception: Creates a source node from YouTube's video element
- RMS Measurement: Continuously measures Root Mean Square (RMS) amplitude of the audio
- Gain Calculation: Compares measured level against your target level (default: -22 dBFS)
- Smooth Transitions: Applies gain changes with asymmetric attack/release times to protect against sudden loud sounds
- Locking: After 30 seconds, gain locks and only drift correction applies
-
Gradual Confidence Growth:
- Starts with narrow gain limits (±6dB/+3dB) at t=0 for cautious initial corrections
- Limits widen linearly over time as confidence in measurement grows
- At 30s, full range is available (±20dB/+15dB) and gain locks to its final decision
-
Asymmetric Treatment: Cuts are permitted more aggressively than boosts because a sudden loud blast is worse than staying quiet for a few seconds
-
Gain Transitions: Faster transitions for cuts (0.15s) than boosts (1.2s) to protect against sudden loud audio
- Install the extension
- Reload any open YouTube tabs
- Play a video - the extension starts measuring immediately
- Click the icon to adjust target level (-30 to -12 dBFS recommended)
- After 30 seconds, gain locks for consistent levels
Click "re-measure current video" in the popup if:
- The extension locked at an incorrect level
- You want a fresh measurement with new settings
The popup displays real-time information:
- Applied Gain: Current gain multiplier being applied
- Status: Shows measuring, locked, or disabled state
- Confidence Bar: Progress toward full confidence (100% at 30s)
- Waveform Display: Visual representation of audio levels with target line
- ✅ Podcasts: Primary use case - spoken word content works excellently
- ✅ Interviews: Conversational audio normalizes well
- ✅ Audiobooks: Consistent narration levels handled correctly
- ✅ Lectures: Educational content with steady delivery
⚠️ Music Videos: Extended quiet intros may not be handled correctly due to the confidence-based approach⚠️ Dynamic Range Content: Music with extreme dynamic range may benefit from manual adjustment⚠️ Very Quiet Audio: Content consistently below -48 dBFS may not trigger measurements
- Firefox: Fully supported (tested on Firefox 150.3)
- Chrome: Fully supported (tested on Chrome 148)
- Comet: Fully supported (tested on Comet 147)
- install from the chrome web store when available
- Edge (and other chromium-based browsers): Not tested, should work
YT Levelr is privacy-first:
- ✅ No data collection or transmission
- ✅ All processing happens locally in your browser
- ✅ Only stores
enabledandtargetDBpreferences locally
See Privacy Policy for complete details.
graph TD
A[YouTube Video Element] --> B[MediaElementSource<br/>audio interception]
B --> C[DynamicsCompressor<br/>transient control]
C --> D[GainNode<br/>adjustment]
D --> E[AnalyserNode<br/>RMS measurement]
E --> F[Destination<br/>output]
classDef audioNode fill:#e1f5fe
class B,C,D,E,F audioNode
- Input: Captures audio from YouTube's video element
- Compression: Gentle dynamics compression to tame transient peaks
- Gain Adjustment: Applies calculated gain based on RMS measurement
- Analysis: Continuously measures output level for feedback
- Output: Delivers normalized audio to speakers
- Measurement Phase (0-30s): Actively measuring and adjusting gain within confidence limits
- Locked Phase (30s+): Gain locked, only drift correction applies
- Drift Correction: Every 3 minutes after lock, blends 10% toward new target based on recent measurements
The extension stores only two user preferences locally:
enabled: Whether the extension is activetargetDB: Your chosen target loudness level in dBFS
These values never leave your browser.
Contributions welcome. See the GitHub repository for:
- Issue tracking
- Feature requests
- Pull requests
- Development guidelines
YT Levelr is open source. See the GitHub repository for licensing details.
- Issues: GitHub Issues
- Documentation: See README, privacy policy, and reviewer notes
- Questions: Open an issue or pull request on GitHub
Homepage: https://github.com/AndyP2/yt-levelr


