Skip to content

Instantly share code, notes, and snippets.

@WouterG
Last active November 15, 2024 02:21
Show Gist options
  • Save WouterG/acf1e901324aed77f466626fb5d6611f to your computer and use it in GitHub Desktop.
Save WouterG/acf1e901324aed77f466626fb5d6611f to your computer and use it in GitHub Desktop.
Disable youtube volume normalization (allow true video 100% volume)
// ==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);
})();
@TheBSODAndWSODFan
Copy link

version 0.2 only work on new layout, if you still have old layout, use 0.1 version of script

@fa7ad
Copy link

fa7ad commented Dec 12, 2022

I was going to post this patch for the new UI but looks like @TheBSODAndWSODFan already made a new script. I went with a different selector, but essentially does the same thing

63c63,64
<             var videoTitleElement = baseElement().querySelector('.ytd-video-primary-info-renderer');
---
>             //var videoTitleElement = baseElement().querySelector('.ytd-video-primary-info-renderer');
>             var videoTitleElement = baseElement().querySelector('#title');

@tigre7575
Copy link

None of these are working for me any more and I'm seeing the message "volumeSlider not found" in the console log. Could someone help me out. Thanks

@fa7ad
Copy link

fa7ad commented May 23, 2023

@tigre7575 my version of the script still seems to work, you can give that a try and see if it works for you.

My fork: https://gist.github.com/fa7ad/fa995474f5cb9fe91fb209686881373d

@tigre7575
Copy link

@fa7ad Thanks for the reply. After testing out your version I figured out that this seems to be an issue with Firefox and Youtube most likely, as these scripts still work in Chrome but not in Firefox.

@fa7ad
Copy link

fa7ad commented May 23, 2023

Weird, I'm on Firefox as well. Maybe its the extension you are using to run userscripts? I'm using Violentmonkey, might be worth a shot if you still want to use Firefox

@tigre7575
Copy link

Thanks for sharing that. I created a new blank profile and it works, so my FF profile is just broken which I've seen before.

@damienOlsen
Copy link

Any chance of an update? Seems to have just broken for me..

@abec2304
Copy link

Any chance of an update? Seems to have just broken for me..

I maintain an alternative script which I occasionally update https://gist.github.com/abec2304/2782f4fc47f9d010dfaab00f25e69c8a

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment