// ==UserScript== // @name YouTube to Invidious // @author OdinBrood, Jesús E. // @namespace Krul & Brood // @description Scan page for Youtube embeds and urls and replace with Invidious. // @include * // @exclude /^http(s|)://(www[.]|)invidio[.]us/.*$/ // @exclude /^http(s|)://(www[.]|)invidious[.]snopyta[.]org/.*$/ // @exclude /^http(s|)://(www[.]|)vid.wxzm[.]sx/.*$/ // @exclude /^http(s|)://(www[.]|)invidious[.]kabi[.]tk/.*$/ // @exclude /^http(s|)://(www[.]|)invidiou[.]sh/.*$/ // @exclude /^http(s|)://(www[.]|)invidious[.]enkirton[.]net/.*$/ // @exclude /^http(s|)://(www[.]|)tube[.]poal[.]co/.*$/ // @exclude /^http(s|)://(www[.]|)invidious[.]13ad[.]de/.*$/ // @grant GM_xmlhttpRequest // @version 8.4.2 // ==/UserScript== /* jshint esversion: 6 */ var instance='proxy.invidious.snopyta.org'; //set you favorite Invidious instance! (https://github.com/omarroth/invidious/wiki/Invidious-Instances) //change script options, default values recommended var a=1; //set to 0 to force autoplay off, set to 1 to keep embed's value [default 1] var b=1; //set to 0 to not replace all youtube links to Invidious [default 1] var c=1; //set to 0 to disable DASH playback (beta feature) [default 1] var d=1; //set to 0 to disable Invidious proxy [default 1] var e=1; //set to 0 to disable bypass of url shorteners [default 1] var ytdomains=new RegExp(/http(s|)\:\/\/(m\.|i\.|www\.|img\.|)(youtu(|be|be-nocookie)|.*ytimg)\.(com|be)\/.*/); var shorteners=new RegExp(/^http(s|):\/\/(bit.ly|goo.gl|tinyurl.com|t.co|ow.ly|is.gd|buff.ly|deck.ly|su.pr|lnk.co|fur.ly|moourl.com|)\/.*/); var params=new RegExp(/^(autoplay|channel|v|playlist|list)$/); var current=window.location.href.match(ytdomains)===null; var frames,thumbs,links,skip; if(current){ frames=Array.prototype.slice.call(document.getElementsByTagName('iframe')).filter(ytel); thumbs=Array.prototype.slice.call(document.getElementsByTagName('img')).filter(ytel); if(b==1)links=Array.prototype.slice.call(document.getElementsByTagName('a')).filter(ythref); if(frames.length>0)embed(); if(thumbs.length>0)thumb(); if(links.length>0)link(); }else{ var title=Array.prototype.slice.call(document.getElementsByTagName('h1')); addbtn(); } var observer=new MutationObserver(function(mutations){ mutations.forEach(function(mutation){ if(current){ frames=Array.prototype.slice.call(mutation.target.getElementsByTagName('iframe')).filter(ytel); thumbs=Array.prototype.slice.call(mutation.target.getElementsByTagName('img')).filter(ytel); if(frames.length>0)embed(); if(thumbs.length>0)thumb(); if(b==1){ links=Array.prototype.slice.call(mutation.target.getElementsByTagName('a')).filter(ythref); if(links.length>0)link(); } }else{ skip=Array.prototype.slice.call(mutation.target.getElementsByClassName('skipinv')); if(skip<1){ title=Array.prototype.slice.call(mutation.target.getElementsByTagName('h1')); addbtn(); } } }); }); observer.observe(document.body,{childList:true,subtree:true}); function embed(){ for(var i=0;i'; btn.href='javascript:void(0)'; btn.onclick=function(){redir();}; btn.className='skipinv'; title[i].parentNode.appendChild(btn); } } function redir(){ var url=new URL(window.location.href); url.hostname=instance; location.href=url; } function unshorten(long,short){ frames=Array.prototype.slice.call(document.getElementsByTagName('iframe')); for(var k=0;k