Greasy Fork is available in English.

Disable DRC Audio on YouTube

Disables DRC Audio (Stable Volume) on YouTube

// ==UserScript==
// @name         Disable DRC Audio on YouTube
// @author       Adri
// @namespace    http://tampermonkey.net/
// @match        https://www.youtube.com/*
// @grant        none
// @version      0.1
// @description  Disables DRC Audio (Stable Volume) on YouTube
// @license      MIT
// @run-at       document-idle
// ==/UserScript==

// ad-hoc script - manipulates yt html/js to manually disable stable volume
// executes on first-page load, assumes yt doesn't change drc after that
(function() {
    'use strict';
    console.log('ya')
    function waitForElement(selector) {
        return new Promise((resolve, reject) => {
            let element = document.querySelector(selector);
            if (element) {
                resolve(element);
            } else {
                const observer = new MutationObserver(mutations => {
                    const element = document.querySelector(selector);
                    if (element) {
                        observer.disconnect();
                        resolve(element);
                    }
                });
                observer.observe(document.body, {
                    childList: true,
                    subtree: true
                });
            }
        });
    }

    function disableDRC() {
        return new Promise((resolve, reject) => {
            waitForElement('.ytp-settings-button')
                .then(menuButton => {
                    menuButton.click();
                    menuButton.click();
                    return waitForElement('.ytp-drc-menu-item');
                })
                .then(drcMenuItem => {
                    if (drcMenuItem.getAttribute('aria-checked') === 'true') {
                        drcMenuItem.click();
                        console.log('Disabled DRC Audio');
                    } else {
                        console.log('DRC Audio is already disabled');
                    }
                    resolve();
                })
                .catch(error => {
                    reject(error);
                });
        });
    }

    // Main execution
    disableDRC()
        .catch(error => {
            console.error('Error:', error);
        });

})();