Greasy Fork is available in English.
Choisir automatiquement la qualité minimum pour la lecture des vidéos (plus eco-friendly, avec toujours la possibilité de choisir manuellement une meilleure qualité quand nécessaire)
// ==UserScript== // @name Dumb Youtube lowest quality chooser // @name:fr Vidéos Youtube en résolution minimale par défaut // @version 2 // @description Auto select the lowest available quality of videos (more eco-friendly, and you can still manually select a higher resolution when needed) // @description:fr Choisir automatiquement la qualité minimum pour la lecture des vidéos (plus eco-friendly, avec toujours la possibilité de choisir manuellement une meilleure qualité quand nécessaire) // @author Les noix de coco // @include http://youtube.com/* // @include https://youtube.com/* // @include http://www.youtube.com/* // @include https://www.youtube.com/* // @include http://gaming.youtube.com/* // @include https://gaming.youtube.com/* // @noframes // @grant none // @namespace https://greasyfork.org/users/456082 // ==/UserScript== (function() { "use strict" //--- USER SETTINGS // PREFERRED_QUALITY (string) can be set to 'lowest' (most of the time it means 144p), // or to a specific quality such as '240' or '360' (string without trailing 'p') const PREFERRED_QUALITY = 'lowest' //--- END OF USER SETTINGS function sortNumber(a, b) { return a - b } const DELAY = 1 function setLowestQuality() { if (!window.location.href.match(/\?.*v=/)) { // Not a video return } console.log('Will try to set video quality...') setTimeout(() => { const videoSettingsButtonEl = document.querySelector('.ytp-settings-button') if (!videoSettingsButtonEl) { return } videoSettingsButtonEl.dispatchEvent(new Event('click')) setTimeout(() => { let found = false for (const el of document.querySelectorAll('.ytp-menuitem')) { if (el.textContent.match(/Qual|Calidad/)) { found = true el.dispatchEvent(new Event('click')) break } } if (!found) { return } setTimeout(() => { const qualities = {} for (const el of document.querySelectorAll('.ytp-menuitem')) { const match = el.textContent.match(/(\d+)p/) if (match) { const qualityNum = match[1] qualities[qualityNum] = el } } let qualitiesList = Object.keys(qualities).sort(sortNumber) console.log('Qualities (sorted):', qualitiesList) let quality if (!PREFERRED_QUALITY || PREFERRED_QUALITY === 'lowest') { quality = qualitiesList[0] } else { // Take the preferred quality (with a fallback to the lowest quality) const idx = qualitiesList.indexOf(PREFERRED_QUALITY) quality = idx >=0 ? qualitiesList[idx] : qualitiesList[0] } console.log(`Setting video quality to ${quality}p`) qualities[quality].dispatchEvent(new Event('click')) }, DELAY) }, DELAY) }, DELAY) } window.addEventListener("yt-navigate-finish", setLowestQuality, true) })()