Browser extension that normalizes video/audio element volume on selected high-noise websites.
- Automatic volume normalization on supported websites
- Adjustable global target volume (0-100)
- Quick volume presets and mouse-wheel adjustment
- Per-site enable/disable toggles
- Enable or disable all supported sites at once
- Persistent settings using browser sync storage
- Embedded-player support for related frames and open shadow roots
- Time-sliced media discovery for busy feeds
- X / Twitter
- Bluesky
- TikTok
- YouTube
- Twitch
- Dailymotion
- Vimeo
- Streamable
- Rumble
- Kick
- JW Player
- Brightcove
- Snapchat
- Tumblr
sites.js: Shared supported-site catalogbackground.js: Persists settings outside the popup lifecyclecontent.js: Applies and re-applies normalized volume on media elementspopup.html: Extension popup UIpopup.js: Popup behavior and settings persistencemanifest.json: Cross-browser MV3 source manifestscripts/build.js: Produces Chrome and Firefox build outputs and store ZIP files indist/package.json: Build and validation scripts
- Run
npm install. - Run
npm run build. - Use
dist/chrome/for Chromium browsers anddist/firefox/for Firefox.
- Run
npm install. - Run
npm run build. - Open
chrome://extensions(orbrave://extensions). - Enable Developer Mode.
- Click
Load unpacked. - Select
dist/chrome/.
- Run
npm install. - Run
npm run build. - Open
about:debugging#/runtime/this-firefox. - Click
Load Temporary Add-on. - Select
dist/firefox/manifest.json.
npm run check: Builds both targets, validates site/build consistency, checks script syntax, and runs Firefox linting.
- Settings are stored in
chrome.storage.sync. - Content script uses exact domain/subdomain matching (no loose substring matching).
- Large DOM updates are scanned in short idle-time slices instead of blocking the page.
- Popup writes are proxied through the background script so final saves survive popup teardown.
- Build output strips BOMs and generates browser-specific manifests from the root source manifest.
MIT