// ==UserScript==
// @name Persistent Invidious Settings
// @namespace http://tampermonkey.net/
// @version 1.01
// @description Makes Invidious settings persist across instances and in private browsing.
// @author Veeno
// @license GPLv3
// @match invidious.snopyta.org/*
// @match yewtu.be/*
// @match invidious.kavin.rocks/*
// @match vid.puffyan.us/*
// @match invidious.namazso.eu/*
// @match inv.riverside.rocks/*
// @match yt.artemislena.eu/*
// @match invidious.flokinet.to/*
// @match invidious.esmailelbob.xyz/*
// @match inv.bp.projectsegfau.lt/*
// @match y.com.sb/*
// @match invidious.tiekoetter.com/*
// @match invidious.nerdvpn.de/*
// @match inv.vern.cc/*
// @match invidious.slipfox.xyz/*
// @match watch.thekitty.zone/*
// @match invidious.dhusch.de/*
// @match inv.odyssey346.dev/*
// @match invidious.baczek.me/*
// @match invidious.weblibre.org/*
// @match invidious.privacydev.net/*
// @match yt.funami.tech/*
// @match invidious.drivet.xyz/*
// @match vid.priv.au/*
// @match invidious.lidarshield.cloud/*
// @match invidious.silur.me/*
// @match iv.melmac.space/*
// @match iv.ggtyler.dev/*
// @match invidious.epicsite.xyz/*
// @match invidious.sethforprivacy.com/*
// @match yt.oelrichsgarcia.de/*
// @icon https://invidious.io/invidious-colored-vector.svg
// @run-at document-start
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
/* jshint esversion: 11 */
(function() {
'use strict';
if(window.self !== window.top) return;
const domain = location.hostname;
const defaultDomainUpToDate = {
"invidious.snopyta.org": true,
"yewtu.be": true,
"invidious.kavin.rocks": true,
"vid.puffyan.us": true,
"invidious.namazso.eu": true,
"inv.riverside.rocks": true,
"yt.artemislena.eu": true,
"invidious.flokinet.to": true,
"invidious.esmailelbob.xyz": true,
"inv.bp.projectsegfau.lt": true,
"y.com.sb": true,
"invidious.tiekoetter.com": true,
"invidious.nerdvpn.de": true,
"inv.vern.cc": true,
"invidious.slipfox.xyz": true,
"watch.thekitty.zone": true,
"invidious.dhusch.de": true,
"inv.odyssey346.dev": true,
"invidious.baczek.me": true,
"invidious.weblibre.org": true,
"invidious.privacydev.net": true,
"yt.funami.tech": true,
"invidious.drivet.xyz": true,
"vid.priv.au": true,
"invidious.lidarshield.cloud": true,
"invidious.silur.me": true,
"iv.melmac.space": true,
"iv.ggtyler.dev": true,
"invidious.epicsite.xyz": true,
"invidious.sethforprivacy.com": true,
"yt.oelrichsgarcia.de": true
};
const domainUpToDate = GM_getValue("Invidious_DomainUpToDate", defaultDomainUpToDate);
function validateCurrentDomain(){
domainUpToDate[domain] = true;
GM_setValue("Invidious_DomainUpToDate", domainUpToDate);
}
function invalidateOtherDomains(){
Object.keys(domainUpToDate).forEach(key => { domainUpToDate[key] = false; });
validateCurrentDomain();
}
const defaultSettings = encodeURIComponent(JSON.stringify({
"annotations": false,
"annotations_subscribed": false,
"autoplay": true,
"automatic_instance_redirect": false,
"captions": [
"",
"",
""
],
"comments": [
"youtube",
""
],
"continue": false,
"continue_autoplay": true,
"dark_mode": "",
"latest_only": false,
"listen": false,
"local": false,
"watch_history": false,
"vr_mode": true,
"show_nick": false,
"locale": "en-US",
"region": "US",
"max_results": 40,
"notifications_only": false,
"player_style": "invidious",
"quality": "hd720",
"quality_dash": "auto",
"default_home": "Popular",
"feed_menu": [
"Popular",
"Trending"
],
"related_videos": true,
"sort": "published",
"speed": 1,
"thin_mode": false,
"unseen_only": false,
"video_loop": false,
"extend_desc": false,
"volume": 100,
"save_player_pos": false
}));
const storedSettings = GM_getValue("Invidious_Settings", defaultSettings);
const cookieSettings = document.cookie
.split("; ")
.find((entry) => entry.startsWith("PREFS="))
?.split("=")[1];
if(cookieSettings && domainUpToDate[domain]){
if(cookieSettings !== storedSettings){
GM_setValue("Invidious_Settings", cookieSettings);
invalidateOtherDomains();
}
} else{
const date = new Date();
date.setFullYear(date.getFullYear() + 2);
document.cookie = "PREFS=" + storedSettings + "; domain=" + domain + "; path=/; expires=" + date.toGMTString() + "; Secure; SameSite=Lax";
validateCurrentDomain();
location.reload();
}
})();