Greasy Fork is available in English.

Auto Set Twitch Quality to Source

Automatically sets Twitch player quality to 1080p60 (Source) using element detection and closes the settings menu

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name         Auto Set Twitch Quality to Source
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Automatically sets Twitch player quality to 1080p60 (Source) using element detection and closes the settings menu
// @author       Kalila Violette
// @match        https://player.twitch.tv/*
// @match        https://www.twitch.tv/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    console.log("[Twitch Quality Script] Running...");

    function waitForElement(selector, callback) {
        const observer = new MutationObserver((mutations, obs) => {
            const element = document.querySelector(selector);
            if (element) {
                obs.disconnect();
                callback(element);
            }
        });
        observer.observe(document.body, { childList: true, subtree: true });
    }

    function setQualityToSource() {
        waitForElement('[data-a-target="player-settings-button"]', (settingsButton) => {
            console.log("[Twitch Quality Script] Clicking settings...");
            settingsButton.click();

            waitForElement('[data-a-target="player-settings-menu-item-quality"]', (qualityButton) => {
                console.log("[Twitch Quality Script] Clicking quality menu...");
                qualityButton.click();

                waitForElement('[data-a-target="player-settings-submenu-quality-option"]', () => {
                    console.log("[Twitch Quality Script] Selecting Source quality...");
                    [...document.querySelectorAll('[data-a-target="player-settings-submenu-quality-option"]')]
                        .find(el => el.innerText.includes("1080p") || el.innerText.includes("Source"))?.click();

                    // To change the quality, modify the innerText check above:
                    // "1080p" or "Source" → sets to 1080p60 (Source)
                    // "720p" → sets to 720p60
                    // "480p" → sets to 480p
                    // "360p" → sets to 360p
                    // "160p" → sets to 160p
                    // Example: el.innerText.includes("720p")

                    waitForElement('[data-a-target="player-settings-button"]', (settingsButton) => {
                        console.log("[Twitch Quality Script] Closing settings menu...");
                        settingsButton.click();
                    });
                });
            });
        });
    }

    window.addEventListener("load", setQualityToSource);
})();