5 tweeksBundle by reaver

YT2026: Clean YouTube App Interface

Tries to clean up the messy browser experience with opinionated tweeks to make YouTube feel better and app-like in the browser, especially in smaller windows. Share feedback/suggestions/edits with me on Tweeks Discord (Reaver)

Tweeks

5

Tweeks in this bundle

YouTube Quick "Not Interested" Buttons

youtube.com

Adds quick "Not interested" icon button directly on YouTube video cards. The "Don't recommend channel" button is hidden by default; set SHOW_DONT_RECOMMEND to true in the code to enable it. Share feedback/suggestions/edits with me on Tweeks Discord (Reaver)

YouTube PiP Header Buttons

youtube.com

Adds YouTube header navigation/PiP buttons and lets Alt+P toggle Picture-in-Picture on watch pages

YouTube Shorts & Clutter Remover

youtube.com

Removes YouTube Shorts, promotional feed modules, community/survey clutter, paid-content overlays, and unwanted sidebar entries while providing an Alt+M/menu toggle to temporarily restore the default sidebar.

YouTube Focus Mode and Alternate Watch Page Tools

youtube.com

Hides suggested videos in theater/mobile mode, removes YouTube notification toasts, adds compact header focus controls, and adds an Alternate Watch Page mode with independently scrolling suggestions/comments, including theater mode. Suggested sidebar thumbnails are extracted into bounded 100%-wide, top-aligned 16:9 image boxes with a subtle bottom fade, black title/details bar, and restored YouTube hover video previews. Alt+T toggles compact mode; Alt+V toggles Alternate Watch Page; Alt+C toggle

YouTube Row-by-Row Scroll

youtube.com

make this exact script // ==UserScript== // @name YouTube Row-by-Row Scroll // @description Advances YouTube Home and Subscriptions feeds by one complete visual grid row per mouse wheel notch with banner clearance. Alt+L toggles row scrolling. // @version 2.3 // @namespace tweeks.io // @author Tweeks // @match *://*.youtube.com/* // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @run-at document-idle // ==/UserScript== (function () { 'use strict'; // ── State ────────────────────────────────────────────────────────────────── const STORAGE_KEY = 'yt-row-by-row-scroll'; let enabled = localStorage.getItem(STORAGE_KEY) !== 'false'; let menuCmdId = null; const WHEEL_DEBOUNCE_MS = 60; let lockedUntil = 0; let lastDirection = 0; // ── Menu Command & Toggle ────────────────────────────────────────────────── function updateMenuCommand() { if (typeof GM_unregisterMenuCommand === 'function' && menuCmdId !== null) { GM_unregisterMenuCommand(menuCmdId); } const label = enabled ? 'Row-by-Row Scroll: ON (Alt+L to toggle)' : 'Row-by-Row Scroll: OFF (Alt+L to toggle)'; if (typeof GM_registerMenuCommand === 'function') { menuCmdId = GM_registerMenuCommand(label, toggleRowScroll); } } function toggleRowScroll() { enabled = !enabled; localStorage.setItem(STORAGE_KEY, String(enabled)); updateMenuCommand(); } document.addEventListener('keydown', (event) => { if (event.altKey && event.key.toLowerCase() === 'l') { event.preventDefault(); toggleRowScroll(); } }); // ── Route & Feed Detection ───────────────────────────────────────────────── function isFeedRoute() { const p = location.pathname; return p === '/' || p.startsWith('/feed/subscriptions'); } function getActiveFeed() { if (!isFeedRoute()) return null; const browses = document.querySelectorAll('ytd-page-manager > ytd-browse'); for (const b of browses) { if (!b.hasAttribute('hidden') && b.isConnected) { return b; } } return null; } // Calculates the true visual baseline for the top row: // 56px (masthead) + 56px (chip banner) + 34px (content padding) = ~146px function getTargetContentY(feed) { let topOffset = 56; // Fixed masthead height const masthead = document.querySelector('ytd-masthead'); if (masthead) { const r = masthead.getBoundingClientRect(); if (r.bottom > 0) topOffset = Math.round(r.bottom); } // Measure top chip banner if present on the active feed const chips = feed ? feed.querySelector('#chips-wrapper, ytd-feed-filter-chip-bar-renderer, yt-chip-cloud-renderer') : null; if (chips) { const r = chips.getBoundingClientRect(); if (r.height > 20) { topOffset += Math.round(r.height); // +56px banner offset } } // 34px visual margin so cards line up with YouTube's default content position return topOffset + 34; } // Collects all rendered cards/rows grouped by visual tier function getVisibleRows(feed) { if (!feed) return []; const items = feed.querySelectorAll( 'ytd-rich-grid-row, ytd-rich-section-renderer, ytd-rich-item-renderer, ytd-video-renderer' ); const rows = []; for (const item of items) { const rect = item.getBoundingClientRect(); if (rect.width < 50 || rect.height < 50) continue; // Group elements sharing the same horizontal tier (45px tolerance) if (!rows.some((r) => Math.abs(r.rect.top - rect.top) <= 45)) { rows.push({ element: item, rect }); } } return rows.sort((a, b) => a.rect.top - b.rect.top); } // ── Wheel Handler ────────────────────────────────────────────────────────── function handleWheel(event) { if (!enabled || !isFeedRoute() || !event.deltaY) return; if (Math.abs(event.deltaY) <= Math.abs(event.deltaX)) return; if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return; const target = event.target; if (target instanceof Element && target.closest('input, textarea, select, [contenteditable="true"], ytd-searchbox, ytd-guide-renderer, tp-yt-paper-dialog, ytd-popup-container')) { return; } const feed = getActiveFeed(); if (!feed) return; const direction = event.deltaY > 0 ? 1 : -1; const now = performance.now(); if (direction === lastDirection && now < lockedUntil) { event.preventDefault(); return; } const rows = getVisibleRows(feed); if (!rows.length) return; const targetY = getTargetContentY(feed); const tolerance = 25; // Prevents re-targeting the current row let targetRow = null; if (direction > 0) { // Find the first row sitting below the target banner line targetRow = rows.find((r) => r.rect.top > targetY + tolerance); } else { // Find the row sitting above the target banner line targetRow = rows.slice().reverse().find((r) => r.rect.top < targetY - tolerance); } if (targetRow) { event.preventDefault(); lockedUntil = now + WHEEL_DEBOUNCE_MS; lastDirection = direction; const delta = Math.round(targetRow.rect.top - targetY); // Snap flush to top (0px) when returning to Row 0 if (direction < 0 && (window.scrollY + delta <= 60)) { window.scrollTo({ top: 0, left: 0, behavior: 'auto' }); } else { window.scrollBy({ top: delta, left: 0, behavior: 'auto' }); } } else if (direction < 0 && window.scrollY > 0) { event.preventDefault(); lockedUntil = now + WHEEL_DEBOUNCE_MS; lastDirection = direction; window.scrollTo({ top: 0, left: 0, behavior: 'auto' }); } } updateMenuCommand(); document.addEventListener('wheel', handleWheel, { capture: true, passive: false }); })();

YT2026: Clean YouTube App Interface Bundle | Tweeks