Last active
August 29, 2025 09:08
-
-
Save WouterG/acf1e901324aed77f466626fb5d6611f to your computer and use it in GitHub Desktop.
Disable youtube volume normalization (allow true video 100% volume)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ==UserScript== | |
| // @name YouTube Disable Normalization | |
| // @namespace http://tampermonkey.net/ | |
| // @version 0.1 | |
| // @description Allows true 100% volume on youtube videos. | |
| // @author Wouter Gerarts | |
| // @match https://www.youtube.com/* | |
| // @match https://youtube.com/* | |
| // @grant none | |
| // ==/UserScript== | |
| var alwaysEnable = true; | |
| (function() { | |
| 'use strict'; | |
| function baseElement() { | |
| return document.querySelector('#content'); | |
| } | |
| if (typeof fullVolumeButtonTaskId === 'number') { | |
| console.log('clearing interval'); | |
| clearInterval(fullVolumeButtonTaskId); | |
| } | |
| function createFullVolumeButton() { | |
| var el = document.createElement('button'); | |
| el.innerText = '100% Volume'; | |
| el.classList.add('full-volume-addon-button'); | |
| el.onclick = function() { | |
| var video = baseElement().querySelector('video'); | |
| video.volume = 1; | |
| }; | |
| return el; | |
| } | |
| function round (num, sig) { | |
| var mult = Math.pow(10, sig); | |
| return Math.round(num * mult) / mult; | |
| } | |
| var fullVolumeButtonTaskId = setInterval(function() { | |
| if (baseElement().querySelector('video') === undefined) { | |
| console.log('video element not found'); | |
| return; | |
| } | |
| if (baseElement().querySelector('.full-volume-addon-button') != undefined) { | |
| console.log('full volume addon button already found'); | |
| clearInterval(fullVolumeButtonTaskId); | |
| return; | |
| } | |
| var volumeSlider = baseElement().querySelector('.ytp-volume-slider-handle') | |
| if (volumeSlider === undefined || volumeSlider === null) { | |
| console.log('volumeSlider not found'); | |
| return; | |
| } | |
| var video = baseElement().querySelector('video'); | |
| var volumeSliderLeftStr = volumeSlider.style.left; | |
| var volumeSliderLeft = volumeSliderLeftStr.substr(0, volumeSliderLeftStr.length - 2); | |
| var volumeSliderValue = parseFloat(volumeSliderLeft) * 2.5; | |
| console.log('Checking slider ' + round(volumeSliderValue / 100, 2).toString() + ' against value ' + round(video.volume, 2).toString()); | |
| if (alwaysEnable || volumeSliderValue / 100 > video.volume) { | |
| var videoTitleElement = baseElement().querySelector('.ytd-video-primary-info-renderer'); | |
| videoTitleElement.appendChild(createFullVolumeButton()); | |
| } else { | |
| console.log('volume slider did not meet criteria for Full Volume button'); | |
| } | |
| }, 500); | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Yes, I've already done all that, and the closest I got with the same video I'm remastering is 100%/91% (0.9 dB). That's pretty damn close, but unfortunately, it only increases the volume SLIGHTLY (because it's already turned down significantly in the video editor to meet YouTube's -14 LUFS standard).
Note that I've been using CapCut, which is not the best editor in terms of this issue, and that I could probably achieve the desired effect in another video editing program. A little too late for that with the video I've already made, though, but I do know there's a way to achieve this goal without using the script, as I've seen a lot of YouTube videos lately which has the perfect score (no penalties) and which sound much louder on normal volume.
And this actually makes a lot of difference, as I'm sure you know (otherwise, why bother with these scripts, correct?) because it creates a much better and natural loud sound on normal volume, rather than just turning the volume up on your speaker manually. I'm sure you know exactly what I mean, which is why I'm so glad I found this excellent fix!
Thanks again.