Detects when YouTube tries to do "loudness normalization" and sets the volume back to what's set on the volume slider.
// ==UserScript== // @name YouTube, STOP CHANGING MY VOLUME! // @namespace Violentmonkey Scripts // @match https://www.youtube.com/watch // @grant none // @version 1.2 // @author Elara6331 <[email protected]> // @license GPLv3 // @description Detects when YouTube tries to do "loudness normalization" and sets the volume back to what's set on the volume slider. // ==/UserScript== window.onload = () => { player = document.querySelector('video'); volumeHandle = document.querySelector('.ytp-volume-slider-handle'); function sliderDistance() { if (player.parentElement.parentElement.classList.contains('ytp-big-mode')) { return 60; } else { return 40; } } function checkVolume() { // Get the distance in pixels of the volume slider handle from the beginning of the slider var volumeHandleLeft = volumeHandle.style.left.substr(0, volumeHandle.style.left.length - 2); // Divide by the maximum distance to get the desired volume value var volumeHandleValue = parseFloat(volumeHandleLeft) / sliderDistance(); if (volumeHandleValue != player.volume) { console.warn("Volume discrepancy detected. YouTube is up to its shenanigans again. Changing volume from " + player.volume * 100 + "% to " + volumeHandleValue * 100 + "%"); player.volume = volumeHandleValue; } } player.onvolumechange = checkVolume; player.onplaying = checkVolume; }