Dumb Youtube lowest quality chooser

Auto select the lowest available quality of videos (more eco-friendly, and you can still manually select a higher resolution when needed)

// ==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://gf.qytechs.cn/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)

})()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址