From 881514d71caad4b00bad4e7af8d6918d6fc4cdf5 Mon Sep 17 00:00:00 2001 From: Lawrence Hook Date: Wed, 4 Feb 2026 20:14:13 -0500 Subject: [PATCH 01/13] update versions --- src/chrome_manifest.json | 2 +- src/firefox_manifest.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/chrome_manifest.json b/src/chrome_manifest.json index f94bc6f..33bc5ae 100644 --- a/src/chrome_manifest.json +++ b/src/chrome_manifest.json @@ -3,7 +3,7 @@ "description": "Spend less time on YouTube. Customize YouTube's user interface to be less engaging.", "homepage_url": "https://github.com/lawrencehook/remove-youtube-suggestions", "manifest_version": 3, - "version": "4.3.69", + "version": "4.3.70", "icons": { "16": "/images/16.png", diff --git a/src/firefox_manifest.json b/src/firefox_manifest.json index 13ec91d..d7da19e 100644 --- a/src/firefox_manifest.json +++ b/src/firefox_manifest.json @@ -3,7 +3,7 @@ "description": "Spend less time on YouTube. Customize YouTube's user interface to be less engaging.", "homepage_url": "https://github.com/lawrencehook/remove-youtube-suggestions", "manifest_version": 2, - "version": "4.3.69", + "version": "4.3.70", "icons": { "16": "/images/16.png", From 0e21939821511a059c742beb1c5872fb8afc6fa4 Mon Sep 17 00:00:00 2001 From: Lawrence Hook Date: Wed, 4 Feb 2026 20:16:53 -0500 Subject: [PATCH 02/13] fix: remove duplicate function from bad merge --- src/content-script/main.js | 15 --------------- src/options/main.js | 1 - 2 files changed, 16 deletions(-) diff --git a/src/content-script/main.js b/src/content-script/main.js index c774c7d..1272e0c 100644 --- a/src/content-script/main.js +++ b/src/content-script/main.js @@ -547,21 +547,6 @@ document.addEventListener('visibilitychange', () => { }); -function injectAnnouncementBanners() { - if (!onHomepage) return; - if (!document.body) return; - - const logoUrl = browser.runtime.getURL('images/rys.svg'); - const banners = getActiveBanners('youtube_homepage'); - - banners.forEach(banner => { - initBanner(banner, logoUrl, () => ({ - element: document.body, - insertMethod: 'prepend' - })); - }); -} - function injectAnnouncementBanners() { if (!onHomepage) return; if (!document.body) return; diff --git a/src/options/main.js b/src/options/main.js index 3393963..666ee4e 100644 --- a/src/options/main.js +++ b/src/options/main.js @@ -447,7 +447,6 @@ function initAnnouncementBanner() { const logoUrl = browser.runtime.getURL('images/rys.svg'); const banners = getActiveBanners('options'); - banners.forEach(banner => { initBanner(banner, logoUrl, () => ({ element: container, From a69b92a6b809d3cbbcdba67653533ef6bfd0ec6d Mon Sep 17 00:00:00 2001 From: Lawrence Hook Date: Sat, 7 Feb 2026 16:44:17 -0500 Subject: [PATCH 03/13] deprecate disable_playlist_autoplay setting Co-Authored-By: Claude Opus 4.6 --- src/content-script/main.js | 31 ------------------------------- src/shared/main.js | 5 ----- 2 files changed, 36 deletions(-) diff --git a/src/content-script/main.js b/src/content-script/main.js index 1272e0c..d572638 100644 --- a/src/content-script/main.js +++ b/src/content-script/main.js @@ -562,36 +562,6 @@ function injectAnnouncementBanners() { }); } -function injectScripts() { - const on = cache['global_enable'] === true; - if (!on) return; - - // Disable playlist autoplay - if (cache['disable_playlist_autoplay']) { - const existingScript = document.querySelector('script[id="disable_playlist_autoplay"]') - if (existingScript) return; - - const script = document.createElement("script"); - script.id = 'disable_playlist_autoplay'; - script.type = "text/javascript"; - script.innerText = ` -(function() { -let pm, intervalId; -function f() { - if (!pm) pm = document.querySelector('yt-playlist-manager'); - if (pm) { - pm.canAutoAdvance_ = false; - if (intervalId) clearInterval(intervalId); - } -} -f(); -intervalId = setInterval(f, 100); -})() -`; - document.body?.appendChild(script); - } - -} function handleNewPage() { @@ -658,7 +628,6 @@ function handleNewPage() { } } - injectScripts(); injectAnnouncementBanners(); requestRunDynamicSettings(); } diff --git a/src/shared/main.js b/src/shared/main.js index edf5348..21a3ecf 100644 --- a/src/shared/main.js +++ b/src/shared/main.js @@ -241,11 +241,6 @@ const SECTIONS = [ id: "expand_description", defaultValue: false }, - { - name: "Disable autoplay for playlists", - id: "disable_playlist_autoplay", - defaultValue: false - }, { name: "Disable scroll in fullscreen", id: "disable_fullscreen_scroll", From 182f6489ef73d3b6e63fc6ece0bca640913ce1d0 Mon Sep 17 00:00:00 2001 From: Lawrence Hook Date: Sat, 7 Feb 2026 16:55:17 -0500 Subject: [PATCH 04/13] add deprecation comment for disable_playlist_autoplay Co-Authored-By: Claude Opus 4.6 --- src/shared/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/main.js b/src/shared/main.js index 21a3ecf..e66a18b 100644 --- a/src/shared/main.js +++ b/src/shared/main.js @@ -666,7 +666,7 @@ const idToShortId = { "disable_autoplay": '22', "disable_ambient_mode": '23', "disable_annotations": '24', - "disable_playlist_autoplay": '25', + "disable_playlist_autoplay": '25', // deprecated "normalize_shorts": '26', "remove_entire_sidebar": '27', "remove_info_cards": '28', From 4b4fb7722d8711be4f3a6eef419a9eef122ddba9 Mon Sep 17 00:00:00 2001 From: prinixoz <95567832+prinixoz@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:27:27 +0000 Subject: [PATCH 05/13] hide result description (#197) * hide description #188 * add idToShortId entry and fix extra whitespace Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: prinixoz Co-authored-by: Lawrence Hook Co-authored-by: Claude Opus 4.6 --- src/content-script/main.css | 8 ++++++++ src/shared/main.js | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/src/content-script/main.css b/src/content-script/main.css index ac9ea84..6d44ab9 100644 --- a/src/content-script/main.css +++ b/src/content-script/main.css @@ -94,6 +94,14 @@ html[global_enable="true"][remove_comment_upvotes="true"] #vote-count-middle.ytd html[global_enable="true"][remove_search_suggestions="true"] div.sbdd_a, html[global_enable="true"][remove_search_promoted="true"] #container.ytd-search ytd-search-pyv-renderer, html[global_enable="true"][remove_shorts_results="true"] #container.ytd-search ytd-video-renderer[is_short="true"], + +html[global_enable="true"][remove_results_description="true"] #contents .metadata-snippet-container, +html[global_enable="true"][remove_results_description="true"] #contents .metadata-snippet-container-one-line, +html[global_enable="true"][remove_results_description="true"] #contents #description-text, +html[global_enable="true"][remove_results_description="true"] #contents #description, +html[global_enable="true"][remove_results_description="true"] #contents ytd-expandable-metadata-renderer, +html[global_enable="true"][remove_results_description="true"] #contents ytd-badge-supported-renderer, + html[global_enable="true"][remove_shorts_results="true"] #container.ytd-search ytd-reel-shelf-renderer, html[global_enable="true"][remove_shorts_results="true"] #container.ytd-search grid-shelf-view-model.ytGridShelfViewModelHostHasBottomButton.ytd-item-section-renderer.ytGridShelfViewModelHost, html[global_enable="true"][remove_extra_results="true"] #container.ytd-search ytd-shelf-renderer, diff --git a/src/shared/main.js b/src/shared/main.js index e66a18b..8c5b2f7 100644 --- a/src/shared/main.js +++ b/src/shared/main.js @@ -408,6 +408,11 @@ const SECTIONS = [ id: "remove_shorts_results", defaultValue: false }, + { + name: "Hide result description", + id: "remove_results_description", + defaultValue: false + }, { name: "Hide results - For You, Trending, etc.", id: "remove_extra_results", @@ -734,6 +739,7 @@ const idToShortId = { "add_reveal_button": '90', // deprecated; migrated to add_reveal_* settings "remove_sidebar_infinite_scroll": '91', "log_prompt_answered": '92', + "remove_results_description": '93', }; From 3ef38334e9d07787ce5cbb9ffc289d4e3e456580 Mon Sep 17 00:00:00 2001 From: GeleArthur <36110378+GeleArthur@users.noreply.github.com> Date: Sat, 7 Feb 2026 14:29:11 -0800 Subject: [PATCH 06/13] Hide bell notifcations number in page titlle (#199) * Added removing the bell in the title * add comment on what it does * Start of title * style: fix spacing in if statement Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Lawrence Hook Co-authored-by: Claude Opus 4.6 --- src/content-script/main.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/content-script/main.js b/src/content-script/main.js index d572638..03f2104 100644 --- a/src/content-script/main.js +++ b/src/content-script/main.js @@ -418,6 +418,11 @@ function runDynamicSettings() { } } + // Hide notification number in title + if (cache['remove_notif_bell']) { + document.title = document.title.replace(/^\(\d+\)/g, ''); + } + // Show video length when thumbnails are hidden if (cache['search_engine_mode'] || cache['remove_video_thumbnails']) { const thumbnails = qsa('ytd-thumbnail'); From f8379f3e8865465b6a2a32197cfc505f2139ef17 Mon Sep 17 00:00:00 2001 From: prinixoz <95567832+prinixoz@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:36:07 +0000 Subject: [PATCH 07/13] fixed shrinking issue in channel tab (#196) * fixed shrinking issue in channel tab * fixed playlist video shirinking and overlapping in channel pages * fixed post shirinking * style: fix whitespace in shrink thumbnails CSS Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: prinixoz Co-authored-by: Lawrence Hook Co-authored-by: Claude Opus 4.6 --- src/content-script/main.css | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/content-script/main.css b/src/content-script/main.css index 6d44ab9..c6b687f 100644 --- a/src/content-script/main.css +++ b/src/content-script/main.css @@ -180,9 +180,12 @@ html[global_enable="true"][blur_video_thumbnails="true"] .video-thumbnail-img { /* Shrink thumbnails */ html[global_enable="true"][shrink_video_thumbnails="true"] ytd-thumbnail, html[global_enable="true"][shrink_video_thumbnails="true"] ytd-playlist-thumbnail, +html[global_enable="true"][shrink_video_thumbnails="true"] *:has(> yt-collection-thumbnail-view-model), html[global_enable="true"][shrink_video_thumbnails="true"] ytd-channel-renderer #avatar-section, html[global_enable="true"][shrink_video_thumbnails="true"] ytd-movie-renderer .thumbnail-container { - max-width: 0 !important; + max-width: 240px !important; + min-width: 210px !important; + max-height: 134px; } From edbadf2e54eb51afedbe7fd4b56f5b2881cfc940 Mon Sep 17 00:00:00 2001 From: prinixoz <95567832+prinixoz@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:40:08 +0000 Subject: [PATCH 08/13] added feature to always be in theater mode (#195) Co-authored-by: prinixoz --- src/content-script/main.js | 9 +++++++++ src/shared/main.js | 11 ++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/content-script/main.js b/src/content-script/main.js index 03f2104..be1c047 100644 --- a/src/content-script/main.js +++ b/src/content-script/main.js @@ -334,6 +334,15 @@ function runDynamicSettings() { } } + // Enable theater mode + if (cache['enable_theater']) { + const flexy = document.querySelector("ytd-watch-flexy"); + const btn = document.querySelector(".ytp-size-button"); + if (flexy && btn && !flexy.hasAttribute("theater")) { + btn.click(); + } + } + // Skip through ads if (cache['auto_skip_ads'] === true) { diff --git a/src/shared/main.js b/src/shared/main.js index 8c5b2f7..5cd631e 100644 --- a/src/shared/main.js +++ b/src/shared/main.js @@ -252,11 +252,11 @@ const SECTIONS = [ id: "normalize_shorts", defaultValue: false }, - // { - // name: "Enable theater mode", - // id: "enable_theater", - // defaultValue: true - // }, + { + name: "Enable theater mode", + id: "enable_theater", + defaultValue: false + }, ] }, { @@ -740,6 +740,7 @@ const idToShortId = { "remove_sidebar_infinite_scroll": '91', "log_prompt_answered": '92', "remove_results_description": '93', + "enable_theater": '94', }; From a3542e42da190d8e9c9acc67e8e028a16579a930 Mon Sep 17 00:00:00 2001 From: Sidhant <84363346+Trazer09@users.noreply.github.com> Date: Sun, 8 Feb 2026 04:22:29 +0530 Subject: [PATCH 09/13] fix: disable extension on YouTube Music (closes #152) (#168) --- src/chrome_manifest.json | 9 ++++++--- src/firefox_manifest.json | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/chrome_manifest.json b/src/chrome_manifest.json index 33bc5ae..1b0e2c8 100644 --- a/src/chrome_manifest.json +++ b/src/chrome_manifest.json @@ -27,7 +27,9 @@ ], "css": ["/content-script/main.css"], "all_frames": true, - "matches": ["*://*.youtube.com/*"], + "matches": [ + "*://www.youtube.com/*", + "*://m.youtube.com/*"], "run_at": "document_start" } ], @@ -51,10 +53,11 @@ "storage" ], "host_permissions": [ - "*://*.youtube.com/*" + "*://www.youtube.com/*", + "*://m.youtube.com/*" ], "web_accessible_resources": [{ "resources": ["/images/rys.svg"], - "matches": ["*://*.youtube.com/*"] + "matches": ["*://www.youtube.com/*", "*://m.youtube.com/*"] }] } diff --git a/src/firefox_manifest.json b/src/firefox_manifest.json index d7da19e..5e266aa 100644 --- a/src/firefox_manifest.json +++ b/src/firefox_manifest.json @@ -30,7 +30,9 @@ ], "css": ["/content-script/main.css"], "all_frames": true, - "matches": ["*://*.youtube.com/*"], + "matches": [ + "*://www.youtube.com/*", + "*://m.youtube.com/*"], "run_at": "document_start" } ], @@ -52,7 +54,8 @@ }, "permissions": [ "storage", - "*://*.youtube.com/*" + "*://www.youtube.com/*", + "*://m.youtube.com/*" ], "web_accessible_resources": [ "/images/rys.svg" From ef85e9ef0248f996879ede35cf4cb368b5d80766 Mon Sep 17 00:00:00 2001 From: Lawrence Hook Date: Sun, 8 Feb 2026 19:50:37 -0500 Subject: [PATCH 10/13] feat: add option to hide YouTube Playables (closes #158, closes #175) Also auto-select Homepage section in options when on YouTube homepage. Co-Authored-By: Claude Opus 4.6 --- src/content-script/main.css | 1 + src/content-script/main.js | 9 +++++++++ src/options/main.js | 2 ++ src/shared/main.js | 6 ++++++ 4 files changed, 18 insertions(+) diff --git a/src/content-script/main.css b/src/content-script/main.css index c6b687f..79442ee 100644 --- a/src/content-script/main.css +++ b/src/content-script/main.css @@ -57,6 +57,7 @@ html[global_enable="true"][remove_all_but_one="true"] ytd-browse[page-subtype="h html[global_enable="true"][remove_all_but_one="true"] ytd-browse[page-subtype="home"] ytd-rich-grid-renderer > #contents > ytd-continuation-item-renderer, html[global_enable="true"][remove_extra_rows="true"] ytd-browse[page-subtype="home"] ytd-rich-grid-renderer > #contents > ytd-rich-grid-row + ytd-rich-section-renderer, html[global_enable="true"][remove_infinite_scroll="true"] ytd-browse[page-subtype="home"] ytd-rich-grid-renderer > #contents > ytd-continuation-item-renderer, +html[global_enable="true"][remove_playables="true"] *[is_playable], /* Video Player - UX */ html[global_enable="true"][disable_fullscreen_scroll="true"] ytd-watch-flexy[fullscreen] div#columns, diff --git a/src/content-script/main.js b/src/content-script/main.js index be1c047..8cf92fd 100644 --- a/src/content-script/main.js +++ b/src/content-script/main.js @@ -183,6 +183,15 @@ function runDynamicSettings() { }); } + // Hide playables + if (cache['remove_playables']) { + const playableCards = qsa('ytd-mini-game-card-view-model'); + playableCards?.forEach(card => { + const shelfContainer = card.closest('ytd-rich-section-renderer'); + shelfContainer?.setAttribute('is_playable', ''); + }); + } + // Channel page option if (onChannel) { if (cache['remove_channel_for_you']) { diff --git a/src/options/main.js b/src/options/main.js index 666ee4e..7628b92 100644 --- a/src/options/main.js +++ b/src/options/main.js @@ -152,6 +152,8 @@ function populateOptions(SECTIONS, headerSettings, SETTING_VALUES) { qs('.sidebar_section[tag="Subscriptions"]').click(); } else if (channelRegex.test(currentUrl)) { qs('.sidebar_section[tag="Channel"]').click(); + } else if (homepageRegex.test(currentUrl)) { + qs('.sidebar_section[tag="Homepage"]').click(); } else { qs('.sidebar_section[tag="Basic"]').click(); } diff --git a/src/shared/main.js b/src/shared/main.js index 5cd631e..ba820e2 100644 --- a/src/shared/main.js +++ b/src/shared/main.js @@ -105,6 +105,11 @@ const SECTIONS = [ id: "remove_infinite_scroll", defaultValue: false }, + { + name: "Hide Playables", + id: "remove_playables", + defaultValue: false + }, ] }, { @@ -741,6 +746,7 @@ const idToShortId = { "log_prompt_answered": '92', "remove_results_description": '93', "enable_theater": '94', + "remove_playables": '95', }; From 980ebd3c9072492b08e7a8119e5919146fff944d Mon Sep 17 00:00:00 2001 From: Lawrence Hook Date: Sun, 8 Feb 2026 19:56:16 -0500 Subject: [PATCH 11/13] fix: update extra rows selector for new YouTube homepage structure Co-Authored-By: Claude Opus 4.6 --- src/content-script/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content-script/main.css b/src/content-script/main.css index 79442ee..8884a80 100644 --- a/src/content-script/main.css +++ b/src/content-script/main.css @@ -55,7 +55,7 @@ html[global_enable="true"][remove_footer_section="true"] #guide-renderer > html[global_enable="true"][remove_header="true"] ytd-browse[page-subtype="home"] ytd-rich-grid-renderer > div#header, html[global_enable="true"][remove_all_but_one="true"] ytd-browse[page-subtype="home"] ytd-rich-grid-renderer > #contents > ytd-rich-grid-row:nth-child(n+2), html[global_enable="true"][remove_all_but_one="true"] ytd-browse[page-subtype="home"] ytd-rich-grid-renderer > #contents > ytd-continuation-item-renderer, -html[global_enable="true"][remove_extra_rows="true"] ytd-browse[page-subtype="home"] ytd-rich-grid-renderer > #contents > ytd-rich-grid-row + ytd-rich-section-renderer, +html[global_enable="true"][remove_extra_rows="true"] ytd-browse[page-subtype="home"] ytd-rich-grid-renderer > #contents > ytd-rich-section-renderer, html[global_enable="true"][remove_infinite_scroll="true"] ytd-browse[page-subtype="home"] ytd-rich-grid-renderer > #contents > ytd-continuation-item-renderer, html[global_enable="true"][remove_playables="true"] *[is_playable], From a6924318e02f3e7a1907a49b42c271be57b34cf0 Mon Sep 17 00:00:00 2001 From: Lawrence Hook Date: Sun, 8 Feb 2026 20:04:44 -0500 Subject: [PATCH 12/13] fix: shrink thumbnails for new YouTube homepage thumbnail element Co-Authored-By: Claude Opus 4.6 --- src/content-script/main.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/content-script/main.css b/src/content-script/main.css index 8884a80..63c1619 100644 --- a/src/content-script/main.css +++ b/src/content-script/main.css @@ -180,6 +180,7 @@ html[global_enable="true"][blur_video_thumbnails="true"] .video-thumbnail-img { /* Shrink thumbnails */ html[global_enable="true"][shrink_video_thumbnails="true"] ytd-thumbnail, +html[global_enable="true"][shrink_video_thumbnails="true"] yt-thumbnail-view-model, html[global_enable="true"][shrink_video_thumbnails="true"] ytd-playlist-thumbnail, html[global_enable="true"][shrink_video_thumbnails="true"] *:has(> yt-collection-thumbnail-view-model), html[global_enable="true"][shrink_video_thumbnails="true"] ytd-channel-renderer #avatar-section, From 299bd68b73a8462841d84f191973cfbdc201d943 Mon Sep 17 00:00:00 2001 From: Lawrence Hook Date: Sun, 8 Feb 2026 20:07:55 -0500 Subject: [PATCH 13/13] fix: scope yt-thumbnail-view-model shrink to grid cards only Prevents sidebar thumbnails from being enlarged by the min-width rule. Co-Authored-By: Claude Opus 4.6 --- src/content-script/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content-script/main.css b/src/content-script/main.css index 63c1619..399074f 100644 --- a/src/content-script/main.css +++ b/src/content-script/main.css @@ -180,7 +180,7 @@ html[global_enable="true"][blur_video_thumbnails="true"] .video-thumbnail-img { /* Shrink thumbnails */ html[global_enable="true"][shrink_video_thumbnails="true"] ytd-thumbnail, -html[global_enable="true"][shrink_video_thumbnails="true"] yt-thumbnail-view-model, +html[global_enable="true"][shrink_video_thumbnails="true"] ytd-rich-item-renderer yt-thumbnail-view-model, html[global_enable="true"][shrink_video_thumbnails="true"] ytd-playlist-thumbnail, html[global_enable="true"][shrink_video_thumbnails="true"] *:has(> yt-collection-thumbnail-view-model), html[global_enable="true"][shrink_video_thumbnails="true"] ytd-channel-renderer #avatar-section,