insin / control-panel-for-youtube

Browser extension which gives you more control over YouTube by adding missing options and UI improvements - for desktop & mobile browsers
https://jbscript.dev/control-panel-for-youtube
80 stars 2 forks source link

Automatically set video quality #50

Open insin opened 2 months ago

insin commented 2 months ago

There's an expando API on the #movie_player element:

>> Object.keys(movie_player).filter(k => k.toLowerCase().includes('quality')).sort() ← Array(11) [ "getAvailableQualityData", "getAvailableQualityDataAndMessaging", "getAvailableQualityLabels", "getAvailableQualityLevels", "getMaxPlaybackQuality", "getPlaybackQuality", "getPlaybackQualityLabel", "getPreferredQuality", "getUserPlaybackQualityPreference", "setPlaybackQuality", … ] >> movie_player.getAvailableQualityLevels() ← Array(5) [ "hd1080", "hd720", "medium", "tiny", "auto" ]

setPlayBackQuality(quality) doesn't seem to do anything (just a web component setter method perhaps?), but setPlaybackQualityRange(quality) does what we want

Quality data from an 8K video:

>> movie_player.getAvailableQualityData()
←  Array(9) [ {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} ]
0: Object { qualityLabel: "4320p60", quality: "highres", isPlayable: true, … }
1: Object { qualityLabel: "2160p60", quality: "hd2160", isPlayable: true, … }
2: Object { qualityLabel: "1440p60", quality: "hd1440", isPlayable: true, … }
3: Object { qualityLabel: "1080p60", quality: "hd1080", isPlayable: true, … }
4: Object { qualityLabel: "720p60", quality: "hd720", isPlayable: true, … }
5: Object { qualityLabel: "480p", quality: "large", isPlayable: true, … }
6: Object { qualityLabel: "360p", quality: "medium", isPlayable: true, … }
7: Object { qualityLabel: "240p", quality: "small", isPlayable: true, … }
8: Object { qualityLabel: "144p", quality: "tiny", isPlayable: true, … }
realAzazello commented 1 week ago

Bogudan's userscript Youtube polymer engine fixes has that option: set video quality (disables auto quality).

The setting stays sticky between vids.