about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-02-20 00:48:51 +0300
committerManeraKai <manerakai@protonmail.com>2022-02-20 00:48:51 +0300
commitef222d2ca5ad753446adb98800e9640b0c602381 (patch)
tree2fe30dd48711b25bdb0b8d8461d983489877db63
parentFixed cookies not working in invidious #44 (diff)
downloadlibredirect-ef222d2ca5ad753446adb98800e9640b0c602381.zip
Adding tor to twitter and youtube #32
-rw-r--r--instances/data.json14
-rw-r--r--src/assets/javascripts/helpers/common.js26
-rw-r--r--src/assets/javascripts/helpers/imgur.js2
-rw-r--r--src/assets/javascripts/helpers/reddit.js2
-rw-r--r--src/assets/javascripts/helpers/search.js2
-rw-r--r--src/assets/javascripts/helpers/translate.js2
-rw-r--r--src/assets/javascripts/helpers/twitter.js105
-rw-r--r--src/assets/javascripts/helpers/wikipedia.js2
-rw-r--r--src/assets/javascripts/helpers/youtube/invidious-cookies.js4
-rw-r--r--src/assets/javascripts/helpers/youtube/youtube.js263
-rw-r--r--src/pages/options/imgur/imgur.js1
-rw-r--r--src/pages/options/instagram/instagram.js1
-rw-r--r--src/pages/options/medium/medium.js1
-rw-r--r--src/pages/options/reddit/reddit.js2
-rw-r--r--src/pages/options/search/search.js2
-rw-r--r--src/pages/options/tiktok/tiktok.js1
-rw-r--r--src/pages/options/translate/translate.js2
-rw-r--r--src/pages/options/twitter/twitter.html70
-rw-r--r--src/pages/options/twitter/twitter.js48
-rw-r--r--src/pages/options/wikipedia/wikipedia.js1
-rw-r--r--src/pages/options/youtube/invidious.js23
-rw-r--r--src/pages/options/youtube/piped.js21
-rw-r--r--src/pages/options/youtube/youtube.html138
-rw-r--r--src/pages/options/youtube/youtube.js33
-rw-r--r--src/pages/popup/popup.html31
-rw-r--r--src/pages/popup/style.css1
26 files changed, 595 insertions, 203 deletions
diff --git a/instances/data.json b/instances/data.json
index f0ee447b..cec6ee41 100644
--- a/instances/data.json
+++ b/instances/data.json
@@ -16,7 +16,7 @@
       "https://invidious.privacy.gd",
       "https://invidious.namazso.eu"
     ],
-    "onion": [
+    "tor": [
       "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion",
       "http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion",
       "http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion",
@@ -73,7 +73,7 @@
       "https://tw.artemislena.eu",
       "https://de.nttr.stream"
     ],
-    "onion": [
+    "tor": [
       "http://3nzoldnxplag42gqjs23xvghtzf6t6yzssrtytnntc6ppc7xxuoneoad.onion",
       "http://nitter.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd.onion",
       "http://nitter7bryz3jv7e3uekphigvmoyoem4al3fynerxkj22dmoxoq553qd.onion",
@@ -126,7 +126,7 @@
       "https://teddit.adminforge.de",
       "https://teddit.bus-hit.me"
     ],
-    "onion": [
+    "tor": [
       "http://teddit4w6cmzmj5kimhfcavs7yo5s7alszvsi2khqutqtlaanpcftfyd.onion",
       "http://snoo.ioensistjs7wd746zluwixvojbbkxhr37lepdvwtdfeav673o64iflqd.onion",
       "http://ibarajztopxnuhabfu7fg6gbudynxofbnmvis3ltj6lfx47b6fhrd5qd.onion",
@@ -142,7 +142,7 @@
       "https://wikiless.sethforprivacy.com",
       "https://wiki.604kph.xyz"
     ],
-    "onion": [
+    "tor": [
       "http://dj2tbh2nqfxyfmvq33cjmhuw7nb6am7thzd3zsjvizeqf374fixbrxyd.onion"
     ]
   },
@@ -166,7 +166,7 @@
       "https://simplytranslate.pussthecat.org",
       "https://translate.northboot.xyz"
     ],
-    "onion": [
+    "tor": [
       "http://fyng2tsmzmvxmojzbbwmfnsn2lrcyftf4cw6rk5j2v2huliazud3fjid.onion",
       "http://xxtbwyb5z5bdvy2f6l2yquu5qilgkjeewno4qfknvb3lkg3nmoklitid.onion"
     ]
@@ -276,7 +276,7 @@
       "https://xeek.com",
       "https://searx.roflcopter.fr"
     ],
-    "onion": [
+    "tor": [
       "http://3afisqjw2rxm6z7mmstyt5rx75qfqrgxnkzftknbp2vhipr2nrmrjdyd.onion",
       "http://searxbgetrkiwxhdwi6svpgh7eotopqyxhbqiokrwzg7dcte44t36kyd.onion",
       "http://suche.xyzco456vwisukfg.onion",
@@ -321,7 +321,7 @@
       "https://rimgo.totaldarkness.net",
       "https://rimgo.bus-hit.me"
     ],
-    "onion": [
+    "tor": [
       "http://l4d4owboqr6xcmd6lf64gbegel62kbudu3x3jnldz2mx6mhn3bsv3zyd.onion",
       "http://jx3dpcwedpzu2mh54obk5gvl64i2ln7pt5mrzd75s4jnndkqwzaim7ad.onion"
     ]
diff --git a/src/assets/javascripts/helpers/common.js b/src/assets/javascripts/helpers/common.js
index 05ad60ff..4c27f169 100644
--- a/src/assets/javascripts/helpers/common.js
+++ b/src/assets/javascripts/helpers/common.js
@@ -90,6 +90,7 @@ function isFirefox() {
 
 function processDefaultCustomInstances(
   name,
+  protocol,
   nameHelper,
   document,
   getNameRedirectsChecks,
@@ -99,32 +100,33 @@ function processDefaultCustomInstances(
 ) {
 
   let nameCustomInstances = [];
-  let nameCheckListElement = document.getElementById(`${name}-checklist`);
+  let nameCheckListElement = document.getElementById(`${name}-${protocol}-checklist`);
   let nameDefaultRedirects;
 
   function calcNameCheckBoxes() {
     let isTrue = true;
-    for (const item of nameHelper.getRedirects()[name].normal)
+    for (const item of nameHelper.getRedirects()[name][protocol])
       if (!nameDefaultRedirects.includes(item)) {
         isTrue = false;
         break;
       }
     for (const element of nameCheckListElement.getElementsByTagName('input'))
       element.checked = nameDefaultRedirects.includes(element.id)
-    document.getElementById(`${name}-toogle-all`).checked = isTrue;
+    document.getElementById(`${name}-${protocol}-toogle-all`).checked = isTrue;
   }
 
   nameDefaultRedirects = getNameRedirectsChecks();
+
   nameCheckListElement.innerHTML =
     [
-      `<div>Toggle All<input type="checkbox" id="${name}-toogle-all" /></div>`,
-      ...nameHelper.getRedirects()[name].normal.map((x) => `<div>${x}<input type="checkbox" id="${x}" /></div>`),
+      `<div>Toggle All<input type="checkbox" id="${name}-${protocol}-toogle-all" /></div>`,
+      ...nameHelper.getRedirects()[name][protocol].map((x) => `<div>${x}<input type="checkbox" id="${x}" /></div>`),
     ].join('\n<hr>\n');
 
   calcNameCheckBoxes();
-  document.getElementById(`${name}-toogle-all`).addEventListener("change", (event) => {
+  document.getElementById(`${name}-${protocol}-toogle-all`).addEventListener("change", (event) => {
     if (event.target.checked)
-      nameDefaultRedirects = [...nameHelper.getRedirects()[name].normal];
+      nameDefaultRedirects = [...nameHelper.getRedirects()[name][protocol]];
     else
       nameDefaultRedirects = [];
     setNameRedirectsChecks(nameDefaultRedirects);
@@ -132,7 +134,7 @@ function processDefaultCustomInstances(
   });
 
   for (let element of nameCheckListElement.getElementsByTagName('input')) {
-    if (element.id != `${name}-toogle-all`)
+    if (element.id != `${name}-${protocol}-toogle-all`)
       document.getElementById(element.id).addEventListener("change", (event) => {
         if (event.target.checked)
           nameDefaultRedirects.push(element.id)
@@ -147,7 +149,7 @@ function processDefaultCustomInstances(
 
   nameCustomInstances = getNameCustomRedirects();
   function calcNameCustomInstances() {
-    document.getElementById(`${name}-custom-checklist`).innerHTML =
+    document.getElementById(`${name}-${protocol}-custom-checklist`).innerHTML =
       nameCustomInstances.map(
         (x) => `<div>${x}<button class="add" id="clear-${x}">
                               <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
@@ -170,12 +172,12 @@ function processDefaultCustomInstances(
     }
   }
   calcNameCustomInstances();
-  document.getElementById(`custom-${name}-instance-form`).addEventListener("submit", (event) => {
+  document.getElementById(`custom-${name}-${protocol}-instance-form`).addEventListener("submit", (event) => {
     event.preventDefault();
-    let nameCustomInstanceInput = document.getElementById(`${name}-custom-instance`);
+    let nameCustomInstanceInput = document.getElementById(`${name}-${protocol}-custom-instance`);
     let url = new URL(nameCustomInstanceInput.value);
     let protocolHost = `${url.protocol}//${url.host}`;
-    if (nameCustomInstanceInput.validity.valid && !nameHelper.getRedirects()[name].normal.includes(protocolHost)) {
+    if (nameCustomInstanceInput.validity.valid && !nameHelper.getRedirects()[name][protocol].includes(protocolHost)) {
       if (!nameCustomInstances.includes(protocolHost)) {
         nameCustomInstances.push(protocolHost)
         setNameCustomRedirects(nameCustomInstances);
diff --git a/src/assets/javascripts/helpers/imgur.js b/src/assets/javascripts/helpers/imgur.js
index a4db5b22..3d9c7ed7 100644
--- a/src/assets/javascripts/helpers/imgur.js
+++ b/src/assets/javascripts/helpers/imgur.js
@@ -16,7 +16,7 @@ let redirects = {
             "https://rimgo.totaldarkness.net",
             "https://rimgo.bus-hit.me"
         ],
-        "onion": [
+        "tor": [
             "http://l4d4owboqr6xcmd6lf64gbegel62kbudu3x3jnldz2mx6mhn3bsv3zyd.onion",
             "http://jx3dpcwedpzu2mh54obk5gvl64i2ln7pt5mrzd75s4jnndkqwzaim7ad.onion"
         ]
diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js
index 099898a4..0f454d63 100644
--- a/src/assets/javascripts/helpers/reddit.js
+++ b/src/assets/javascripts/helpers/reddit.js
@@ -47,7 +47,7 @@ let redirects = {
       "https://teddit.adminforge.de",
       "https://teddit.bus-hit.me"
     ],
-    "onion": [
+    "tor": [
       "http://teddit4w6cmzmj5kimhfcavs7yo5s7alszvsi2khqutqtlaanpcftfyd.onion",
       "http://snoo.ioensistjs7wd746zluwixvojbbkxhr37lepdvwtdfeav673o64iflqd.onion",
       "http://ibarajztopxnuhabfu7fg6gbudynxofbnmvis3ltj6lfx47b6fhrd5qd.onion",
diff --git a/src/assets/javascripts/helpers/search.js b/src/assets/javascripts/helpers/search.js
index 323fe856..01c47178 100644
--- a/src/assets/javascripts/helpers/search.js
+++ b/src/assets/javascripts/helpers/search.js
@@ -100,7 +100,7 @@ let redirects = {
       "https://xeek.com",
       "https://searx.roflcopter.fr",
     ],
-    "onion": [
+    "tor": [
       "http://3afisqjw2rxm6z7mmstyt5rx75qfqrgxnkzftknbp2vhipr2nrmrjdyd.onion",
       "http://searxbgetrkiwxhdwi6svpgh7eotopqyxhbqiokrwzg7dcte44t36kyd.onion",
       "http://suche.xyzco456vwisukfg.onion",
diff --git a/src/assets/javascripts/helpers/translate.js b/src/assets/javascripts/helpers/translate.js
index 9aae8da7..c543559d 100644
--- a/src/assets/javascripts/helpers/translate.js
+++ b/src/assets/javascripts/helpers/translate.js
@@ -20,7 +20,7 @@ let redirects = {
       "https://simplytranslate.pussthecat.org",
       "https://translate.northboot.xyz"
     ],
-    "onion": [
+    "tor": [
       "http://fyng2tsmzmvxmojzbbwmfnsn2lrcyftf4cw6rk5j2v2huliazud3fjid.onion",
       "http://xxtbwyb5z5bdvy2f6l2yquu5qilgkjeewno4qfknvb3lkg3nmoklitid.onion"
     ]
diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js
index ba0b0974..f3511bf7 100644
--- a/src/assets/javascripts/helpers/twitter.js
+++ b/src/assets/javascripts/helpers/twitter.js
@@ -63,7 +63,7 @@ let redirects = {
       "https://tw.artemislena.eu",
       "https://nitter.eu.org"
     ],
-    "onion": [
+    "tor": [
       "http://3nzoldnxplag42gqjs23xvghtzf6t6yzssrtytnntc6ppc7xxuoneoad.onion",
       "http://nitter.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd.onion",
       "http://nitter7bryz3jv7e3uekphigvmoyoem4al3fynerxkj22dmoxoq553qd.onion",
@@ -83,13 +83,15 @@ let redirects = {
   },
 };
 const getRedirects = () => redirects;
-const getCustomRedirects = function () {
+
+function getCustomRedirects() {
   return {
     "nitter": {
-      "normal": [...nitterRedirectsChecks, ...nitterCustomRedirects]
+      "normal": [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]
     },
   };
 };
+
 function setRedirects(val) {
   redirects.nitter = val;
   browser.storage.sync.set({ twitterRedirects: redirects })
@@ -102,22 +104,39 @@ function setRedirects(val) {
   setNitterRedirectsChecks(nitterRedirectsChecks);
 }
 
-let nitterRedirectsChecks;
-const getNitterRedirectsChecks = () => nitterRedirectsChecks;
-function setNitterRedirectsChecks(val) {
-  nitterRedirectsChecks = val;
-  browser.storage.sync.set({ nitterRedirectsChecks })
-  console.log("nitterRedirectsChecks: ", val)
+let nitterNormalRedirectsChecks;
+const getNitterNormalRedirectsChecks = () => nitterNormalRedirectsChecks;
+function setNitterNormalRedirectsChecks(val) {
+  nitterNormalRedirectsChecks = val;
+  browser.storage.sync.set({ nitterNormalRedirectsChecks })
+  console.log("nitterNormalRedirectsChecks: ", val)
+}
+
+let nitterNormalCustomRedirects = [];
+const getNitterNormalCustomRedirects = () => nitterNormalCustomRedirects;
+function setNitterNormalCustomRedirects(val) {
+  nitterNormalCustomRedirects = val;
+  browser.storage.sync.set({ nitterNormalCustomRedirects })
+  console.log("nitterNormalCustomRedirects: ", val)
 }
 
-let nitterCustomRedirects = [];
-const getNitterCustomRedirects = () => nitterCustomRedirects;
-function setNitterCustomRedirects(val) {
-  nitterCustomRedirects = val;
-  browser.storage.sync.set({ nitterCustomRedirects })
-  console.log("nitterCustomRedirects: ", val)
+let nitterTorRedirectsChecks;
+const getNitterTorRedirectsChecks = () => nitterTorRedirectsChecks;
+function setNitterTorRedirectsChecks(val) {
+  nitterTorRedirectsChecks = val;
+  browser.storage.sync.set({ nitterTorRedirectsChecks })
+  console.log("nitterTorRedirectsChecks: ", val)
 }
 
+let nitterTorCustomRedirects = [];
+const getNitterTorCustomRedirects = () => nitterTorCustomRedirects;
+function setNitterTorCustomRedirects(val) {
+  nitterTorCustomRedirects = val;
+  browser.storage.sync.set({ nitterTorCustomRedirects })
+  console.log("nitterTorCustomRedirects: ", val)
+}
+
+
 let disable;
 const getDisable = () => disable;
 function setDisable(val) {
@@ -125,19 +144,38 @@ function setDisable(val) {
   browser.storage.sync.set({ disableTwitter: disable })
 }
 
+let protocol;
+const getprotocol = () => protocol;
+function setProtocol(val) {
+  protocol = val;
+  browser.storage.sync.set({ nitterProtocol: val })
+  console.log("nitterProtocol: ", val)
+}
+
 function isTwitter(url, initiator) {
   if (disable) return false;
   if (url.pathname.split("/").includes("home")) return null;
   if (
     commonHelper.isFirefox() &&
-    initiator && ([...redirects.nitter.normal, ...nitterCustomRedirects].includes(initiator.origin) || targets.includes(initiator.host))
+    initiator && (
+      [
+        ...redirects.nitter.normal,
+        ...redirects.nitter.tor,
+        ...nitterTorCustomRedirects,
+        ...nitterNormalCustomRedirects
+      ].includes(initiator.origin) || targets.includes(initiator.host))
   ) return false;
 
   return targets.includes(url.host)
 }
 
 function redirect(url) {
-  let instancesList = [...nitterRedirectsChecks, ...nitterCustomRedirects];
+  let instancesList;
+  if (protocol == 'normal')
+    instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects];
+  else if (protocol == 'tor')
+    instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects];
+
   if (instancesList.length === 0) return null;
   let randomInstance = commonHelper.getRandomInstance(instancesList)
 
@@ -157,16 +195,24 @@ async function init() {
       [
         "disableTwitter",
         "twitterRedirects",
-        "nitterRedirectsChecks",
-        "nitterCustomRedirects",
+        "nitterNormalRedirectsChecks",
+        "nitterNormalCustomRedirects",
+        "nitterTorRedirectsChecks",
+        "nitterTorCustomRedirects",
+        "nitterProtocol",
       ],
       (result) => {
         disable = result.disableTwitter ?? false;
 
         if (result.twitterRedirects) redirects = result.twitterRedirects;
 
-        nitterRedirectsChecks = result.nitterRedirectsChecks ?? [...redirects.nitter.normal];
-        nitterCustomRedirects = result.nitterCustomRedirects ?? [];
+        nitterNormalRedirectsChecks = result.nitterNormalRedirectsChecks ?? [...redirects.nitter.normal];
+        nitterNormalCustomRedirects = result.nitterNormalCustomRedirects ?? [];
+
+        nitterTorRedirectsChecks = result.nitterTorRedirectsChecks ?? [...redirects.nitter.tor];
+        nitterTorCustomRedirects = result.nitterTorCustomRedirects ?? [];
+
+        protocol = result.nitterProtocol ?? "normal";
 
         resolve();
       }
@@ -182,11 +228,20 @@ export default {
   getDisable,
   setDisable,
 
-  getNitterRedirectsChecks,
-  setNitterRedirectsChecks,
+  getNitterNormalRedirectsChecks,
+  setNitterNormalRedirectsChecks,
+
+  getNitterNormalCustomRedirects,
+  setNitterNormalCustomRedirects,
+
+  getNitterTorRedirectsChecks,
+  setNitterTorRedirectsChecks,
+
+  getNitterTorCustomRedirects,
+  setNitterTorCustomRedirects,
 
-  getNitterCustomRedirects,
-  setNitterCustomRedirects,
+  getprotocol,
+  setProtocol,
 
   redirect,
   isTwitter,
diff --git a/src/assets/javascripts/helpers/wikipedia.js b/src/assets/javascripts/helpers/wikipedia.js
index a7091386..22584c63 100644
--- a/src/assets/javascripts/helpers/wikipedia.js
+++ b/src/assets/javascripts/helpers/wikipedia.js
@@ -12,7 +12,7 @@ let redirects = {
       "https://wikiless.sethforprivacy.com",
       "https://wiki.604kph.xyz"
     ],
-    "onion": [
+    "tor": [
       "http://dj2tbh2nqfxyfmvq33cjmhuw7nb6am7thzd3zsjvizeqf374fixbrxyd.onion"
     ]
   }
diff --git a/src/assets/javascripts/helpers/youtube/invidious-cookies.js b/src/assets/javascripts/helpers/youtube/invidious-cookies.js
index cefbddd8..59cb7e04 100644
--- a/src/assets/javascripts/helpers/youtube/invidious-cookies.js
+++ b/src/assets/javascripts/helpers/youtube/invidious-cookies.js
@@ -24,8 +24,8 @@ browser.storage.sync.get(
         let prefs = getCookie();
         let changed = false;
 
-        if (result.invidiousAlwaysProxy !== undefined && prefs.local !== result.invidiousAlwaysProxy) {
-            prefs.local = result.invidiousAlwaysProxy;
+        if (result.invidiousAlwaysProxy !== undefined && prefs.sync !== result.invidiousAlwaysProxy) {
+            prefs.sync = result.invidiousAlwaysProxy;
             changed = true;
         }
         if (result.invidiousVideoQuality !== undefined && prefs.quality !== result.invidiousVideoQuality) {
diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js
index 802a73d0..6077124d 100644
--- a/src/assets/javascripts/helpers/youtube/youtube.js
+++ b/src/assets/javascripts/helpers/youtube/youtube.js
@@ -32,7 +32,7 @@ let redirects = {
       "https://youtube.076.ne.jp",
       "https://invidious.namazso.eu"
     ],
-    "onion": [
+    "tor": [
       "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion",
       "http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion",
       "http://kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad.onion",
@@ -48,7 +48,8 @@ let redirects = {
       "https://piped.silkky.cloud",
       "https://piped.tokhmi.xyz",
       "https://piped.mint.lgbt",
-    ]
+    ],
+    "tor": []
   }
 };
 
@@ -57,10 +58,12 @@ const getRedirects = () => redirects;
 const getCustomRedirects = function () {
   return {
     "invidious": {
-      "normal": [...invidiousRedirectsChecks, ...invidiousCustomRedirects]
+      "normal": [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects],
+      "tor": [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]
     },
     "piped": {
-      "normal": [...pipedRedirectsChecks, ...pipedCustomRedirects]
+      "normal": [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects],
+      "tor": [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]
     }
   };
 };
@@ -71,38 +74,76 @@ function setInvidiousRedirects(val) {
   console.log("invidiousRedirects: ", val)
 }
 
-let invidiousRedirectsChecks;
-const getInvidiousRedirectsChecks = () => invidiousRedirectsChecks;
-function setInvidiousRedirectsChecks(val) {
-  invidiousRedirectsChecks = val;
-  browser.storage.sync.set({ invidiousRedirectsChecks })
-  console.log("invidiousRedirectsChecks: ", val)
+let invidiousNormalRedirectsChecks;
+const getInvidiousNormalRedirectsChecks = () => invidiousNormalRedirectsChecks;
+function setInvidiousNormalRedirectsChecks(val) {
+  invidiousNormalRedirectsChecks = val;
+  browser.storage.sync.set({ invidiousNormalRedirectsChecks })
+  console.log("invidiousNormalRedirectsChecks: ", val)
+}
+
+let invidiousNormalCustomRedirects = [];
+const getInvidiousNormalCustomRedirects = () => invidiousNormalCustomRedirects;
+function setInvidiousNormalCustomRedirects(val) {
+  invidiousNormalCustomRedirects = val;
+  browser.storage.sync.set({ invidiousNormalCustomRedirects })
+  console.log("invidiousNormalCustomRedirects: ", val)
+}
+
+
+let invidiousTorRedirectsChecks;
+const getInvidiousTorRedirectsChecks = () => invidiousTorRedirectsChecks;
+function setInvidiousTorRedirectsChecks(val) {
+  invidiousTorRedirectsChecks = val;
+  browser.storage.sync.set({ invidiousTorRedirectsChecks })
+  console.log("invidiousTorRedirectsChecks: ", val)
 }
 
-let invidiousCustomRedirects = [];
-const getInvidiousCustomRedirects = () => invidiousCustomRedirects;
-function setInvidiousCustomRedirects(val) {
-  invidiousCustomRedirects = val;
-  browser.storage.sync.set({ invidiousCustomRedirects })
-  console.log("invidiousCustomRedirects: ", val)
+let invidiousTorCustomRedirects = [];
+const getInvidiousTorCustomRedirects = () => invidiousTorCustomRedirects;
+function setInvidiousTorCustomRedirects(val) {
+  invidiousTorCustomRedirects = val;
+  browser.storage.sync.set({ invidiousTorCustomRedirects })
+  console.log("invidiousTorCustomRedirects: ", val)
 }
 
-let pipedRedirectsChecks;
-const getPipedRedirectsChecks = () => pipedRedirectsChecks;
-function setPipedRedirectsChecks(val) {
-  pipedRedirectsChecks = val;
-  browser.storage.sync.set({ pipedRedirectsChecks })
-  console.log("pipedRedirectsChecks: ", val)
+
+let pipedNormalRedirectsChecks;
+const getPipedNormalRedirectsChecks = () => pipedNormalRedirectsChecks;
+function setPipedNormalRedirectsChecks(val) {
+  pipedNormalRedirectsChecks = val;
+  browser.storage.sync.set({ pipedNormalRedirectsChecks })
+  console.log("pipedNormalRedirectsChecks: ", val)
 }
 
-let pipedCustomRedirects = [];
-const getPipedCustomRedirects = () => pipedCustomRedirects;
-function setPipedCustomRedirects(val) {
-  pipedCustomRedirects = val;
-  browser.storage.sync.set({ pipedCustomRedirects })
-  console.log("pipedCustomRedirects: ", val)
+let pipedNormalCustomRedirects = [];
+const getPipedNormalCustomRedirects = () => pipedNormalCustomRedirects;
+function setPipedNormalCustomRedirects(val) {
+  pipedNormalCustomRedirects = val;
+  browser.storage.sync.set({ pipedNormalCustomRedirects })
+  console.log("pipedNormalCustomRedirects: ", val)
 }
 
+
+let pipedTorRedirectsChecks;
+const getPipedTorRedirectsChecks = () => pipedTorRedirectsChecks;
+function setPipedTorRedirectsChecks(val) {
+  pipedTorRedirectsChecks = val;
+  browser.storage.sync.set({ pipedTorRedirectsChecks })
+  console.log("pipedTorRedirectsChecks: ", val)
+}
+
+let pipedTorCustomRedirects = [];
+const getPipedTorCustomRedirects = () => pipedTorCustomRedirects;
+function setPipedTorCustomRedirects(val) {
+  pipedTorCustomRedirects = val;
+  browser.storage.sync.set({ pipedTorCustomRedirects })
+  console.log("pipedTorCustomRedirects: ", val)
+}
+
+
+
+
 function setPipedRedirects(val) {
   redirects.piped = val;
   browser.storage.sync.set({ youtubeRedirects: redirects })
@@ -117,6 +158,15 @@ function setDisable(val) {
   console.log("disableYoutube: ", disable)
 }
 
+
+let protocol;
+const getprotocol = () => protocol;
+function setProtocol(val) {
+  protocol = val;
+  browser.storage.sync.set({ youtubeProtocol: val })
+  console.log("youtubeProtocol: ", val)
+}
+
 let invidiousAlwaysProxy;
 function setInvidiousAlwaysProxy(val) {
   invidiousAlwaysProxy = val;
@@ -215,11 +265,19 @@ function setAlwaysusePreferred(val) {
 
 function isYoutube(url, initiator) {
   if (disable) return false;
-
   if (
     initiator && (
-      [...redirects.invidious.normal, ...invidiousCustomRedirects].includes(initiator.origin) ||
-      [...redirects.piped.normal, ...pipedCustomRedirects].includes(initiator.origin) ||
+      [
+        ...redirects.invidious.normal,
+        ...invidiousNormalCustomRedirects,
+        ...redirects.invidious.tor,
+        ...invidiousTorCustomRedirects,
+
+        ...redirects.piped.normal,
+        ...redirects.piped.tor,
+        ...pipedNormalCustomRedirects,
+        ...pipedTorCustomRedirects
+      ].includes(initiator.origin) ||
       targets.includes(initiator.host)
     )
   ) return false;
@@ -227,15 +285,27 @@ function isYoutube(url, initiator) {
   let isTargets = targets.some((rx) => rx.test(url.href));
   let protocolHost = `${url.protocol}//${url.host}`;
 
-  let isInvidious = redirects.invidious.normal.includes(protocolHost);
+  let isInvidious = [...redirects.invidious.normal, ...redirects.invidious.tor].includes(protocolHost);
   if (isInvidious) {
-    let myInvidiousInstances = [...invidiousRedirectsChecks, ...invidiousCustomRedirects];
+    let myInvidiousInstances = [
+      ...invidiousNormalRedirectsChecks,
+      ...invidiousNormalCustomRedirects,
+
+      ...invidiousTorRedirectsChecks,
+      ...invidiousTorCustomRedirects,
+    ];
     for (const item of myInvidiousInstances) if (item == protocolHost) isInvidious = false;
   }
 
-  let isPiped = redirects.piped.normal.includes(protocolHost);
+  let isPiped = [...redirects.piped.normal, ...redirects.piped.tor].includes(protocolHost);
   if (isPiped) {
-    let myPipedInstances = [...pipedRedirectsChecks, ...pipedCustomRedirects];
+    let myPipedInstances = [
+      ...pipedNormalRedirectsChecks,
+      ...pipedNormalCustomRedirects,
+
+      ...pipedTorRedirectsChecks,
+      ...pipedTorCustomRedirects,
+    ];
     for (const item of myPipedInstances) if (item == protocolHost) isPiped = false;
   }
 
@@ -272,7 +342,10 @@ function redirect(url, type) {
       !(frontend == 'freetube' && freetubeFrontend == 'invidious' && type === "sub_frame")
     ) return null;
 
-    let instancesList = [...invidiousRedirectsChecks, ...invidiousCustomRedirects];
+    let instancesList;
+    if (protocol == 'normal') instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects];
+    else if (protocol == 'tor') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects];
+
     if (instancesList.length === 0) return null;
     let randomInstance = commonHelper.getRandomInstance(instancesList);
 
@@ -286,7 +359,9 @@ function redirect(url, type) {
       !(frontend == 'freetube' && freetubeFrontend == 'piped' && type == "sub_frame")
     ) return null;
 
-    let instancesList = [...pipedRedirectsChecks, ...pipedCustomRedirects];
+    let instancesList;
+    if (protocol == 'normal') instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects];
+    else if (protocol == 'tor') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects];
     if (instancesList.length === 0) return null;
     let randomInstance = commonHelper.getRandomInstance(instancesList);
 
@@ -297,22 +372,54 @@ function redirect(url, type) {
 
 function isPipedorInvidious(url, type) {
   let protocolHost = `${url.protocol}//${url.host}`;
-  return (type === "main_frame" || type === "sub_frame") && [...redirects.invidious.normal, ...redirects.piped.normal].includes(protocolHost);
+  return (type === "main_frame" || type === "sub_frame") && [
+    ...redirects.invidious.normal,
+    ...invidiousNormalCustomRedirects,
+    ...redirects.invidious.tor,
+    ...invidiousTorCustomRedirects,
+
+    ...redirects.piped.normal,
+    ...redirects.piped.tor,
+    ...pipedNormalCustomRedirects,
+    ...pipedTorCustomRedirects,
+  ].includes(protocolHost);
 }
 
 function isUrlPipedorInvidious(url) {
   url = new URL(url);
   let protocolHost = `${url.protocol}//${url.host}`;
-  return [...redirects.invidious.normal, ...redirects.piped.normal].includes(protocolHost);
+  return [
+    ...redirects.invidious.normal,
+    ...redirects.invidious.tor,
+    ...invidiousNormalCustomRedirects,
+    ...invidiousTorCustomRedirects,
+
+    ...redirects.piped.normal,
+    ...redirects.piped.tor,
+    ...pipedNormalCustomRedirects,
+    ...pipedTorCustomRedirects,
+
+  ].includes(protocolHost);
 }
 
 function addUrlParams(url) {
 
   let protocolHost = `${url.protocol}//${url.host}`;
   let isChanged = false;
-
-  console.log("protocolHost", protocolHost)
-  if (redirects.invidious.normal.includes(protocolHost)) {
+  console.log("protocolHost", protocolHost);
+  console.log([
+    ...redirects.invidious.normal,
+    ...redirects.invidious.tor,
+    ...invidiousNormalCustomRedirects,
+    ...invidiousTorCustomRedirects,
+  ])
+  if (
+    [
+      ...redirects.invidious.normal,
+      ...redirects.invidious.tor,
+      ...invidiousNormalCustomRedirects,
+      ...invidiousTorCustomRedirects,
+    ].includes(protocolHost)) {
     if (!url.searchParams.has("dark_mode") && theme != "DEFAULT") {
       url.searchParams.append("dark_mode", theme);
       isChanged = true;
@@ -348,7 +455,13 @@ function addUrlParams(url) {
       isChanged = true;
     }
 
-  } else if (redirects.piped.normal.includes(protocolHost)) {
+  } else if (
+    [
+      ...redirects.piped.normal,
+      ...redirects.piped.tor,
+      ...pipedNormalCustomRedirects,
+      ...pipedTorCustomRedirects,
+    ].includes(protocolHost)) {
 
     if (!url.searchParams.has("theme") && theme != "DEFAULT") {
       url.searchParams.append("theme", theme);
@@ -396,17 +509,28 @@ async function init() {
         "youtubeAutoplay",
         "youtubeRedirects",
         "youtubeFrontend",
-        "invidiousRedirectsChecks",
-        "invidiousCustomRedirects",
-        "pipedRedirectsChecks",
-        "pipedCustomRedirects",
+
+        "invidiousNormalRedirectsChecks",
+        "invidiousNormalCustomRedirects",
+
+        "invidiousTorRedirectsChecks",
+        "invidiousTorCustomRedirects",
+
+        "pipedNormalRedirectsChecks",
+        "pipedNormalCustomRedirects",
+
+        "pipedTorRedirectsChecks",
+        "pipedTorCustomRedirects",
         "alwaysusePreferred",
         "freetubeFrontend",
+
+        "youtubeProtocol",
       ],
       (result) => {
         if (result.youtubeRedirects) redirects = result.youtubeRedirects;
 
         disable = result.disableYoutube ?? false;
+        protocol = result.youtubeProtocol ?? 'normal';
         frontend = result.youtubeFrontend ?? 'piped';
         freetubeFrontend = result.freetubeFrontend ?? 'invidious';
 
@@ -420,11 +544,17 @@ async function init() {
         invidiousPlayerStyle = result.invidiousPlayerStyle ?? 'DEFAULT';
         invidiousSubtitles = result.invidiousSubtitles || '';
 
-        invidiousRedirectsChecks = result.invidiousRedirectsChecks ?? [...redirects.invidious.normal];
-        invidiousCustomRedirects = result.invidiousCustomRedirects ?? [];
+        invidiousNormalRedirectsChecks = result.invidiousNormalRedirectsChecks ?? [...redirects.invidious.normal];
+        invidiousNormalCustomRedirects = result.invidiousNormalCustomRedirects ?? [];
+
+        invidiousTorRedirectsChecks = result.invidiousTorRedirectsChecks ?? [...redirects.invidious.tor];
+        invidiousTorCustomRedirects = result.invidiousTorCustomRedirects ?? [];
 
-        pipedRedirectsChecks = result.pipedRedirectsChecks ?? [...redirects.piped.normal];
-        pipedCustomRedirects = result.pipedCustomRedirects ?? [];
+        pipedNormalRedirectsChecks = result.pipedNormalRedirectsChecks ?? [...redirects.piped.normal];
+        pipedNormalCustomRedirects = result.pipedNormalCustomRedirects ?? [];
+
+        pipedTorRedirectsChecks = result.pipedTorRedirectsChecks ?? [...redirects.piped.tor];
+        pipedTorCustomRedirects = result.pipedTorCustomRedirects ?? [];
 
         persistInvidiousPrefs = result.persistInvidiousPrefs ?? false;
 
@@ -460,6 +590,9 @@ export default {
   getDisable,
   setDisable,
 
+  getprotocol,
+  setProtocol,
+
   setInvidiousAlwaysProxy,
   getInvidiousAlwaysProxy,
 
@@ -487,17 +620,29 @@ export default {
   getPersistInvidiousPrefs,
   setPersistInvidiousPrefs,
 
-  getInvidiousRedirectsChecks,
-  setInvidiousRedirectsChecks,
+  getInvidiousNormalRedirectsChecks,
+  setInvidiousNormalRedirectsChecks,
+
+  getInvidiousNormalCustomRedirects,
+  setInvidiousNormalCustomRedirects,
+
+  getPipedNormalRedirectsChecks,
+  setPipedNormalRedirectsChecks,
+
+  getPipedNormalCustomRedirects,
+  setPipedNormalCustomRedirects,
+
+  getInvidiousTorRedirectsChecks,
+  setInvidiousTorRedirectsChecks,
 
-  getInvidiousCustomRedirects,
-  setInvidiousCustomRedirects,
+  getInvidiousTorCustomRedirects,
+  setInvidiousTorCustomRedirects,
 
-  getPipedRedirectsChecks,
-  setPipedRedirectsChecks,
+  getPipedTorRedirectsChecks,
+  setPipedTorRedirectsChecks,
 
-  getPipedCustomRedirects,
-  setPipedCustomRedirects,
+  getPipedTorCustomRedirects,
+  setPipedTorCustomRedirects,
 
   getAlwaysusePreferred,
   setAlwaysusePreferred,
diff --git a/src/pages/options/imgur/imgur.js b/src/pages/options/imgur/imgur.js
index 1d4a8263..1ff9bae0 100644
--- a/src/pages/options/imgur/imgur.js
+++ b/src/pages/options/imgur/imgur.js
@@ -11,6 +11,7 @@ imgurHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'rimgo',
+        'normal',
         imgurHelper,
         document,
         imgurHelper.getRimgoRedirectsChecks,
diff --git a/src/pages/options/instagram/instagram.js b/src/pages/options/instagram/instagram.js
index 0b4193df..632ee0bb 100644
--- a/src/pages/options/instagram/instagram.js
+++ b/src/pages/options/instagram/instagram.js
@@ -11,6 +11,7 @@ instagramHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'bibliogram',
+        'normal',
         instagramHelper,
         document,
         instagramHelper.getBibliogramRedirectsChecks,
diff --git a/src/pages/options/medium/medium.js b/src/pages/options/medium/medium.js
index d9574e0d..cb69fecb 100644
--- a/src/pages/options/medium/medium.js
+++ b/src/pages/options/medium/medium.js
@@ -11,6 +11,7 @@ mediumHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'scribe',
+        'normal',
         mediumHelper,
         document,
         mediumHelper.getScribeRedirectsChecks,
diff --git a/src/pages/options/reddit/reddit.js b/src/pages/options/reddit/reddit.js
index dd14b8e2..e84f3a6e 100644
--- a/src/pages/options/reddit/reddit.js
+++ b/src/pages/options/reddit/reddit.js
@@ -37,6 +37,7 @@ redditHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'libreddit',
+        'normal',
         redditHelper,
         document,
         redditHelper.getLibredditRedirectsChecks,
@@ -47,6 +48,7 @@ redditHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'teddit',
+        'normal',
         redditHelper,
         document,
         redditHelper.getTedditRedirectsChecks,
diff --git a/src/pages/options/search/search.js b/src/pages/options/search/search.js
index 30128e96..d52c8600 100644
--- a/src/pages/options/search/search.js
+++ b/src/pages/options/search/search.js
@@ -38,6 +38,7 @@ searchHelper.init().then(() => {
 
   commonHelper.processDefaultCustomInstances(
     'searx',
+    'normal',
     searchHelper,
     document,
     searchHelper.getSearxRedirectsChecks,
@@ -48,6 +49,7 @@ searchHelper.init().then(() => {
 
   commonHelper.processDefaultCustomInstances(
     'whoogle',
+    'normal',
     searchHelper,
     document,
     searchHelper.getWhoogleRedirectsChecks,
diff --git a/src/pages/options/tiktok/tiktok.js b/src/pages/options/tiktok/tiktok.js
index f6153e51..34db3dd9 100644
--- a/src/pages/options/tiktok/tiktok.js
+++ b/src/pages/options/tiktok/tiktok.js
@@ -11,6 +11,7 @@ tiktokHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'proxiTok',
+        'normal',
         tiktokHelper,
         document,
         tiktokHelper.getProxiTokRedirectsChecks,
diff --git a/src/pages/options/translate/translate.js b/src/pages/options/translate/translate.js
index 4db80072..ad9e52a5 100644
--- a/src/pages/options/translate/translate.js
+++ b/src/pages/options/translate/translate.js
@@ -58,6 +58,7 @@ translateHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'simplyTranslate',
+        'normal',
         translateHelper,
         document,
         translateHelper.getSimplyTranslateRedirectsChecks,
@@ -68,6 +69,7 @@ translateHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'lingva',
+        'normal',
         translateHelper,
         document,
         translateHelper.getLingvaRedirectsChecks,
diff --git a/src/pages/options/twitter/twitter.html b/src/pages/options/twitter/twitter.html
index 948f0be1..40f79407 100644
--- a/src/pages/options/twitter/twitter.html
+++ b/src/pages/options/twitter/twitter.html
@@ -115,29 +115,65 @@
             <input id="disable-nitter" type="checkbox" checked />
         </div>
 
-        <hr>
-
         <div class="some-block option-block">
-            <h4>Default Instances</h4>
+            <h4>Protocol</h4>
+            <select id="protocol">
+                <option value="normal">Normal</option>
+                <option value="tor">Tor</option>
+            </select>
         </div>
-        <div class="checklist" id="nitter-checklist"></div>
+
         <hr>
-        <div class="some-block option-block">
-            <h4>Custom Instances</h4>
+
+        <div id="normal">
+
+            <div class="some-block option-block">
+                <h4>Default Instances</h4>
+            </div>
+            <div class="checklist" id="nitter-normal-checklist"></div>
+            <hr>
+            <div class="some-block option-block">
+                <h4>Custom Instances</h4>
+            </div>
+            <form id="custom-nitter-normal-instance-form">
+                <div class="some-block option-block">
+                    <input id="nitter-normal-custom-instance" placeholder="https://nitter.com" type="url" />
+                    <button type="submit" class="add" id="nitter-normal-add-instance">
+                        <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
+                            fill="currentColor">
+                            <path d="M0 0h24v24H0V0z" fill="none" />
+                            <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
+                        </svg>
+                    </button>
+                </div>
+            </form>
+            <div class="checklist" id="nitter-normal-custom-checklist"></div>
+
         </div>
-        <form id="custom-nitter-instance-form">
+
+        <div id="tor">
             <div class="some-block option-block">
-                <input id="nitter-custom-instance" placeholder="https://nitter.com" type="url" />
-                <button type="submit" class="add" id="nitter-add-instance">
-                    <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
-                        fill="currentColor">
-                        <path d="M0 0h24v24H0V0z" fill="none" />
-                        <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
-                    </svg>
-                </button>
+                <h4>Default Tor Instances</h4>
             </div>
-        </form>
-        <div class="checklist" id="nitter-custom-checklist"></div>
+            <div class="checklist" id="nitter-tor-checklist"></div>
+            <hr>
+            <div class="some-block option-block">
+                <h4>Custom Instances</h4>
+            </div>
+            <form id="custom-nitter-tor-instance-form">
+                <div class="some-block option-block">
+                    <input id="nitter-tor-custom-instance" placeholder="https://nitter.com" type="url" />
+                    <button type="submit" class="add" id="nitter-tor-add-instance">
+                        <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
+                            fill="currentColor">
+                            <path d="M0 0h24v24H0V0z" fill="none" />
+                            <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
+                        </svg>
+                    </button>
+                </div>
+            </form>
+            <div class="checklist" id="nitter-tor-custom-checklist"></div>
+        </div>
 
     </section>
 
diff --git a/src/pages/options/twitter/twitter.js b/src/pages/options/twitter/twitter.js
index 759ad573..88fadb7b 100644
--- a/src/pages/options/twitter/twitter.js
+++ b/src/pages/options/twitter/twitter.js
@@ -6,16 +6,54 @@ disableTwitterElement.addEventListener("change",
     (event) => twitterHelper.setDisable(!event.target.checked)
 );
 
+let protocolElement = document.getElementById("protocol")
+protocolElement.addEventListener("change",
+    (event) => {
+        let protocol = event.target.options[protocolElement.selectedIndex].value
+        twitterHelper.setProtocol(protocol);
+        changeProtocolSettings(protocol);
+    }
+);
+
+
+function changeProtocolSettings(protocol) {
+    let normalDiv = document.getElementById("normal");
+    let torDiv = document.getElementById("tor");
+    if (protocol == 'normal') {
+        normalDiv.style.display = 'block';
+        torDiv.style.display = 'none';
+    }
+    else if (protocol == 'tor') {
+        normalDiv.style.display = 'none';
+        torDiv.style.display = 'block';
+    }
+}
+
 twitterHelper.init().then(() => {
-    disableTwitterElement.checked = !twitterHelper.getDisable(); 
+    disableTwitterElement.checked = !twitterHelper.getDisable();
+
+    let protocol = twitterHelper.getprotocol();
+    protocolElement.value = protocol;
+    changeProtocolSettings(protocol);
 
     commonHelper.processDefaultCustomInstances(
         'nitter',
+        'normal',
+        twitterHelper,
+        document,
+        twitterHelper.getNitterNormalRedirectsChecks,
+        twitterHelper.setNitterNormalRedirectsChecks,
+        twitterHelper.getNitterNormalCustomRedirects,
+        twitterHelper.setNitterNormalCustomRedirects
+    )
+    commonHelper.processDefaultCustomInstances(
+        'nitter',
+        'tor',
         twitterHelper,
         document,
-        twitterHelper.getNitterRedirectsChecks,
-        twitterHelper.setNitterRedirectsChecks,
-        twitterHelper.getNitterCustomRedirects,
-        twitterHelper.setNitterCustomRedirects
+        twitterHelper.getNitterTorRedirectsChecks,
+        twitterHelper.setNitterTorRedirectsChecks,
+        twitterHelper.getNitterTorCustomRedirects,
+        twitterHelper.setNitterTorCustomRedirects
     )
 });
\ No newline at end of file
diff --git a/src/pages/options/wikipedia/wikipedia.js b/src/pages/options/wikipedia/wikipedia.js
index 5abaed6f..161f0af4 100644
--- a/src/pages/options/wikipedia/wikipedia.js
+++ b/src/pages/options/wikipedia/wikipedia.js
@@ -10,6 +10,7 @@ wikipediaHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'wikiless',
+        'normal',
         wikipediaHelper,
         document,
         wikipediaHelper.getWikilessRedirectsChecks,
diff --git a/src/pages/options/youtube/invidious.js b/src/pages/options/youtube/invidious.js
index 70b25428..17cbda37 100644
--- a/src/pages/options/youtube/invidious.js
+++ b/src/pages/options/youtube/invidious.js
@@ -26,6 +26,7 @@ persistInvidiousPrefsElement.addEventListener("change",
     (event) => youtubeHelper.setPersistInvidiousPrefs(event.target.checked)
 );
 
+
 youtubeHelper.init().then(() => {
     invidiousPlayerStyleElement.value = youtubeHelper.getInvidiousPlayerStyle();
     invidiousAlwaysProxyElement.checked = youtubeHelper.getInvidiousAlwaysProxy();
@@ -35,12 +36,24 @@ youtubeHelper.init().then(() => {
 
     commonHelper.processDefaultCustomInstances(
         'invidious',
+        'normal',
+        youtubeHelper,
+        document,
+        youtubeHelper.getInvidiousNormalRedirectsChecks,
+        youtubeHelper.setInvidiousNormalRedirectsChecks,
+        youtubeHelper.getInvidiousNormalCustomRedirects,
+        youtubeHelper.setInvidiousNormalCustomRedirects
+    );
+
+    commonHelper.processDefaultCustomInstances(
+        'invidious',
+        'tor',
         youtubeHelper,
         document,
-        youtubeHelper.getInvidiousRedirectsChecks,
-        youtubeHelper.setInvidiousRedirectsChecks,
-        youtubeHelper.getInvidiousCustomRedirects,
-        youtubeHelper.setInvidiousCustomRedirects
-    )
+        youtubeHelper.getInvidiousTorRedirectsChecks,
+        youtubeHelper.setInvidiousTorRedirectsChecks,
+        youtubeHelper.getInvidiousTorCustomRedirects,
+        youtubeHelper.setInvidiousTorCustomRedirects
+    );
 });
 
diff --git a/src/pages/options/youtube/piped.js b/src/pages/options/youtube/piped.js
index ed425237..6c541a8d 100644
--- a/src/pages/options/youtube/piped.js
+++ b/src/pages/options/youtube/piped.js
@@ -4,13 +4,24 @@ import commonHelper from "../../../assets/javascripts/helpers/common.js";
 youtubeHelper.init().then(() => {
     commonHelper.processDefaultCustomInstances(
         'piped',
+        'normal',
         youtubeHelper,
         document,
-        youtubeHelper.getPipedRedirectsChecks,
-        youtubeHelper.setPipedRedirectsChecks,
-        youtubeHelper.getPipedCustomRedirects,
-        youtubeHelper.setPipedCustomRedirects
-    )
+        youtubeHelper.getPipedNormalRedirectsChecks,
+        youtubeHelper.setPipedNormalRedirectsChecks,
+        youtubeHelper.getPipedNormalCustomRedirects,
+        youtubeHelper.setPipedNormalCustomRedirects
+    );
+    commonHelper.processDefaultCustomInstances(
+        'piped',
+        'tor',
+        youtubeHelper,
+        document,
+        youtubeHelper.getPipedTorRedirectsChecks,
+        youtubeHelper.setPipedTorRedirectsChecks,
+        youtubeHelper.getPipedTorCustomRedirects,
+        youtubeHelper.setPipedTorCustomRedirects
+    );
 });
 
 
diff --git a/src/pages/options/youtube/youtube.html b/src/pages/options/youtube/youtube.html
index 2d8c75e9..cc5cf05a 100644
--- a/src/pages/options/youtube/youtube.html
+++ b/src/pages/options/youtube/youtube.html
@@ -138,6 +138,15 @@
     </div>
 
     <div id="invidious-piped">
+
+      <div class="some-block option-block">
+        <h4>Protocol</h4>
+        <select id="protocol">
+          <option value="normal">Normal</option>
+          <option value="tor">Tor</option>
+        </select>
+      </div>
+
       <div class="some-block option-block">
         <h4>Redirect Type</h4>
         <select id="only-embed">
@@ -225,54 +234,111 @@
 
       <hr>
 
-      <div class="some-block option-block">
-        <h4>Default Instances</h4>
-      </div>
-      <div class="checklist" id="invidious-checklist">
-      </div>
-      <hr>
-      <div class="some-block option-block">
-        <h4>Custom Instances</h4>
+
+      <div id="invidious-normal">
+        <div class="some-block option-block">
+          <h4>Default Instances</h4>
+        </div>
+        <div class="checklist" id="invidious-normal-checklist">
+        </div>
+        <hr>
+        <div class="some-block option-block">
+          <h4>Custom Instances</h4>
+        </div>
+        <form id="custom-invidious-normal-instance-form">
+          <div class="some-block option-block">
+            <input id="invidious-normal-custom-instance" placeholder="https://invidious.com" type="url" />
+            <button type="submit" class="add" id="invidious-normal-add-instance">
+              <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
+                fill="currentColor">
+                <path d="M0 0h24v24H0V0z" fill="none" />
+                <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
+              </svg>
+            </button>
+          </div>
+        </form>
+        <div class="checklist" id="invidious-normal-custom-checklist"></div>
       </div>
-      <form id="custom-invidious-instance-form">
+
+      <div id="invidious-tor">
+        <div class="some-block option-block">
+          <h4>Default Instances</h4>
+        </div>
+        <div class="checklist" id="invidious-tor-checklist">
+        </div>
+        <hr>
         <div class="some-block option-block">
-          <input id="invidious-custom-instance" placeholder="https://invidious.com" type="url" />
-          <button type="submit" class="add" id="invidious-add-instance">
-            <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
-              <path d="M0 0h24v24H0V0z" fill="none" />
-              <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
-            </svg>
-          </button>
+          <h4>Custom Instances</h4>
         </div>
-      </form>
-      <div class="checklist" id="invidious-custom-checklist"></div>
+        <form id="custom-invidious-tor-instance-form">
+          <div class="some-block option-block">
+            <input id="invidious-tor-custom-instance" placeholder="https://invidious.com" type="url" />
+            <button type="submit" class="add" id="invidious-tor-add-instance">
+              <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
+                fill="currentColor">
+                <path d="M0 0h24v24H0V0z" fill="none" />
+                <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
+              </svg>
+            </button>
+          </div>
+        </form>
+        <div class="checklist" id="invidious-tor-custom-checklist"></div>
+      </div>
 
     </div>
 
     <div id="piped">
       <hr>
 
-      <div class="some-block option-block">
-        <h4>Default Instances</h4>
-      </div>
-      <div class="checklist" id="piped-checklist">
-      </div>
-      <hr>
-      <div class="some-block option-block">
-        <h4>Custom Instances</h4>
+      <div id="piped-normal">
+        <div class="some-block option-block">
+          <h4>Default Instances</h4>
+        </div>
+        <div class="checklist" id="piped-normal-checklist">
+        </div>
+        <hr>
+        <div class="some-block option-block">
+          <h4>Custom Instances</h4>
+        </div>
+        <form id="custom-piped-normal-instance-form">
+          <div class="some-block option-block">
+            <input id="piped-normal-custom-instance" placeholder="https://piped.com" type="url" />
+            <button type="submit" class="add" id="piped-normal-add-instance">
+              <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
+                fill="currentColor">
+                <path d="M0 0h24v24H0V0z" fill="none" />
+                <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
+              </svg>
+            </button>
+          </div>
+        </form>
+        <div class="checklist" id="piped-normal-custom-checklist"></div>
       </div>
-      <form id="custom-piped-instance-form">
+
+      <div id="piped-tor">
         <div class="some-block option-block">
-          <input id="piped-custom-instance" placeholder="https://piped.com" type="url" />
-          <button type="submit" class="add" id="piped-add-instance">
-            <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
-              <path d="M0 0h24v24H0V0z" fill="none" />
-              <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
-            </svg>
-          </button>
+          <h4>Default Instances</h4>
         </div>
-      </form>
-      <div class="checklist" id="piped-custom-checklist"></div>
+        <div class="checklist" id="piped-tor-checklist">
+        </div>
+        <hr>
+        <div class="some-block option-block">
+          <h4>Custom Instances</h4>
+        </div>
+        <form id="custom-piped-tor-instance-form">
+          <div class="some-block option-block">
+            <input id="piped-tor-custom-instance" placeholder="https://piped.com" type="url" />
+            <button type="submit" class="add" id="piped-tor-add-instance">
+              <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
+                fill="currentColor">
+                <path d="M0 0h24v24H0V0z" fill="none" />
+                <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
+              </svg>
+            </button>
+          </div>
+        </form>
+        <div class="checklist" id="piped-tor-custom-checklist"></div>
+      </div>
     </div>
 
   </section>
diff --git a/src/pages/options/youtube/youtube.js b/src/pages/options/youtube/youtube.js
index 61d2ec53..d62bdad6 100644
--- a/src/pages/options/youtube/youtube.js
+++ b/src/pages/options/youtube/youtube.js
@@ -103,6 +103,35 @@ alwaysUsePreferredElement.addEventListener("change",
     (event) => youtubeHelper.setAlwaysusePreferred(event.target.checked)
 );
 
+let protocolElement = document.getElementById("protocol")
+protocolElement.addEventListener("change",
+    (event) => {
+        let protocol = event.target.options[protocolElement.selectedIndex].value
+        youtubeHelper.setProtocol(protocol);
+        changeProtocolSettings(protocol);
+    }
+);
+
+function changeProtocolSettings(protocol) {
+    let normalPipedDiv = document.getElementById("piped-normal");
+    let torPipedDiv = document.getElementById("piped-tor");
+
+    let normalInvidiousDiv = document.getElementById("invidious-normal");
+    let torInvidiousDiv = document.getElementById("invidious-tor");
+    if (protocol == 'normal') {
+        normalPipedDiv.style.display = 'block';
+        normalInvidiousDiv.style.display = 'block';
+        torInvidiousDiv.style.display = 'none';
+        torPipedDiv.style.display = 'none';
+    }
+    else if (protocol == 'tor') {
+        normalPipedDiv.style.display = 'none';
+        normalInvidiousDiv.style.display = 'none';
+        torInvidiousDiv.style.display = 'block';
+        torPipedDiv.style.display = 'block';
+    }
+}
+
 youtubeHelper.init().then(() => {
     disableYoutubeElement.checked = !youtubeHelper.getDisable();
     themeElement.checked = youtubeHelper.getTheme();
@@ -115,6 +144,10 @@ youtubeHelper.init().then(() => {
     youtubeFrontendElement.value = frontend;
     changeFrontendsSettings(frontend);
 
+    let protocol = youtubeHelper.getprotocol();
+    protocolElement.value = protocol;
+    changeProtocolSettings(protocol);
+
     let freetubeFrontend = youtubeHelper.getFreetubeFrontend()
     freetubeFrontendElement.value = freetubeFrontend
     if (frontend == "freetube") changeFreetubeFrontendsSettings(freetubeFrontend);
diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html
index f42a0889..8cf52e32 100644
--- a/src/pages/popup/popup.html
+++ b/src/pages/popup/popup.html
@@ -141,35 +141,18 @@
       </svg>
       <h4>Medium</h4>
     </div>
-
     <input id="disable-medium" type="checkbox" checked />
   </div>
 
   <div class="buttons">
     <a class="button" id="more-options">
-      <span data-localise="__MSG_moreOptions__">More Options&nbsp;</span>
-      <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
-        <path d="M384,224V408a40,40,0,0,1-40,40H104a40,40,0,0,1-40-40V168a40,40,0,0,1,40-40H271.48" style="
-            fill: none;
-            stroke: inherit;
-            stroke-linecap: round;
-            stroke-linejoin: round;
-            stroke-width: 32px;
-          " />
-        <polyline points="336 64 448 64 448 176" style="
-            fill: none;
-            stroke: inherit;
-            stroke-linecap: round;
-            stroke-linejoin: round;
-            stroke-width: 32px;
-          " />
-        <line x1="224" y1="288" x2="440" y2="72" style="
-            fill: none;
-            stroke: inherit;
-            stroke-linecap: round;
-            stroke-linejoin: round;
-            stroke-width: 32px;
-          " />
+      <span>Settings&nbsp;</span>
+      <svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24"
+        width="24px" fill="currentColor">
+        <g>
+          <path
+            d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z" />
+        </g>
       </svg>
     </a>
   </div>
diff --git a/src/pages/popup/style.css b/src/pages/popup/style.css
index 05c3947a..f223ec52 100644
--- a/src/pages/popup/style.css
+++ b/src/pages/popup/style.css
@@ -1,5 +1,4 @@
 body {
     width: 230px;
     min-height: auto;
-    background-color: var(--bg-main);
 }
\ No newline at end of file