about summary refs log tree commit diff stats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--README.md4
-rw-r--r--_locales/en/messages.json4
-rw-r--r--_locales/en/store.md12
-rw-r--r--_locales/fr/messages.json8
-rw-r--r--_locales/pl/messages.json110
-rw-r--r--_locales/pl/store.md32
-rw-r--r--_locales/zh-CN/messages.json110
-rw-r--r--_locales/zh-CN/store.md33
-rw-r--r--assets/javascript/remove-twitter-sw.js2
-rw-r--r--background.js32
-rw-r--r--pages/options/options.html25
-rw-r--r--pages/options/options.js7
12 files changed, 359 insertions, 20 deletions
diff --git a/README.md b/README.md
index 0e710e5a..4b3ceec5 100644
--- a/README.md
+++ b/README.md
@@ -6,9 +6,9 @@
 
 [![Firefox Add-on](assets/images/badge-amo.png)](https://addons.mozilla.org/en-US/firefox/addon/privacy-redirect/) [![Chrome Extension](assets/images/badge-chrome.png)](https://chrome.google.com/webstore/detail/privacy-redirect/pmcmeagblkinmogikoikkdjiligflglb) [![Edge Extension](assets/images/badge-ms.png)](https://microsoftedge.microsoft.com/addons/detail/privacy-redirect/elnabkhcgpajchapppkhiaifkgikgihj)
 
-A web extension that redirects Twitter, YouTube, Instagram & Google Maps requests to privacy friendly alternatives - [Nitter](https://github.com/zedeus/nitter), [Invidious](https://github.com/omarroth/invidious), [Bibliogram](https://github.com/cloudrac3r/bibliogram) & [OpenStreetMap](https://www.openstreetmap.org/).
+A web extension that redirects Twitter, YouTube, Instagram & Google Maps requests to privacy friendly alternatives - [Nitter](https://github.com/zedeus/nitter), [Invidious](https://github.com/omarroth/invidious), [Bibliogram](https://sr.ht/~cadence/bibliogram/) & [OpenStreetMap](https://www.openstreetmap.org/).
 
-Allows for setting custom [Nitter](https://github.com/zedeus/nitter/wiki/Instances), [Invidious](https://github.com/omarroth/invidious/wiki/Invidious-Instances), [Bibliogram](https://github.com/cloudrac3r/bibliogram/wiki/Instances) & [OpenStreetMap](https://wiki.openstreetmap.org/wiki/Tile_servers) instances and toggling all redirects on & off.
+Allows for setting custom [Nitter](https://github.com/zedeus/nitter/wiki/Instances), [Invidious](https://github.com/omarroth/invidious/wiki/Invidious-Instances), [Bibliogram](https://git.sr.ht/~cadence/bibliogram-docs/tree/master/docs/Instances.md) & [OpenStreetMap](https://wiki.openstreetmap.org/wiki/Tile_servers) instances and toggling all redirects on & off.
 
 ## Build
 
diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 2e106a7c..096deaa0 100644
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -106,5 +106,9 @@
   "version": {
     "message": "Version",
     "description": "Version"
+  },
+  "useFreeTube": {
+    "message": "Use FreeTube over Invidious when possible",
+    "description": "Label for 'Use FreeTube over Invidious when possible' option (options)."
   }
 }
diff --git a/_locales/en/store.md b/_locales/en/store.md
index deef0093..7461ee5e 100644
--- a/_locales/en/store.md
+++ b/_locales/en/store.md
@@ -1,10 +1,13 @@
 # Extension Store (AMO & Chrome Web Store) Listing
 
 ## Summary:
+
 ```
 A simple web extension that redirects Twitter, YouTube, Instagram & Google Maps requests to privacy friendly alternatives.
 ```
+
 ## Description:
+
 ```
 Redirects Twitter, YouTube, Instagram, & Google Maps requests to privacy friendly alternatives - <a href='https://nitter.net/'>Nitter</a>, <a href='https://invidio.us/'>Invidious</a>, <a href='https://bibliogram.art/'>Bibliogram</a>, & <a href='https://www.openstreetmap.org'>OpenStreetMap</a>.
 
@@ -23,10 +26,13 @@ The code for this web extension is available on <a href='https://github.com/Simo
 <b>★ Donate: 👨🏻‍💻</b>
 If you like this extension and are financially able please consider <a href='https://www.buymeacoffee.com/SimonBrazell'>buying me a coffee</a> ☕️ ️to show your appreciation and support the continuation of the project.
 
-<b>★ What's New in This Version (v1.1.36) 🆕</b>
+<b>★ What's New in This Version (v1.1.42) 🆕</b>
 <ul>
-  <li>Added Russian language translation.</li>
-  <li>Fix Invidious autoplay parameter.</li>
+  <li>Added Polish language translation.</li>
+  <li>Added Chinese language translation.</li>
+  <li>Pruned the Invidious random instances list.</li>
+  <li>Added support for FreeTube redirects (where possible).</li>
+  <li>Handle /igtv/, /tv/ and /reel/ redirects to Bibliogram correctly.</li>
 </ul>
 
 <b>★ Permissions: ℹ️</b>
diff --git a/_locales/fr/messages.json b/_locales/fr/messages.json
index ee5703aa..7b66ab42 100644
--- a/_locales/fr/messages.json
+++ b/_locales/fr/messages.json
@@ -52,16 +52,16 @@
     "description": "Libellé pour l'option 'Qualité des vidéos Invidious' (options)."

   },

   "removeTwitterSW": {

-    "message": "Supprimer proactivement le service Twitter",

-    "description": "Libellé pour l'option 'Supprimer proactivement le service Twitter' (options)."

+    "message": "Supprimer proactivement le service worker de Twitter",

+    "description": "Libellé pour l'option 'Supprimer proactivement le service worker de Twitter' (options)."

   },

   "invidiousDarkMode": {

     "message": "Mode sombre toujours activé pour Invidious",

     "description": "Libellé pour l'option 'Mode sombre toujours activé pour Invidious' (options)."

   },

   "persistInvidiousPrefs": {

-    "message": "Conserver les préférences malveillantes (sous forme de cookie)",

-    "description": "Libellé pour 'Conserver les préférences malveillantes (sous forme de cookie)' option (options)."

+    "message": "Conserver les préférences d’Invidious (sous forme de cookie)",

+    "description": "Libellé pour 'Conserver les préférences d’Invidious (sous forme de cookie)' option (options)."

   },

   "generalTab": {

     "message": "Général",

diff --git a/_locales/pl/messages.json b/_locales/pl/messages.json
new file mode 100644
index 00000000..85877663
--- /dev/null
+++ b/_locales/pl/messages.json
@@ -0,0 +1,110 @@
+{
+  "extensionName": {
+    "message": "Privacy Redirect",
+    "description": "Nazwa rozszerzenia."
+  },
+  "extensionDescription": {
+    "message": "Przekierowuje serwisy takie jak: Twitter, YouTube, Instagram i Google Maps do alternatyw sprzyjających prywatności.",
+    "description": "Opis rozszerzenia."
+  },
+  "nitterInstance": {
+    "message": "Instancja Nitter",
+    "description": "Etykieta dla pola wyboru instancji Nitter (opcje)."
+  },
+  "invidiousInstance": {
+    "message": "Instancja Invidious",
+    "description": "Etykieta dla pola wyboru instancji Invidious (opcje)."
+  },
+  "bibliogramInstance": {
+    "message": "Instancja Bibliogram",
+    "description": "Etykieta dla pola wyboru instancji Bibliogram (opcje)."
+  },
+  "osmInstance": {
+    "message": "Instancja OpenStreetMap",
+    "description": "Etykieta dla pola wyboru instancji OpenStreetMap (opcje)."
+  },
+  "disableNitter": {
+    "message": "Przekierowanie Nitter",
+    "description": "Etykieta dla włączenia/wyłączenia opcji przekierowania Nitter (opcje i okno pop-up)."
+  },
+  "disableInvidious": {
+    "message": "Przekierowanie Invidious ",
+    "description": "Etykieta dla włączenia/wyłączenia opcji przekierowania Invidious (opcje i okno pop-up)."
+  },
+  "disableBibliogram": {
+    "message": "Przekierowanie Bibliogram",
+    "description": "Etykieta dla włączenia/wyłączenia opcji przekierowania Bibliogram (opcje i okno pop-up)."
+  },
+  "disableOsm": {
+    "message": "Przekierowanie OpenStreetMap",
+    "description": "Etykieta dla włączenia/wyłączenia opcji przekierowania OpenStreetMap (opcje i okno pop-up)."
+  },
+  "alwaysProxy": {
+    "message": "Zawsze buforuj i wyświetlaj odnośniki wideo z YouTube poprzez Invidious",
+    "description": "Etykieta dla opcji 'Zawsze buforuj i wyświetlaj odnośniki wideo poprzez Invidious'."
+  },
+  "onlyEmbeddedVideo": {
+    "message": "Jedynie przekieruj odnośniki wideo do instancji Invidious",
+    "description": "Etykieta dla opcji 'Jedynie przekieruj odnośniki wideo do instancji Invidious'."
+  },
+  "videoQuality": {
+    "message": "Jakość wideo Invidious",
+    "description": "Etykieta dla opcji 'Jakość wideo Invidious'."
+  },
+  "removeTwitterSW": {
+    "message": "Proaktywnie usuwaj skrypty serwisowe (service worker) Twittera",
+    "description": "Etykieta dla opcji 'Proaktywnie usuwaj skrypty serwisowe (service worker) Twittera'."
+  },
+  "invidiousDarkMode": {
+    "message": "Tryb ciemny dla Invidious zawsze włączony",
+    "description": "Etykieta dla opcji 'Tryb ciemny dla Invidious zawsze włączony'."
+  },
+  "persistInvidiousPrefs": {
+    "message": "Zapisz ustawienia Invidious (jako plik cookie)",
+    "description": "Etykieta dla 'Zapisz ustawienia Invidious (jako plik cookie)'."
+  },
+  "generalTab": {
+    "message": "Główne",
+    "description": "Zakładka Główne (opcje)."
+  },
+  "advancedTab": {
+    "message": "Advanced",
+    "description": "Zakładka zaawansowane (opcje)."
+  },
+  "exceptionsTab": {
+    "message": "Wyjątki",
+    "description": "Zakładka wyjątki (opcje)."
+  },
+  "exceptionsDescriptionP1": {
+    "message": "Wprowadź adres URL lub wyrażenie regularne, które zostanie wyłączone z przekierowania. ",
+    "description": "Opis funkcji 'Wyjątki' paragraf 1 (opcje)."
+  },
+  "exceptionsDescriptionP2": {
+    "message": "Wszystkie żądania dla lub inicjalizujące z adresu URL które spełniają wyjątek zostaną wyłączone z przekierowania.",
+    "description": "Opis funkcji 'Wyjątki' paragraf 2 (opcje)."
+  },
+  "exceptionsDescriptionP3": {
+    "message": "Informacja - Wspierane są  wyrażenia regularne JavaScript, wyłączając ukośniki lewe zamykające.",
+    "description": "Opis funkcji 'Wyjątki' paragraf 3 (opcje)."
+  },
+  "addException": {
+    "message": "Dodaj wyjątek",
+    "description": "Przycisk 'Dodaj wyjątek' (opcje)."
+  },
+  "moreOptions": {
+    "message": "Więcej opcji",
+    "description": "Przycisk 'Więcej opcji' (okno pop-up)."
+  },
+  "privacy": {
+    "message": "Prywatność",
+    "description": "Tytuł rozszerzenia - Privacy (okno pop-up)."
+  },
+  "redirect": {
+    "message": "Redirect",
+    "description": "Tytuł rozszerzenia - Redirect (pop-up)."
+  },
+  "version": {
+    "message": "Version",
+    "description": "Wersja"
+  }
+}
diff --git a/_locales/pl/store.md b/_locales/pl/store.md
new file mode 100644
index 00000000..575e15b6
--- /dev/null
+++ b/_locales/pl/store.md
@@ -0,0 +1,32 @@
+# Extension Store (AMO & Chrome Web Store) Listing
+
+## Summary:
+
+```
+Prosta wtyczka która przekierowuje żądania Twitter, YouTube, Instagram oraz Google Maps na odpowiedniki przyjazne dla prywatności.
+```
+
+## Description:
+
+```
+Przekierowuje żądania Twitter, YouTube, Instagram oraz Google Maps na odpowiedniki przyjazne dla prywatności - <a href='https://nitter.net/'>Nitter</a>, <a href='https://invidio.us/'>Invidious</a>, <a href='https://bibliogram.art/'>Bibliogram</a>, & <a href='https://www.openstreetmap.org'>OpenStreetMap</a>.
+
+Umożliwia ustawienie niestandardowych instancji usług, przełączania przekierowania jako aktywne/nieaktwne i o wiele więcej.
+<b>★ Więcej informacji: ℹ️</b>
+<ul>
+  <li><a href='https://github.com/zedeus/nitter#nitter-wip'>Nitter</a></li>
+  <li><a href='https://github.com/omarroth/invidious#invidious'>Invidious</a></li>
+  <li><a href='https://github.com/cloudrac3r/bibliogram#bibliogram'>Bibliogram</a></li>
+  <li><a href='https://wiki.openstreetmap.org/'>OpenStreetMap</a></li>
+</ul>
+
+Kod źródłowy tego rozszerzenia jest dostępny na: <a href='https://github.com/SimonBrazell/privacy-redirect'>Github</a>.
+
+<b>★ Donate: 👨🏻‍💻</b>
+Jeżeli lubisz to rozszerzenie i chcesz wesprzeć autora finanosowo, proszę pomyśl o <a href='https://www.buymeacoffee.com/SimonBrazell'>zaserwowaniu małej czarnej</a> ☕️ ️aby pokazać swoją wdzięczność i wesprzeć możliwości kontynuowania projektu.
+
+<b>★ Uprawnienia: ℹ️</b>
+<ul>
+  <li>Zwróć uwagę, że dostęp do wszystkich zdarzeń dotyczących nawigacji po stronach (wszystkie adresy URL) jest wymagany dla poprawnego odtwarzania osadzonych plików wideo. Obecnie nie znam innych możliwości aby obsłużyć przekierowania ramek iFrame, będę wdzięczny za sugestie 🙂</li>
+</ul>
+```
diff --git a/_locales/zh-CN/messages.json b/_locales/zh-CN/messages.json
new file mode 100644
index 00000000..8c19e2de
--- /dev/null
+++ b/_locales/zh-CN/messages.json
@@ -0,0 +1,110 @@
+{
+  "extensionName": {
+    "message": "Privacy Redirect",
+    "description": "Name of the extension."
+  },
+  "extensionDescription": {
+    "message": "将 Twitter、YouTube、Instagram 和 Google Maps 重定向至尊重隐私的替代品",
+    "description": "Description of the extension."
+  },
+  "nitterInstance": {
+    "message": "Nitter 实例",
+    "description": "Label for Nitter instance field option (options)."
+  },
+  "invidiousInstance": {
+    "message": "Invidious 实例",
+    "description": "Label for Invidious instance field option (options)."
+  },
+  "bibliogramInstance": {
+    "message": "Bibliogram 实例",
+    "description": "Label for Bibliogram instance field option (options)."
+  },
+  "osmInstance": {
+    "message": "OpenStreetMap 实例",
+    "description": "Label for OSM instance field option (options)."
+  },
+  "disableNitter": {
+    "message": "Nitter 重定向",
+    "description": "Label for enable/disable Nitter redirects option (options & pop-up)."
+  },
+  "disableInvidious": {
+    "message": "Invidious 重定向",
+    "description": "Label for enable/disable Invidious redirects option (options & pop-up)."
+  },
+  "disableBibliogram": {
+    "message": "Bibliogram 重定向",
+    "description": "Label for enable/disable Bibliogram redirects option (options & pop-up)."
+  },
+  "disableOsm": {
+    "message": "OpenStreetMap 重定向",
+    "description": "Label for enable/disable OSM redirects option (options & pop-up)."
+  },
+  "alwaysProxy": {
+    "message": "使用 Invidious 时始终使用视频代理",
+    "description": "Label for 'Always proxy videos through Invidious' option (options)."
+  },
+  "onlyEmbeddedVideo": {
+    "message": "只重定向嵌入视频至 Invidious",
+    "description": "Label for 'Only redirect embedded video to Invidious' option (options)."
+  },
+  "videoQuality": {
+    "message": "Invidious 视频画质",
+    "description": "Label for 'Invidious Video Quality' option (options)."
+  },
+  "removeTwitterSW": {
+    "message": "主动移除 Twitter 后台脚本",
+    "description": "Label for 'Proactively remove Twitter service worker' option (options)."
+  },
+  "invidiousDarkMode": {
+    "message": "Invidious 始终使用夜间模式",
+    "description": "Label for 'Invidious dark mode always on' option (options)."
+  },
+  "persistInvidiousPrefs": {
+    "message": "以 cookie 形式记住 Invidious 设置",
+    "description": "Label for 'Persist Invidious preferences (as cookie)' option (options)."
+  },
+  "generalTab": {
+    "message": "常规",
+    "description": "General tab (options)."
+  },
+  "advancedTab": {
+    "message": "高级",
+    "description": "Advanced tab (options)."
+  },
+  "exceptionsTab": {
+    "message": "例外",
+    "description": "Exceptions tab (options)."
+  },
+  "exceptionsDescriptionP1": {
+    "message": "请输入一个不要重定向 URL 链接或正则表达式。",
+    "description": "A description of the 'Exceptions' feature paragraph 1 (options)."
+  },
+  "exceptionsDescriptionP2": {
+    "message": "若发起请求或访问的页面 URL 符合任一表达式,则插件将不会将其重定向。",
+    "description": "A description of the 'Exceptions' feature paragraph 2 (options)."
+  },
+  "exceptionsDescriptionP3": {
+    "message": "注:支持 JavaScript 正则表达式,且无须用正斜杠始末。",
+    "description": "A description of the 'Exceptions' feature paragraph 3 (options)."
+  },
+  "addException": {
+    "message": "添加例外",
+    "description": "'Add Exceptions' button (options)."
+  },
+  "moreOptions": {
+    "message": "更多设置",
+    "description": "More Options button (pop-up)."
+  },
+  "privacy": {
+    "message": "Privacy",
+    "description": "Extension title - Privacy (pop-up)."
+  },
+  "redirect": {
+    "message": "Redirect",
+    "description": "Extension title - Redirect (pop-up)."
+  },
+  "version": {
+    "message": "版本",
+    "description": "Version"
+  }
+}
diff --git a/_locales/zh-CN/store.md b/_locales/zh-CN/store.md
new file mode 100644
index 00000000..964debf6
--- /dev/null
+++ b/_locales/zh-CN/store.md
@@ -0,0 +1,33 @@
+# Extension Store (AMO & Chrome Web Store) Listing
+
+## Summary:
+
+```
+一个简单的扩展程序来将 Twitter、YouTube、Instagram 和 Google地图重定向至尊重隐私的替代品。
+```
+
+## Description:
+
+```
+将 Twitter、YouTube、Instagram 和 Google地图重定向至尊重隐私的替代品: <a href='https://nitter.net/'>Nitter</a>、<a href='https://invidio.us/'>Invidious</a>、<a href='https://bibliogram.art/'>Bibliogram</a> 和 <a href='https://www.openstreetmap.org'>OpenStreetMap</a>。
+
+允许自定义实例,开关重定向等设定。
+
+<b>★ 更多详细:ℹ️</b>
+<ul>
+  <li><a href='https://github.com/zedeus/nitter#nitter-wip'>Nitter</a></li>
+  <li><a href='https://github.com/iv-org/invidious#invidious'>Invidious</a></li>
+  <li><a href='https://sr.ht/~cadence/bibliogram/#a-hrefhttpsbibliogramartbibliograma'>Bibliogram</a></li>
+  <li><a href='https://wiki.openstreetmap.org/'>OpenStreetMap</a></li>
+</ul>
+
+本扩展的源代码可在 <a href='https://github.com/SimonBrazell/privacy-redirect'>Github</a> 上查看。
+
+<b>★ 捐赠:👨🏻‍💻</b>
+若您喜欢本扩展程序,且有闲钱,不妨<a href='https://www.buymeacoffee.com/SimonBrazell'>给我买杯咖啡</a>来表达您对这个项目的感谢与支持。
+
+<b>★ 权限:ℹ️</b>
+<ul>
+  <li>请注意,您需授予查看所有 URL(不只是需要重定向的URL)网站导向活动的权限,以来重定向嵌入的视频。目前我不知道其他重定向iframe的方法,有能者请解囊相助! 🙂</li>
+</ul>
+```
diff --git a/assets/javascript/remove-twitter-sw.js b/assets/javascript/remove-twitter-sw.js
index 222a7283..fe718fd4 100644
--- a/assets/javascript/remove-twitter-sw.js
+++ b/assets/javascript/remove-twitter-sw.js
@@ -81,7 +81,7 @@ browser.storage.sync.get(
         }
       });
       const url = new URL(window.location);
-      if (shouldRedirect()) {
+      if (shouldRedirect(url)) {
         const redirect = redirectTwitter(url);
         console.info("Redirecting", `"${url.href}"`, "=>", `"${redirect}"`);
         window.location = redirect;
diff --git a/background.js b/background.js
index 94cb616c..ad9d3c45 100644
--- a/background.js
+++ b/background.js
@@ -13,13 +13,11 @@ const youtubeDomains = [
 ];
 const invidiousInstances = [
   "https://invidious.snopyta.org",
-  "https://yewtu.be",
-  "https://invidious.13ad.de",
-  "https://invidious.xyz",
   "https://invidious.site",
+  "https://invidious.zapashcanon.fr",
   "https://invidiou.site",
-  "https://invidious.fdn.fr",
-  "https://invidious.toot.koeln",
+  "https://invidious.kavin.rocks",
+  "https://tube.connect.cafe",
 ];
 const twitterDomains = [
   "twitter.com",
@@ -41,6 +39,8 @@ const nitterInstances = [
   "https://nitter.fdn.fr",
   "https://nitter.1d4.us",
   "https://nitter.kavin.rocks",
+  "https://nitter.dark.fail",
+  "https://tweet.lambda.dance",
 ];
 const instagramDomains = [
   "instagram.com",
@@ -70,6 +70,8 @@ const instagramReservedPaths = [
   "imageproxy",
   "videoproxy",
   ".well-known",
+  "tv",
+  "reel",
 ];
 const bibliogramBypassPaths = /\/(accounts\/|embeds?.js)/;
 const bibliogramInstances = [
@@ -78,9 +80,10 @@ const bibliogramInstances = [
   "https://bibliogram.pussthecat.org",
   "https://bibliogram.nixnet.services",
   "https://bg.endl.site",
-  "https://bibliogram.13ad.de	",
-  "https://bibliogram.stemy.me	",
+  "https://bibliogram.13ad.de",
+  "https://bibliogram.pixelfed.uno",
   "https://bibliogram.hamster.dance",
+  "https://bibliogram.kavin.rocks",
   "https://bibliogram.ggc-project.de",
 ];
 const osmDefault = "https://openstreetmap.org";
@@ -131,6 +134,7 @@ let invidiousVolume;
 let invidiousPlayerStyle;
 let invidiousSubtitles;
 let invidiousAutoplay;
+let useFreeTube;
 let exceptions;
 
 window.browser = window.browser || window.chrome;
@@ -155,6 +159,7 @@ browser.storage.sync.get(
     "invidiousPlayerStyle",
     "invidiousSubtitles",
     "invidiousAutoplay",
+    "useFreeTube",
     "exceptions",
   ],
   (result) => {
@@ -181,6 +186,7 @@ browser.storage.sync.get(
     invidiousPlayerStyle = result.invidiousPlayerStyle;
     invidiousSubtitles = result.invidiousSubtitles || "";
     invidiousAutoplay = result.invidiousAutoplay;
+    useFreeTube = result.useFreeTube;
   }
 );
 
@@ -239,6 +245,9 @@ browser.storage.onChanged.addListener((changes) => {
   if ("invidiousAutoplay" in changes) {
     invidiousAutoplay = changes.invidiousAutoplay.newValue;
   }
+  if ("useFreeTube" in changes) {
+    useFreeTube = changes.useFreeTube.newValue;
+  }
   if ("exceptions" in changes) {
     exceptions = changes.exceptions.newValue.map((e) => {
       return new RegExp(e);
@@ -309,6 +318,9 @@ function redirectYouTube(url, initiator, type) {
   if (onlyEmbeddedVideo && type !== "sub_frame") {
     return null;
   }
+  if (useFreeTube && type !== "sub_frame") {
+    return `freetube://${url}`;
+  }
   // Apply settings
   if (alwaysProxy) {
     url.searchParams.append("local", true);
@@ -330,9 +342,9 @@ function redirectYouTube(url, initiator, type) {
   }
   url.searchParams.append("autoplay", invidiousAutoplay ? 1 : 0);
 
-  return `${invidiousInstance || getRandomInstance(invidiousInstances)}${
-    url.pathname
-  }${url.search}`;
+  return `${
+    invidiousInstance || getRandomInstance(invidiousInstances)
+  }${url.pathname.replace("/shorts", "")}${url.search}`;
 }
 
 function redirectTwitter(url, initiator) {
diff --git a/pages/options/options.html b/pages/options/options.html
index bf9d5cdb..a821524b 100644
--- a/pages/options/options.html
+++ b/pages/options/options.html
@@ -207,6 +207,31 @@
       <section class="settings-block">
         <table
           class="option"
+          aria-label="Redirect YouTube to FreeTube where possible"
+        >
+          <tbody>
+            <tr>
+              <td>
+                <h1 data-localise="__MSG_useFreeTube__">
+                  Use FreeTube over Invidious when possible
+                </h1>
+              </td>
+              <td>
+                <input
+                  aria-hidden="true"
+                  id="useFreeTube"
+                  type="checkbox"
+                  checked
+                />&nbsp;
+                <label for="useFreeTube" class="checkbox-label"> </label>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </section>
+      <section class="settings-block">
+        <table
+          class="option"
           aria-label="Always proxy videos through Invidious"
         >
           <tbody>
diff --git a/pages/options/options.js b/pages/options/options.js
index 65133581..2c3d5df9 100644
--- a/pages/options/options.js
+++ b/pages/options/options.js
@@ -78,6 +78,7 @@ let invidiousPlayerStyle = document.getElementById("invidious-player-style");
 let invidiousSubtitles = document.getElementById("invidious-subtitles");
 let invidiousAutoplay = document.getElementById("invidious-autoplay");
 let theme = document.getElementById("theme");
+let useFreeTube = document.getElementById("useFreeTube");
 let exceptions;
 
 window.browser = window.browser || window.chrome;
@@ -128,6 +129,7 @@ browser.storage.sync.get(
     "invidiousAutoplay",
     "exceptions",
     "theme",
+    "useFreeTube",
   ],
   (result) => {
     theme.value = result.theme || "";
@@ -157,6 +159,7 @@ browser.storage.sync.get(
     invidiousPlayerStyle.value = result.invidiousPlayerStyle || "";
     invidiousSubtitles.value = result.invidiousSubtitles || "";
     invidiousAutoplay.checked = result.invidiousAutoplay;
+    useFreeTube.checked = result.useFreeTube;
   }
 );
 
@@ -339,6 +342,10 @@ persistInvidiousPrefs.addEventListener("change", (event) => {
   browser.storage.sync.set({ persistInvidiousPrefs: event.target.checked });
 });
 
+useFreeTube.addEventListener("change", (event) => {
+  browser.storage.sync.set({ useFreeTube: event.target.checked });
+});
+
 let invidiousVolumeChange = debounce(() => {
   document.querySelector(
     "#volume-value"