// ==UserScript== // @name YouTube HD Override // @namespace http://www.youtube.com/ // @version 2.0 // @description Makes every YouTube video run in the highest definition // @include http://*.youtube.com/* // @include https://*.youtube.com/* // @exclude http://apiblog.youtube.com/* // @exclude https://apiblog.youtube.com/* // @run-at document-end // @copyright Prehistoricman Inc. 2015 // @downloadURL none // ==/UserScript== console.log("YouTube HD Override loaded") HDOSettings = {} if (localStorage.HDOverride == undefined) { //Define Settings for the first time HDOSettings.HD = true HDOSettings.VideoAutoPlay = false HDOSettings.ChannelAutoPlay = false HDOSettings.DASHPlayback = false localStorage.HDOverride = JSON.stringify(HDOSettings) } else { HDOSettings = JSON.parse(localStorage.HDOverride) } function SaveHDOSettings() { localStorage.HDOverride = JSON.stringify(HDOSettings) } var LastHREF = location.href var LastPlayer = false var Debugging = false if (Debugging) { console.trace() } function Print(output) { //It would be immoral to spam others' consoles. if (Debugging) { console.log(output) } } function PauseChannelVideo() { PauseInterval = setInterval(function () { document.getElementById("c4-player").pauseVideo() Print("Paused channel video") if (document.getElementById("c4-player").getPlayerState() == 2) { clearInterval(PauseInterval) Print("Pause interval stopped") } }, 30) } function SetHD() { HDInterval = setInterval(function () { var OverridePlayer = document.getElementById("movie_player") if (OverridePlayer) { if (OverridePlayer.setPlaybackQuality) { OverridePlayer.setPlaybackQuality(OverridePlayer.getAvailableQualityLevels()[0]) if (!HDOSettings.VideoAutoPlay) { OverridePlayer.setAutonavState(1) //Disable auto-nav } Print("HD'd video") if (!HDOSettings.DASHPlayback && ytplayer && ytplayer.config && ytplayer.config.args) { ytplayer.config.args.dash = "0" ytplayer.config.args.dashmpd = "" Print("Set DASH") } else if (!HDOSettings.DASHPlayback) { //if we can't find ytplayer Print("DASH set failed") } Print("Set quality") } if (OverridePlayer.getPlaybackQuality() == OverridePlayer.getAvailableQualityLevels()[0]) { clearInterval(HDInterval) Print("Quality interval stopped") } else { Print("check fail") console.log(OverridePlayer.getPlaybackQuality(), OverridePlayer.getAvailableQualityLevels()[0]) } } else { Print("Player not found yet") } }, 100) } function ApplyFixes() { Print("ApplyFixes at " + location.href) if (location.href.substring(0, 31) == "https://www.youtube.com/channel" | location.href.substring(0, 31) == "http://www.youtube.com/channel/" | location.href.substring(0, 28) == "https://www.youtube.com/user" | location.href.substring(0, 28) == "http://www.youtube.com/user/") { if (!HDOSettings.ChannelAutoPlay) { //Everybody hates this shit PauseChannelVideo() //Pause video on channel pages } } else if (HDOSettings.HD) { SetHD() //Set HD on video pages } else { Print("Who knows???") Print(location.href) Print(HDOSettings) } } ApplyFixes() setInterval(function () { if (location.href != LastHREF) { //href has changed LastHREF = location.href Print("Href change") ApplyInterval = setInterval(function () { //Waits for a new player to load if (document.getElementById("player") != LastPlayer) { ApplyFixes() clearInterval(ApplyInterval) } }, 100) } }, 200)