You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bring back a familiar layout, put comments beside the video, and clear noise from your feed.
Every control is optional. There is no Astra account and no telemetry.
If Astra Deck makes YouTube work better for you, a coffee helps me keep the extension and userscript current.
Restore what changed. Switch to a 2020 or 2016 style page, bring back classic player controls, or tighten the current interface.
Use the whole screen. Theater Split keeps the video playing beside a live, scrollable comments column.
Cut the clutter. Hide channels, keywords, Shorts, watched videos, sponsored requests, and the page elements you never use.
Keep control local. Settings stay in the browser. AI summaries use your own provider or Ollama, and Astra never sees the request.
The searchable Command Deck covers playback, themes, comments, feed cleanup, downloads, transcripts, and hundreds of smaller choices. Start with the defaults, then change only what bothers you.
7 named color themes plus oledTheme, denseMode, tokenThemeBridge controls
Compatibility modes
Desktop YouTube extension; YouTube Music excluded; bounded /embed/:id player mode; mobile browsers and YouTube Studio; userscript follows the host desktop browser
Installation
Chrome / Edge / Brave
Option A, Load unpacked from ZIP:
Download astra-deck-chromium-store-chrome-v*.zip for a download-free Chrome Web Store/Edge-compatible package, or choose astra-deck-store-safe-chrome-v*.zip / astra-deck-github-full-chrome-v*.zip for companion-capable self-hosted installs, from the latest release
Extract it to a permanent folder
Open chrome://extensions/, enable Developer mode
Click Load unpacked and select the extracted folder
Option B, Local folder:
Download or clone the extension/ folder
Open chrome://extensions/, enable Developer mode
Click Load unpacked and select the extension/ folder
Releases ship the ZIP, not a CRX. Self-hosted CRX installs are Linux-only on modern Chrome, so the ZIP + Load unpacked is the supported Chromium path.
Firefox
The released .xpi is unsigned. Firefox Release and Beta install only
add-ons signed by Mozilla, and they reject an unsigned XPI with "This add-on
could not be installed because it appears to be corrupt", so about:addons →
Install Add-on From File does not work on the Firefox most people run. Pick
one of these instead:
Release builds also emit updates.json, and the companion-capable store-safe
Firefox manifest points at the stable latest-release update feed. That feed is
effective only after the XPI is signed; the currently released unsigned XPI
still requires one of the manual installation paths below.
Easiest, the userscript. Works on every Firefox edition, installs in one
click, and auto-updates. See Userscript
below.
Temporary, any Firefox edition. The add-on is removed when Firefox restarts.
Download astra-deck-chromium-store-firefox-v*.xpi for the download-free package, or astra-deck-store-safe-firefox-v*.xpi / astra-deck-github-full-firefox-v*.xpi for companion-capable installs, from the latest release
Open about:debugging#/runtime/this-firefox
Click Load Temporary Add-on… and select the .xpi
Permanent, Developer Edition, Nightly, or ESR only. These builds can be
told to accept unsigned add-ons; Release and Beta cannot.
Open about:config and set xpinstall.signatures.required to false
Open about:addons → gear icon → Install Add-on From File
Select the .xpi
Requires Firefox 142+ (set by strict_min_version in
scripts/manifest-patch.js, so Firefox's built-in
data-consent permissions cover the documented collection categories).
The userscript is the extension. It runs the same files, so you get the same features, settings panel, themes and Theater Split, and a fix to one is a fix to both. YTKit.user.js is a small host that stands in for the browser's extension APIs using your manager's GM_* grants. It loads three libraries (YTKit-core, YTKit-features and YTKit-app) with @require, pinned to the release tag that matches its version, and node sync-userscript.js builds all four files from extension/.
A few things work differently because a userscript manager isn't a browser extension:
Ads. The userscript hides ad shells from document-start, but it can't block the ad requests themselves. Use the extension if you want that.
Settings Sync needs the browser's sync storage, so it's extension-only. It's the one setting the userscript doesn't have.
New sites ask first. The first time a feature reaches a new host (Return YouTube Dislike, SponsorBlock, or Astra Downloader on 127.0.0.1), your manager asks you to allow the connection.
Settings live in your manager's storage. Settings saved by the older userscript carry over the first time the new one runs.
AI provider keys go in through your manager's menu (AI provider key under Astra Deck), since there's no toolbar popup. They're kept in the manager's storage, where YouTube's own scripts can't read them. Keys you saved in the older userscript still work.
Signed-in downloads need the extension. The extension hands your YouTube sign-in to Astra Downloader only after the companion proves itself through native messaging, and a userscript can't do that. Members-only and age-restricted videos won't download from the userscript.
Downloads go through the optional Astra Downloader companion, the same as the github-full extension, and a Cobalt instance you run or are allowed to use works after you grant its exact origin. Neither build calls public Cobalt or community downloader APIs. The old userscript's own MP3, VLC, MPV and web-page download buttons are gone. The download panel covers them, and VLC / MPV handoff is a setting there.
The store-safe and github-full extension profiles can use Astra Downloader, and the chromium-store artifact is download-free. Astra Deck doesn't include Cobalt's public service.
Astra Downloader Companion Setup
Video and audio downloads are handled by Astra Downloader,
a separate program with its own repository, releases, and documentation. Astra
Deck and Astra Downloader are separate installs: the extension above works on
its own, and downloads need the companion running on this device.
Download AstraDownloader.exe from the
latest Astra Downloader release
and run it, or use the in-page Download setup prompt, which points at the
same place. Then return to YouTube and choose Check again. The toolbar
popup also has recovery actions to re-enable the setup prompt and request an
on-demand companion update from a running service.
Everything about the companion, installing from source, building the
executable, the per-site sign-in store, subscriptions, the URL policy, and its
security model, is documented in
its README. It
downloads from any site yt-dlp supports, not only YouTube.
Two details matter on this side of the boundary:
Discovery is by port, not configuration. The extension probes
127.0.0.1 across the ports in scripts/companion-port-catalogue.json.
That file is duplicated byte-for-byte in the Astra Downloader repository and
checked in both, so changing the ports is a two-repository change.
Releases here never carry AstraDownloader.exe. Publishing a second,
independently versioned copy behind the same update check is how installs
previously ended up four versions stale, so npm run release:readiness
fails if the executable is staged in build/ or listed in the release
manifest.
The PO-token provider and Deno sections below are companion prerequisites. They
improve downloader reliability after Astra Downloader itself is running; they
are not browser extension install steps.
Features
Undo YouTube's redesign
YouTube has no setting that gives you the old player or the old page back. Astra has three,
and they are CSS only, so nothing is rebuilt and nothing is left behind when you turn them off.
What you want back
Setting
The pre-2025 page: tighter spacing, smaller masthead, older watch-page proportions
A caveat worth stating plainly. These work by restyling what YouTube ships, so they last only
as long as YouTube keeps shipping something to restyle. If it removes the underlying markup,
they stop, and no extension can prevent that.
What other tools charge for
Two things in this space are usually paid, and Astra gives both away.
Glasp meters free users at 3 a day; NoteGPT and Harpa meter tokens
Bring your own key, or run a local model through Ollama. No metering, because Astra never sees the request
There is no Astra account, no server, and no telemetry. Summaries go straight from your
browser to whichever provider you configured, or to your own machine.
Core
Feature
Default
Zero-Ad Desktop Surface, static MV3 request blocking plus document-start ad-shell collapse; userscript provides shell collapse only
Built in
Theater Split, responsive video and comments panes with a click-or-drag divider, compact live header, matching themes, and exact inline-style restoration on exit
On
Video Hider, hide videos/channels from feeds with X buttons, keyword filter, regex, duration filter
On
Watch Feed, queue videos from thumbnails or watch pages and play them in order
On
Video Context Menu, right-click player for downloads, VLC/MPV streaming, transcript, screenshot
Known-Breakage Notices, pause features YouTube has broken until a fix ships
On
Comment Search, filter watch-page comments inline
Off
DeArrow, replace clickbait titles/thumbnails via crowdsourced database
Off
YouTube changes its layout without warning, and when it does, some features
stop working. Cutting a release is a slow answer to that, so Known-Breakage
Notices reads a short list from this repository at most once every six hours
and pauses the features that list names for the versions they are broken in.
The card in Settings says so and links the issue. The list can pause a feature
and nothing else: it cannot switch anything on, cannot read or change a
setting, carries no code and no links, and cannot name anything the extension
does not already ship. Your own toggle is left exactly as you set it. It is on
by default, under Advanced, and with it off no request is made.
GitHub-full builds can optionally follow one user-selected HTTPS Video Hider
filter list after an exact-origin browser prompt. Remote lists are anonymous,
data-only requests capped at 1 MiB: unknown fields and malformed payloads are
rejected, publisher predicate code is discarded, and the exact response is
recorded with SHA-256 plus ETag/Last-Modified validators. The popup shows the
source host, format, verification age, and active/stale state; users can choose
daily, weekly, or manual checks and pause last-known-good rules whenever a
refresh fails or the last verification becomes older than seven days.
Watch Feed
Build a lineup while you browse. A large button in the upper-left corner of
each thumbnail adds or removes that video across Home, Subscriptions, search
results, channel pages, related videos, Shorts, and playlists. The same control
sits with the actions on every watch page.
Open the floating Watch Feed control, reorder the list if needed, then choose
Start watching. The current video stays in the feed until it finishes.
Astra removes it at the handoff and opens the next one. When the final video
ends, the feed is empty. If auto-advance is off, a finished queued video is
still cleared and the next one waits for you.
Interface
Feature
Default
Logo Quick Links, hover dropdown with History, Watch Later, Playlists, Liked, Subs
Custom Save Directory, override per download or set globally
Downloads
Context Menu, quick "Download Video" and "Download Audio" on right-click
On
Auto-Download on Visit
Off
Download Thumbnail (maxres)
Off
Downloads use Astra Downloader, the bundled local yt-dlp + ffmpeg companion. Both profiles probe 9751 plus fallback ports (9761, 9771, 9781, 9791, 9851) and only accept health responses that identify as the Astra downloader service. The store-safe ceiling keeps the companion handoff but excludes AI, Ollama, and Cobalt. GitHub-full can show the fallback after the user enters the root HTTPS origin of a self-hosted Cobalt instance and grants access to that one host; api.cobalt.tools is deliberately unavailable. See Astra Downloader Companion Setup for the current install and release-asset state.
The GitHub-full popup maintenance actions are recoverable. yt-dlp updates run
against a staged sibling executable; companion updates must pass checksum and
hidden startup checks. Each path retains one verified last-known-good binary,
activates atomically, and restores that backup automatically when the new
binary fails its post-update check. The popup and /health.updateRecovery
identify the active and rollback versions without exposing local paths or
digests.
PO Token provider (optional but recommended)
YouTube binds PO tokens to video IDs in 2026; without a provider, the web client increasingly fails with "Sign in to confirm you're not a bot" on a subset of videos. Astra Downloader auto-detects a bgutil-ytdlp-pot-provider HTTP server on 127.0.0.1:4416 and routes yt-dlp through it when available.
Quickest setup (Docker):
docker run --name bgutil-provider -d --restart unless-stopped -p 4416:4416 brainicism/bgutil-ytdlp-pot-provider
Then install the yt-dlp plugin so yt-dlp.exe knows to consult the provider:
pip install bgutil-ytdlp-pot-provider
Astra Downloader's /health endpoint will surface poTokenProvider: { ok, port, version } once the server is reachable. If absent, downloads still work on most videos, the provider is opt-in hardening, not a hard requirement.
External JavaScript runtime (yt-dlp 2026+)
yt-dlp >= 2026.04 uses external EJS challenge solvers for YouTube. Astra
Downloader defaults to Deno >=2.3 and can fall back to Node >=22; choose
Auto, Deno, or Node in companion Settings. Runtime presence alone is not
enough: the companion verifies the version and executes a bounded JavaScript
capability probe before allowing a runtime-required download.
Install Deno once:
# Windows
winget install DenoLand.Deno
# macOS / Linux
curl -fsSL https://deno.land/install.sh | sh
(Or grab the installer from https://deno.com/. To use Node instead, install
Node 24 or newer and select Node 24+ in companion Settings.)
Astra Downloader's /health endpoint surfaces javascriptRuntime: { runtime, version, supported, ejsReady, reason } while retaining denoRuntime as a compatibility alias. The download health panel names the selected runtime and offers one-click Deno provisioning only when Deno is an eligible choice. Unknown versions, probe failures, and unsupported runtimes stop with actionable errors; older pre-runtime yt-dlp builds remain allowed.
yt-dlp and its pins live in the
Astra Downloader repository, which runs the bounded media smoke against a
stable public fixture before accepting extractor dependency bumps.
Comments
Feature
Default
Sort Comments Newest First
Off
Block Comment Authors, a Block item in each comment's menu that hides that person's comments and replies everywhere
On
Creator Comment Highlight
Off
Comment Handle Revealer, show original channel name next to @handle
Off
Preload Comments
Off
Live Chat
Feature
Default
Premium Live Chat styling
On
Configurable element hiding (header, emoji, super chats, polls, etc.)
Click the gear icon in the YouTube masthead or player controls, or use the toolbar popup's Open Full Settings action.
Theater Split
Keep the video visible while you read or write comments. The divider can collapse, click open, or drag to the width you want. The comments pane takes its colors from the page, so it follows dark and light mode, the OLED theme, the color themes and your accent color.
Captured on YouTube in an offscreen browser session running this version's Theater Split.
Command Deck workspace with a mission card and three live preference summaries on every category
Searchable sidebar spanning eleven destinations, including the dedicated Video Hider workflow
Full-width semantic control sections with dependency rails for nested settings
Toggle switches with instant apply
Sub-feature controls for granular element hiding
Textarea editors for keyword filters, quick links, custom CSS
Schema-validated Export / Import / Reset with credential scrub
Conflict detection (auto-disables conflicting features with toast notification)
Verified dark/light and RTL layouts at supported desktop viewports, including normal YouTube, native Theater, and Theater Split. The live browser check measures metadata, comments, related videos or chat, scrolling, and player geometry across repeated mode changes. The mobile light state is exercised in the settings fixture; mobile browser support remains host-dependent.
The toolbar popup keeps common toggles, backups, diagnostics, and language selection close at hand. Selector drift and external service failures stay in the health panels and export bundle. They don't open automatic overlays on YouTube.
Complete settings reference
This generated knowledgebase documents all 483 user-facing settings in the canonical schema. The remaining 5 schema entries are internal migration/profile metadata, not user controls. Defaults, accepted values, build availability, scope, apply behavior, capability requirements, and introduction version are source-derived; purpose copy comes from the shipped feature definition or an audited subordinate-field description.
Extension only settings are unavailable in the standalone userscript. GitHub-full only settings require a compatible GitHub-full build/profile and any permission shown in the UI. Deferred apply means the value is consumed on the next relevant render or navigation rather than rebuilding the current surface immediately.
Shell and appearance: 48 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Widen Search Bar widenSearchBar
Expand the search bar to use more available space
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Square Search Bar squareSearchBar
Remove rounded corners from the search bar
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Square Avatars squareAvatars
Make channel avatars square instead of round
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Subscriptions Grid subscriptionsGrid
Use a denser grid layout on the subscriptions page
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Homepage Grid Align homepageGridAlign
Force a uniform thumbnail grid on the homepage. Prevents misaligned rows caused by variable title and metadata heights.
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Styled Filter Chips styledFilterChips
Compact, native-feeling filter chips on home and subscriptions
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Hide Sidebar hideSidebar
Remove the left navigation sidebar completely
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
UI style uiStyle
Selects the global corner treatment: square applies Astra's squaring rules, while rounded preserves rounded surfaces.
Default: square Values: square, rounded
Extension + userscript Store-safe + GitHub-full Global Live apply Since v0.1.0
Disable Ambient Mode noAmbientMode
Turn off the glowing background effect that matches video colors
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Compact Layout compactLayout
Reduce spacing and padding for a denser interface
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Thin Scrollbar thinScrollbar
Use a slim, unobtrusive scrollbar
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Watch Page Restyle watchPageRestyle
Premium watch-page layout for title, description, and metadata without hiding native controls
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Studio Comments chatStyleComments
Premium comment layout that preserves pinned comments, creator hearts, replies, and native actions
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Full-Width Subscriptions fullWidthSubscriptions
Expand the subscription grid to fill the page
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Channels → Videos Tab redirectToVideosTab
Open channel pages directly on the Videos tab
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Expand Video Width expandVideoWidth
Stretch the video to fill the space when sidebar is hidden
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Astra Player Dock floatingLogoOnWatch
Replace native player right-controls with Astra quick links, local tools, and settings
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Color theme colorTheme
Applies a built-in dark-mode color palette across YouTube; none leaves the native palette unchanged.
Extension + userscript Store-safe + GitHub-full Global Live apply Since v0.1.0
Custom Progress Bar Color customProgressBarColor
Change the red progress bar to any color
Default: #ff0000 Hex color
Extension + userscript Store-safe + GitHub-full Global Live apply Since v0.1.0
Compact / Unfixed Header compactUnfixedHeader
Reduce header height and let it scroll away instead of staying fixed
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Large Thumbnail Previews thumbnailPreviewSize
Increase the size of thumbnail hover previews for easier viewing on large screens
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
HD Thumbnails thumbnailQualityUpgrade
Upgrades video thumbnails to maximum resolution where available
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Force Dark on All YouTube Pages forceDarkEverywhere
Applies dark theme to YouTube pages that may not respect dark mode (settings, about, etc.)
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Custom CSS customCssInjection
Inject your own custom CSS rules into YouTube pages
Default: Off
Extension + userscript GitHub-full only Global Live apply + reversible teardown Store-sensitive Since v0.1.0
Custom CSS Rules customCssCode
CSS applied while Custom CSS is enabled
Default: Empty
Extension + userscript GitHub-full only Global Live apply Store-sensitive Since v0.1.0
Grayscale Thumbnails grayscaleThumbnails
Shows thumbnails in grayscale to reduce visual distraction. Color comes back on hover.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Disable Frosted Glass noFrostedGlass
Remove blur effects from UI elements
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Accent Color themeAccentColor
Custom accent color for highlights, progress bar, and active UI elements
Default: Empty
Extension + userscript Store-safe + GitHub-full Global Live apply Since v0.1.0
Nyan Cat Progress Bar nyanCatProgressBar
Replace the video progress bar with a Nyan Cat animation
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
OLED Theme oledTheme
True OLED black (#000) backgrounds via the --yt-sys-color-baseline tokens. Survives YouTube's native theme switches because we hook the tokens themselves, not the surface classes.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Dense Mode denseMode
Tightens row spacing, padding, and font metrics across Astra-injected surfaces. It doesn't change YouTube's native layout, only our own panels, chips, pills, and toolbars.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Rectangularize UI rectangularizeYouTube
Strips YouTube's pill / stadium / fully-rounded backdrops. Any backdrop with border-radius > 12px gets clamped to 8px. Avatars and progress rings stay circular.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Layout Profile classicLayoutProfile
Pick a layout profile. Modern keeps YouTube's 2025 layout. Classic 2020 restores tighter spacing and the smaller masthead. Classic 2016 restores the older watch page proportions.
Default: modern Values: modern, classic-2020, classic-2016
Extension + userscript Store-safe + GitHub-full Global Live apply Experimental Since v0.1.0
Restore Classic Player Chrome newPlayerUiRestore
Hides YouTube's new-player chrome elements (Delhi modern overflow panel, pill action surfaces). Restores a tighter progress bar and original-style controls.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Experimental Since v0.1.0
Classic Player Chrome classicPlayerChrome
One-toggle restoration of the pre-Delhi/Liquid Glass player look: opaque square controls, classic progress bar, original time display. CSS-only, no DOM rebuild.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v4.47.0
Native Token Theme Bridge tokenThemeBridge
Pipes the user's themeAccentColor into YouTube's native --yt-sys-color-* tokens so native badges, hover states, and primary buttons follow the Astra accent without restyling each surface.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Hide Airplay Button hideAirplayButton
Remove the Airplay icon from the player controls
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Hide "Add to Queue" on Thumbnails hideQueueOnThumbnails
Remove the "Add to queue" overlay button that appears on thumbnail hover
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Show Full Video Titles fullTitles
Remove the 2-line clamp on thumbnail titles so long titles show in full
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Transform Video Title Case titleCaseTransform
Override YouTube's clickbait UPPERCASE titles with a casing style of your choice
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Title Case Style titleCaseMode
Choose the casing used while title transformation is enabled
Extension + userscript Store-safe + GitHub-full Global Live apply Since v0.1.0
Custom Text Selection Color customSelectionColor
Override the default text-selection background with your chosen color
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Selection Color selectionColor
Choose the highlight color used while custom text selection is enabled
Default: #2dd36f Hex color
Extension + userscript Store-safe + GitHub-full Global Live apply Since v0.1.0
Restore Native YouTube UI restoreNativeYouTubeUi
Show the channel/comment avatars and home-feed shelves that Astra Deck hides by default. Toggles the early.css opt-out class so YouTube renders its own styling.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v4.46.0
Compact Clean UI cleanUiPreset
Owner preset: hides panel branding, search, and category headers, compresses navigation, silences toast notifications, and hides the subscriptions resume banner. Off by default.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v4.46.3
Hide Search Sidebar hideSearchSidebar
Remove the right-hand sidebar on search results pages
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v4.49.0
UI Font uiFontFamily
Override the interface typeface. A short curated list rather than a free-text field, because an arbitrary font-family string is a CSS injection surface, and Custom CSS already exists for that.
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v4.49.0
Navigation and Guide: 18 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Hide Create Button hideCreateButton
Remove the "Create" button from the header toolbar
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Hide Voice Search hideVoiceSearch
Remove the microphone icon from the search bar
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Logo Click → Subscriptions logoToSubscriptions
Point the native YouTube home mark to your subscriptions feed
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Clean Share URLs cleanShareUrls
Strip tracking params (si, pp, feature) from copied/shared YouTube links
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Quick Links quickLinkMenu
Adds a compact quick-links menu in the masthead with customizable links
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Quick link items quickLinkItems
Defines up to ten masthead quick links, one Label and YouTube path per line; unsafe schemes and non-YouTube destinations are rejected.
Default: 6 preset lines
Extension + userscript Store-safe + GitHub-full Global Live apply Since v0.1.0
Normalize Clickbait Titles titleNormalization
Convert ALL CAPS titles to Title Case. Reduces clickbait without changing meaning.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Redirect Home to Subscriptions redirectHomeToSubs
Automatically redirect the YouTube homepage to your subscriptions feed
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Clean Share Menu shareMenuCleaner
Removes social media buttons from the share dialog, leaving only the URL copy option
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Open Videos in New Tab openInNewTab
Makes video links on the home/subscriptions page open in a new tab instead of navigating away
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Search While Watching searchWhileWatching
Show YouTube search results in a lightweight watch-page panel without interrupting playback.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v4.49.0
Open In Alternative Frontend openInAlternativeFrontend
Adds a button next to the player to open the current video in your configured alternative frontend (Invidious / Piped / FreeTube). Default instance is yewtu.be; change via alternativeFrontendInstance setting.
Default: Off
Extension + userscript GitHub-full only Global Live apply + reversible teardown Store-sensitive Since v0.1.0
Alternative frontend instance alternativeFrontendInstance
Sets the HTTPS frontend origin used when Open in Alternative Frontend builds an external video link.
Extension + userscript GitHub-full only Global Live apply Store-sensitive Since v0.1.0
Channel landing tab channelLandingTab
Which channel tab "Channels to Videos Tab" opens. Applies only while that feature is on, and falls back to Videos when the channel does not carry the chosen tab.
Extension + userscript Store-safe + GitHub-full Global Live apply Since v4.49.0
Hide Own Avatar hideOwnAvatar
Remove your account avatar button from the header
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v4.49.0
Shorts controls: 9 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Remove Shorts removeAllShorts
Hide all Shorts videos from feeds and recommendations
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Redirect Shorts redirectShorts
Open Shorts in the standard video player
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Disable Hover Preview disablePlayOnHover
Stop videos from playing when hovering over thumbnails
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Shorts Speed Control shortsSpeedControl
Adds a click-to-cycle playback speed chip to the Shorts player (0.5x-2x), honoring your persistent speed default
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v4.48.0
Shorts Auto-Advance shortsAutoAdvance
Stop Shorts from looping and scroll to the next Short automatically when one finishes
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v4.48.0
Shorts Player Controls shortsAsRegularVideo
Add native browser playback controls and scrubbing to YouTube Shorts
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Shorts Daily Limit shortsDailyLimitMin
Maximum minutes of Shorts playback per local day. Set to 0 to disable.
Default: 0 Range: 0 to 1440
Extension + userscript Store-safe + GitHub-full Watch page Live apply Since v4.51.1
Shorts Limit Action shortsDailyLimitMode
Choose whether reaching the limit blocks Shorts or offers five-minute snoozes.
Default: hard Values: hard, snooze
Extension + userscript Store-safe + GitHub-full Watch page Live apply Since v4.51.1
Shorts watch time today shortsWatchTimeToday
Stores the dated Shorts budget ledger and any active snooze deadline. Settings shows the current-day value as read-only status.
Default: {"date":"","seconds":0,"snoozeUntil":0}
Extension + userscript Store-safe + GitHub-full Watch page Live apply Since v4.51.1
Feeds and layout: 13 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Hide Playables hidePlayables
Hide YouTube Playables gaming content from feeds
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Hide Members Only hideMembersOnly
Hide members-only feed cards on Home and Subscriptions
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Hide News Section hideNewsHome
Hide news sections from the homepage
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Hide Playlist Shelves hidePlaylistsHome
Hide playlist sections from the homepage
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Videos Per Row videosPerRow
Set how many video thumbnails per row (0 = dynamic based on window width)
Default: 0 Range: 0 to 8
Extension + userscript Store-safe + GitHub-full Feeds Live apply Since v0.1.0
List Feed Layout listFeedLayout
Show Home, Subscriptions, and Search video cards as rows with thumbnails on the left and metadata on the right. Off by default and mutually exclusive with Videos Per Row.
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v4.51.1
Hide Merch Shelf hideMerchShelf
Remove merchandise promotions below videos
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Hide Info Panels hideInfoPanels
Remove Wikipedia/context info boxes that appear below videos (FEMA, COVID, etc.)
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Disable Infinite Scroll disableInfiniteScroll
Replace infinite scroll with a "Load More" button on home, search, and subscriptions pages
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Hide Latest Posts hideLatestPosts
Hide community posts and updates sections from feeds
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
When a playlist entry reaches at least 90% watched, continue to the next entry below that threshold. This stays off until enabled.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v4.51.1
Resolution Badge on Thumbnails videoResolutionBadge
Shows a 4K, HD, or SD badge on video thumbnails based on available quality
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Like-to-View Ratio likeViewRatio
Shows the like-to-view percentage next to the view count on watch pages
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Enhanced Channel Info channelSubCount
Shows the channel subscriber count more prominently below videos
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Auto-Open Chapters autoOpenChapters
Automatically open the chapters panel when available
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Auto-Open Transcript autoOpenTranscript
Automatically open the transcript panel when available
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Disable Mini Player disableMiniPlayer
Prevent the mini player from appearing when navigating away
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Adaptive Live Layout adaptiveLiveLayout
Automatically adjust layout for live stream chat side-by-side
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Theater Auto-Scroll theaterAutoScroll
Scroll video into full view when theater mode activates
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Buffer / Preload bufferPreload
Ask the YouTube player to keep a larger buffer for on-demand videos, so a brief connection drop does not stall playback. Off by default; live streams are never changed.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v4.51.1
Buffer Target bufferPreloadSeconds
How many seconds of an on-demand video to keep buffered ahead. Higher values survive longer connection drops; the player may still cap very large targets on long videos.
Default: 20 Range: 5 to 600
Extension + userscript Store-safe + GitHub-full Watch page Live apply Since v4.54.0
Audio-Only Mode audioOnlyPlayback
Collapse the video and ask the player for the cheapest stream it has, so a watch page costs roughly what a podcast does. YouTube exposes no true audio-only stream to extensions, so the pill reports whether you got one or just the lowest quality. Works on live streams too, where a multi-hour session makes the saving largest.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v4.54.0
Preload Comments preloadComments
Eagerly load the comment section so it is ready when you scroll down
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Speed Change OSD playbackSpeedOSD
Show speed overlay on the video player (like VLC) instead of corner toast
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Statistics Dashboard showStatisticsDashboard
Track videos watched, time on YouTube, and videos hidden
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Fit Player to Window fitPlayerToWindow
Make the video player fill the entire browser window
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Monetization Indicator monetizationIndicator
Adds a pill under the title showing whether the video is monetized (has ads or a sponsorship overlay) or not. It's a heuristic built from the paid promotion overlay, the sponsorship card, and SponsorBlock category data when available.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Video Age Color Coding videoAgeColors
Color-coded thumbnail borders by upload age: fresh (green), week (blue), month (yellow), year (orange), ancient (red)
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Watch Page Tabs watchPageTabs
Horizontal tab bar above the comments/description area to quickly switch views on the watch page
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Open thumbnail button openThumbnailButton
Adds a View button beside the thumbnail download button that opens the full-size thumbnail in a new tab. It shares the download resolver, so a video with no max-res thumbnail opens the best one it has. Needs the Download Thumbnail Button feature on, since it sits beside it.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v4.89.0
Copy Chapters as Markdown copyChapterMarkdown
Copy all video chapters as a markdown timestamp list, from a button in the player controls
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Chapter Jump Buttons chapterJumpButtons
Prev/Next chapter buttons in the player right-controls, so you can skip to the previous or next chapter
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Hide Scrubber Handle removeScrubber
Remove the round scrubber handle from the video progress bar
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.49.0
Soften Bottom Gradient softBottomGradient
Reduce the dark gradient behind the player control bar
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.49.0
When the player shows an error screen, reload the page and restore position and speed automatically (max 3 attempts per video)
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.48.0
Live Catch-Up Speed Reset liveSpeedReset
When a live stream played above 1x catches up to the live edge, reset to 1x; your speed is restored if you seek back behind the edge
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.48.0
Live Latency Catch-up liveLatencyCatchup
Show live latency and buffer in the player chrome, then use a bounded playback-rate boost to reach the configured live edge target.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.59.1
Live Latency Target liveLatencyTargetSeconds
Start catch-up above this live-edge delay. Lower values catch up sooner but may change speed more often.
Default: 8 Range: 2 to 60
Extension + userscript Store-safe + GitHub-full Player Live apply Since v4.59.1
Live Catch-up Max Rate liveLatencyMaxRate
Maximum playback rate used while catching up; your saved channel speed is restored afterward.
Default: 1.25 Range: 1.05 to 2
Extension + userscript Store-safe + GitHub-full Player Live apply Since v4.59.1
Force DVR for Live Streams forceDvr
Ask YouTube to expose rewind for live streams that advertise DVR as disabled. Experimental and off by default; if the player response changes shape, Astra Deck leaves it untouched and reports the degradation.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Experimental Since v4.59.1
Show Playlist Duration showPlaylistDuration
Display total playlist runtime and speed-adjusted estimate next to the playlist header
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Show Time in Tab Title showTimeInTabTitle
Prepend current playback time [5:23] to the browser tab title
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Reverse Playlist Button reversePlaylist
Adds a "Reverse" button to playlist panels to play oldest first
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
RSS Feed Link rssFeedLink
Show an RSS feed link on channel pages for subscribing via RSS readers
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Precise View Counts preciseViewCounts
Show full view counts (1,234,567) instead of truncated (1.2M)
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Video Screenshot videoScreenshot
Capture the current video frame as a PNG image. It copies to the clipboard and downloads.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Per-Channel Speed Memory perChannelSpeed
Remember and auto-apply preferred playback speed for each channel
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Prevent YouTube from auto-translating video titles AND descriptions to your locale. Restores the original-language text on grid thumbnails + watch page.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Pause Other Tabs on Play pauseOtherTabs
When a video starts playing, pause YouTube in all other tabs
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
A-B Loop abLoop
Set two points on the video timeline and loop between them. Visual markers on the progress bar.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Fine Speed Control fineSpeedControl
Extend speed range to 0.1x-16x with 0.05x increments. Scroll on the speed badge to adjust.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
"Not Interested" on Thumbnails notInterestedButton
Add an X button on video thumbnails to quickly dismiss videos via YouTube's feedback API
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Timestamp Bookmarks timestampBookmarks
Bookmark moments in videos with custom notes. Click a bookmark to seek. Persists across sessions.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Blue Light Filter blueLightFilter
Apply a warm tint to reduce blue light emission. Configurable intensity.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Blue Light Intensity blueLightIntensity
Set the strength of the warm tint when Blue Light Filter is enabled.
Default: 30 Range: 10 to 80
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Watch Time Tracker watchTimeTracker
Track your daily/weekly YouTube watch time with a stats widget in the settings panel
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Auto skip chapter patterns autoSkipChapterPatterns
Provides comma-separated chapter-name fragments that Auto-Skip Chapters treats as skippable.
Default: intro,outro,recap,sponsor
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Video Loop Button videoLoopButton
Add a loop toggle button to the player controls for one-click video looping
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Persistent Playback Speed persistentSpeed
Remember your preferred playback speed globally and auto-apply it to every video
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Persistent speed value persistentSpeedValue
Sets the playback rate reapplied by Persistent Playback Speed.
Default: 1 Range: 0.1 to 16
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Jump to Most Replayed jumpToMostReplayed
Add a player control that seeks straight to the most-replayed moment. It appears only on videos where YouTube actually provides the heatmap.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.68.0
Heatmap Smart Speed heatmapSmartSpeed
Play the parts nobody rewatches faster, and drop back to your own speed through the most-replayed moments. Off by default; needs a video with heatmap data.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.68.0
Automatically clicks "I understand and wish to proceed" on videos with content warnings
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.48.0
Disable Autoplay Next Video disableAutoplayNext
Prevents the next video from automatically playing when the current one finishes
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Speed Preset Buttons customSpeedButtons
Adds quick speed buttons below the video player with presets from 0.5x to 3x
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Prevent Autoplay preventAutoplay
Stop videos from automatically playing on page load
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Scroll Wheel Speed scrollWheelSpeed
Adjust playback speed by scrolling the mouse wheel over the video player
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Speed Step Amount speedStep
How much to change speed per scroll tick
Default: 0.25 Range: 0.05 to 1
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
CPU Tamer enableCPU_Tamer
Reduce CPU usage by throttling background timers; in hidden tabs it also force-releases YouTube web locks and closes idle database connections
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Comment Handle Revealer enableHandleRevealer
Show the original channel name next to @handle in comments
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Video Rotation videoRotation
Rotate the video 90, 180, or 270 degrees via CSS transform. Useful for sideways phone recordings.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Video rotation angle videoRotationAngle
Sets the clockwise rotation applied by Video Rotation.
Default: 0 Values: 0, 90, 180, 270
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Video Flip videoFlip
Mirror the video horizontally or vertically. Useful for mirrored dance tutorials, text readability, or flipped recordings.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.47.0
Video flip mode videoFlipMode
Chooses the horizontal or vertical transform applied by Video Flip.
Default: none Values: none, horizontal, vertical, both
Extension + userscript Store-safe + GitHub-full Player Live apply Since v4.47.0
Mono to Stereo monoToStereo
Center mono audio equally in both ears. Fixes one-sided recordings, lectures, and old content that sounds unbalanced on headphones.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.47.0
Volume Boost volumeBoost
Amplify audio beyond 100% via a Web Audio gain node (up to 10x). Useful for quiet recordings. Adjust intensity with volumeBoostLevel.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.48.0
Volume Boost Level volumeBoostLevel
Gain multiplier for Volume Boost (1.0 = unity, max 10.0)
Default: 2 Range: 1 to 10
Extension + userscript Store-safe + GitHub-full Player Live apply Since v4.48.0
Audio Normalization audioNormalization
Compress dynamic range so quiet and loud passages play at similar volume. Uses a DynamicsCompressorNode in the MAIN world audio graph.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.48.0
Audio Auto-Gain audioAutoGain
Balance quiet videos toward a comfortable listening level with a bounded, adaptive Web Audio gain stage.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.51.1
Audio High-Pass Filter audioHighPass
Reduce muddy low-frequency rumble with an 80 Hz high-pass filter in the MAIN-world audio graph.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.51.1
Parametric EQ audioParametricEq
Apply a three-band low, mid, and high EQ in the MAIN-world audio graph. Off by default; each band is bounded to -12 dB to +12 dB.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.51.1
EQ Low Band audioEqLowGainDb
Low-shelf gain centered at 120 Hz, from -12 dB to +12 dB.
Default: 0 Range: -12 to 12
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.51.1
EQ Mid Band audioEqMidGainDb
Peaking gain centered at 1 kHz, from -12 dB to +12 dB.
Default: 0 Range: -12 to 12
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.51.1
EQ High Band audioEqHighGainDb
High-shelf gain centered at 8 kHz, from -12 dB to +12 dB.
Default: 0 Range: -12 to 12
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.51.1
Audio Pan audioPan
Shift audio balance left or right via a StereoPannerNode in the MAIN world audio graph. Range -1 (full left) to 1 (full right), 0 = center.
Default: 0 Range: -1 to 1
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.47.0
Audio Sync Offset audioSyncOffsetMs
Adjust audio timing relative to video from -500 ms to +500 ms. Positive values add audio delay; negative values use the minimum available Web Audio latency.
Default: 0 Range: -500 to 500
Extension + userscript Store-safe + GitHub-full Player Live apply Since v4.51.1
Frame-by-Frame Buttons frameByFrameButtons
Add visible step-back (,) and step-forward (.) buttons to the player controls for precise frame navigation
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Screenshot Format downloadScreenshotFormat
Output format for the player screenshot button. PNG is lossless and copies to clipboard; JPEG/WebP are smaller files but download-only.
Default: png Values: png, jpeg, webp
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Include Subtitles In Screenshot downloadSubtitlesWithScreenshot
Bake the currently rendered caption line into the bottom band of the screenshot. Off by default. Requires Video Screenshot.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Volume Wheel volumeWheelMode
Scroll the mouse wheel over the player to change volume in 5% steps. A floating indicator chip surfaces the new level for 1.2 s; no keyboard shortcut is added.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Wheel Seek wheelSeek
Scroll the mouse wheel over the progress bar to seek. Step defaults to 5 s (configure via wheelSeekStepSec). Scrolling elsewhere over the player still drives Volume Wheel if it is on; the two features do not conflict.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Wheel seek step sec wheelSeekStepSec
Sets how many seconds Wheel Seek moves for each wheel step over the progress bar.
Default: 5 Range: 0.1 to 300
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Keep Volume At Full disableLoudnessNormalization
Stop YouTube nudging the player volume back down below 100%. This does NOT disable YouTube's loudness normalization, which runs in a Web Audio node an extension can't reach, so quiet videos stay quiet. Only the volume slider stops drifting.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Per-Channel Intro/Outro Skip perChannelIntroOutro
Skip the first N and last M seconds of every video on a given channel. Set offsets per channel from the watch page (Tools → Set Intro/Outro). Stored under perChannelIntroOutroData.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Per channel intro outro data perChannelIntroOutroData
Stores per-channel intro and outro offsets used by Per-Channel Intro/Outro skipping.
Default: Empty object
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
When YouTube serves an auto-dubbed track, select the original through the reviewed player bridge.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Anti-Translate Transcript antiTranslateTranscript
Strips translation track parameters from the engagement-panel transcript URL so YouTube serves the original-language captions. Best-effort; works when the original-language track is available.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Anti-Translate Thumbnails antiTranslateThumbnails
Restore the original-language thumbnail image on cards whose text was localised. Uses the player response on the watch page and YouTube's own same-origin oEmbed endpoint elsewhere, so it needs no extra site access.
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v4.69.0
Anti-Translate Chapters antiTranslateChapters
Restores original-language chapter titles in the chapter list and the player hover label. Reads them from the original description, which is where YouTube builds chapters from in the first place.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v4.70.0
Video Visual Filters videoVisualFilters
Adjust brightness / contrast / saturation / hue / grayscale / sepia via CSS filter on the video element
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Sample video frames locally and briefly dim the player when a large luminance change is detected.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.57.0
Flash Sensitivity photosensitiveFlashThreshold
Minimum frame luminance change that triggers protection.
Default: 0.2 Range: 0.05 to 0.8
Extension + userscript Store-safe + GitHub-full Player Live apply Since v4.57.0
Dim Strength photosensitiveDimPercent
How strongly to dim the player while flashing content is detected.
Default: 35 Range: 10 to 80
Extension + userscript Store-safe + GitHub-full Player Live apply Since v4.57.0
VVF brightness vvfBrightness
Sets Video Visual Filters brightness as a percentage of the original image.
Default: 100 Range: 0 to 200
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
VVF contrast vvfContrast
Sets Video Visual Filters contrast as a percentage of the original image.
Default: 100 Range: 0 to 200
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
VVF saturation vvfSaturation
Sets Video Visual Filters saturation as a percentage of the original image.
Default: 100 Range: 0 to 200
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
VVF hue vvfHue
Sets Video Visual Filters hue rotation in degrees.
Default: 0 Range: -180 to 180
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
VVF grayscale vvfGrayscale
Sets the grayscale percentage applied by Video Visual Filters.
Default: 0 Range: 0 to 100
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
VVF sepia vvfSepia
Sets the sepia percentage applied by Video Visual Filters.
Default: 0 Range: 0 to 100
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Lock 1x Speed on Music Videos musicVideoSpeedLock
When Persistent Playback Speed is enabled, keep music-category videos at 1x so songs aren't sped up
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Playlist Quick-Remove Overlay playlistQuickRemove
Show a trash icon on each item in playlists you own for one-click removal
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Watch Later Cleanup Button watchLaterCleanup
Adds a "Remove Watched" button to the Watch Later playlist header for batch cleanup
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Watch Later Workbench watchLaterWorkbench
Bulk tools for the Watch Later playlist: filter by age, duration, watched state, channel, or title, preview and sort matches, export CSV/JSON, and remove in bounded recoverable sessions
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.48.0
Preferred Audio Track Language audioTrackLanguage
Select your preferred audio language through the player bridge without opening or clicking YouTube settings.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Preferred audio lang preferredAudioLang
Sets the preferred BCP-47 primary language used by Audio Track Language selection.
Default: en
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Prefer Descriptive Audio preferDescriptiveAudio
When the preferred language offers an audio-description track, select it before the standard track.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.50.8
Notify on AI-Dubbed Audio notifyAutoDubbedAudio
Show a one-time toast when YouTube auto-selects an AI-dubbed audio track (e.g. an English-dubbed Korean video). You can manually switch to the original track in the player settings.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Sleep Timer sleepTimer
Pause playback after a chosen number of minutes. The player countdown chip lets you cancel or add 5 minutes.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Quality and codecs: 12 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Always Best Quality autoMaxResolution
Force the highest available stream on every video (1080p Premium when offered)
Default: On
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Force H.264 Codec forceH264
Prefer H.264 (AVC) over VP9/AV1 for lower CPU usage on older hardware. May reduce max quality. Uses MAIN world codec bridge.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Codec Selector codecSelector
Choose which video codec to prefer: Auto, Power-efficient (ask this device), H.264 (low CPU), VP9, or AV1 (best quality). Shares codec engine with Force H.264.
Default: auto Values: auto, efficient, h264, vp9, av1
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Force Standard Frame Rate forceStandardFps
Dims HFR entries in the quality menu. For reliable 30fps, enable Force H.264 which caps at 1080p30.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Initial Player State (Foreground) initialPlayerStateForeground
When opening a watch page in the foreground, play or pause regardless of the previous session's autoplay choice. "Inherit" leaves YouTube's native behavior alone.
Default: inherit Values: inherit, play, pause
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Initial Player State (Background) initialPlayerStateBackground
When opening a watch page in a background tab, play or pause regardless of YouTube's default. Useful for queueing-up multiple tabs.
Default: inherit Values: inherit, play, pause
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Per-Context Quality qualityProfileMatrix
Set different default qualities for normal / theater / fullscreen / background / embed contexts. ISOLATED-world detects the context and writes data-ytkit-quality-context on ; the MAIN-world bridge re-applies the matching quality via movie_player.setPlaybackQualityRange().
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Quality default normal qualityDefaultNormal
Sets the quality target used by Per-Context Quality in the normal watch-page layout.
Maximum uploads per day accepted by the upload-cadence heuristic.
Default: 5 Range: 1 to 100
Extension + userscript Store-safe + GitHub-full Feeds Live apply Since v4.59.1
Hide videos hide live hideVideosHideLive
Hides cards identified as currently live streams.
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Hide videos hide upcoming hideVideosHideUpcoming
Hides scheduled, upcoming, and reminder-driven cards.
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Hide Planned Livestreams hidePlannedLivestreams
On the Subscriptions page, hide scheduled livestreams and premieres that only show a "Notify me" button. They reappear automatically once they go live.
Default: On
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v4.50.0
Hide videos hide mixes hideVideosHideMixes
Hides radio-style and auto-generated YouTube Mix cards.
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Remove the finished video and start the next Watch Feed entry automatically.
Default: On
Extension + userscript Store-safe + GitHub-full Player Live apply Since v4.48.0
Filter Feeds Before Render feedPrefilter
Remove blocked channels from YouTube's feed data before the page builds a card from it, instead of hiding the card afterwards. Playlists and the video player are never touched.
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Experimental Since v4.69.0
Hide Watched Videos hideWatchedVideos
Dim or hide videos with a red progress bar (already watched) from feeds
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Hide watched mode hideWatchedMode
Chooses whether Hide Watched Videos dims matched cards or removes them from view.
Default: dim Values: dim, hide
Extension + userscript Store-safe + GitHub-full Feeds Live apply Since v0.1.0
Advanced local predicate advancedLocalPredicate
Enables the bounded local predicate evaluator for advanced card filtering without remote code execution.
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Experimental Since v0.1.0
Advanced local predicate code advancedLocalPredicateCode
Stores the local predicate expression evaluated against the documented, read-only video-card context.
Default: Empty
Extension + userscript Store-safe + GitHub-full Feeds Live apply Experimental Since v0.1.0
Sponsored Content Filter sponsoredContentFilter
Collapse comment and description blocks that look like sponsorships or affiliate promotions. Each item explains the match and can be restored.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v4.59.1
Bulk Card Actions bulkCardActions
Toggle select-mode to multi-pick feed cards, then bulk hide, allow, copy URLs, or run a bounded recommendation scrub ("Not interested" / "Don't recommend channel") with a local session log and undo.
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Feed Triage Profile feedTriageProfile
Flip on a curated focus recipe: hides Shorts, live streams, upcoming premieres, mixes, watched videos, and AI Summary. Toggling off restores prior values.
Default: Off
Extension + userscript Store-safe + GitHub-full Feeds Live apply + reversible teardown Since v0.1.0
Comments: 26 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Hide Pinned Comments hidePinnedComments
Remove pinned comments from the comments section
Default: On
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Hide Comment Dislike hideCommentDislikeButton
Remove the dislike button from comment actions since it adds no useful feedback
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Hide Comment Actions hideCommentActionMenu
Remove action menu from individual comments
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Condense Comments condenseComments
Reduce spacing between comments for a tighter layout
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Hide Comment Teaser hideCommentTeaser
Remove the "Scroll for comments" prompt on watch pages
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Auto-Expand Comments autoExpandComments
Automatically expand truncated comments so full text is always visible
Default: On
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Comment Enhancements commentEnhancements
Highlight creator/OP replies, show like heat indicators, and add collapse-all-replies toggle per thread
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Sort Comments Newest First sortCommentsNewest
Automatically switch the comment sort order to "Newest first" on every video
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Hide Notification Badge hideNotificationBadge
Removes the red notification count badge from the bell icon
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Makes creator-badged and creator-hearted comments stand out with a stronger visual treatment
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Comment Search commentSearch
Adds a search bar above comments to filter and find specific comments
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Hide Notification Bell hideNotificationButton
Remove the notification bell icon from the header
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Sort Notifications chronologicalNotifications
Sort notifications chronologically (newest first)
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Notification Count notificationMaxCount
Limit the number of notifications shown. Set to 0 to show all.
Default: 0 Range: 0 to 100
Extension + userscript Store-safe + GitHub-full Comments Live apply Since v4.51.1
Hide Read Notifications notificationHideRead
Hide notifications that YouTube marks as already read.
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v4.51.1
Comment Navigator commentNavigator
Floating thread navigator with live counts for visible comments and filtered results
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Translate Comments commentTranslate
Adds a Translate link under comments that are not already in your language, using Chrome's built-in on-device Translator. Nothing is sent to a server and no API key is needed; when the browser has no Translator the link says so instead of failing quietly.
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v4.54.0
Translate Comments Into commentTranslateTarget
Language to translate comments into. Auto follows your browser language.
Default: auto Values: auto, en, es, fr, de, it, pt, ru, ja, ko, zh, ar, hi
Extension + userscript Store-safe + GitHub-full Comments Live apply Since v4.54.0
Comment Filter commentFilterManager
Hide comment threads whose author or text matches a rule. Comma-separated keywords, !word to allowlist, or /pattern/flags for regex (ReDoS-guarded).
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v0.1.0
Comment Filter Rules commentFilterRules
One rule per line or comma-separated. word hides matches, !word always allows, @author targets the author, /pattern/i runs a regex (ReDoS-guarded).
Default: Empty
Extension + userscript Store-safe + GitHub-full Comments Live apply Since v0.1.0
Comment Language Allowlist commentLanguageAllowlist
Show only comments in these language codes, such as en, es, or fr. Leave empty to allow every language; detection stays local and fails open when uncertain.
Default: Empty
Extension + userscript Store-safe + GitHub-full Comments Live apply Since v4.51.1
Collapse Similar Comments commentDuplicateCollapse
Collapse near-duplicate comments under an accessible expander using local text comparison only.
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v4.51.1
Block Comment Authors commentAuthorBlock
Adds Block to the menu on every comment. Comments and replies from a blocked author stay hidden on every video.
Default: On
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v4.91.0
Blocked Comment Authors commentBlockedAuthors
One author per line: an @handle, a channel id, or a channel link. Delete a line to unblock that author.
Default: Empty
Extension + userscript Store-safe + GitHub-full Comments Live apply Since v4.91.0
Hide Comment Composer hideCommentComposer
Remove the "Add a comment" text field above comments
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v4.49.0
Hide Comment Reply Button hideCommentReplyButton
Remove the Reply button on individual comments
Default: Off
Extension + userscript Store-safe + GitHub-full Comments Live apply + reversible teardown Since v4.49.0
Live chat: 7 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Hide Chat Engagement hideLiveChatEngagement
Remove engagement prompts in live chat
Default: On
Extension + userscript Store-safe + GitHub-full Live chat Live apply + reversible teardown Since v0.1.0
Premium Live Chat premiumLiveChat
Refine live chat with a polished header, raised message rows, and a better composer.
Default: On
Extension + userscript Store-safe + GitHub-full Live chat Live apply + reversible teardown Since v0.1.0
Reaction Spammer reactionSpammer
Select live chat reactions and send them in a randomized loop.
Default: Off
Extension + userscript GitHub-full only Live chat Live apply + reversible teardown Store-sensitive Since v0.1.0
Reaction spammer min interval ms reactionSpammerMinIntervalMs
Sets the minimum delay between Reaction Spammer actions; runtime enforcement never allows less than 500 ms.
Default: 500 Range: 500 to 60000
Extension + userscript GitHub-full only Live chat Live apply Store-sensitive Since v4.47.0
Hide Chat Elements hiddenChatElementsManager
Choose which live chat elements to hide
Default: On
Extension + userscript Store-safe + GitHub-full Live chat Live apply + reversible teardown Since v0.1.0
Hidden chat elements hiddenChatElements
Lists live-chat surfaces hidden while the Chat Elements manager is enabled.
PocketTube-grade local groups for your subscriptions feed. Create named groups, add channels via the Edit Channels panel, sort by date/duration/unwatched/new-since-last-visit, and back up or migrate groups with JSON, CSV, or OPML.
Default: Off
Extension + userscript Store-safe + GitHub-full Subscriptions Live apply + reversible teardown Since v0.1.0
Override which SponsorBlock categories are skipped on a per-channel basis. Adds a chip next to the channel name on the watch page to configure overrides. Overrides persist in sbPerChannelProfilesData with a 500-entry cap.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Remote API Since v4.47.0
SB per channel profiles data sbPerChannelProfilesData
Stores extension-only SponsorBlock category overrides keyed by channel.
Default: Empty object
Extension + userscript Store-safe + GitHub-full Player Deferred apply Remote API Since v4.47.0
Return YouTube Dislike returnDislike
Restore an estimated dislike count via the public Return YouTube Dislike API. Cached locally; respects a 100 req/min budget. No cookies sent. Off by default.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Remote API Since v0.1.0
Thumbnail Like-Ratio Bars returnDislikeOnCards
Show an estimated like-ratio bar on visible video thumbnails, using the same bounded Return YouTube Dislike cache.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Remote API Since v0.1.0
Adds a small DeArrow mode chip next to the channel name on the watch page. Cycles through DeArrow → Original → Off → DeArrow per click. Overrides persist in deArrowChannelOverrides keyed by channel ID.
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
DeArrow Voting deArrowVoting
Vote on DeArrow title replacements. Adds thumbs up/down buttons next to replaced titles on the watch page. Uses a locally generated private userID that never leaves DeArrow requests. Off by default.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Remote API Since v0.1.0
DeArrow Peek Button dearrowPeekButton
Hold Alt to temporarily reveal original YouTube titles (undoes DeArrow/custom titles while pressed)
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Downloads and Astra Downloader: 15 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Download Button showLocalDownloadButton
Add a yt-dlp download options button on watch pages
Default: On
Extension + userscript Store-safe + GitHub-full Downloads Live apply + reversible teardown Local companion Since v0.1.0
Player Download Menu videoContextMenu
Right-click on the video player for yt-dlp download actions
Default: On
Extension + userscript Store-safe + GitHub-full Downloads Live apply + reversible teardown Since v0.1.0
Download Thumbnail Button downloadThumbnail
Adds a button below the video to download the current video thumbnail in max resolution
Default: Off
Extension + userscript Store-safe + GitHub-full Downloads Live apply + reversible teardown Since v0.1.0
Auto-Download Videos autoDownloadOnVisit
Automatically start download when visiting a video page
Default: Off
Extension + userscript GitHub-full only Downloads Live apply + reversible teardown Local companion Since v0.1.0
Download Quality downloadQuality
Preferred video quality for downloads
Default: best Values: best, 2160, 1440, 1080, 720, 480
Extension + userscript Store-safe + GitHub-full Downloads Live apply Local companion Since v0.1.0
Video Format downloadVideoFormat
Default container format for video downloads
Default: mp4 Values: mp4, mkv, webm
Extension + userscript Store-safe + GitHub-full Downloads Live apply Local companion Since v0.1.0
Audio Format downloadAudioFormat
Default format for audio-only downloads
Default: mp3 Values: mp3, m4a, opus, flac, wav
Extension + userscript Store-safe + GitHub-full Downloads Live apply Local companion Since v0.1.0
Download History Panel downloadHistoryPanel
Adds a searchable, pageable, exportable view of download history recorded by Astra Downloader. Local only, fetched from the local /history endpoint once per session.
Default: Off
Extension + userscript Store-safe + GitHub-full Downloads Live apply + reversible teardown Requires mediaDL Local companion Since v0.1.0
Downloader Health Pills downloadHealthPanel
Show pills for Astra Downloader yt-dlp version, ffmpeg freshness, and PO Token provider state next to the download button. Reads /health every 30 s; no extra storage.
Default: Off
Extension + userscript Store-safe + GitHub-full Downloads Live apply + reversible teardown Requires mediaDL Local companion Since v0.1.0
Stream Links Panel downloadStreamLinksPanel
Advanced: expose the raw adaptive video/audio stream URLs (mp4/webm) parsed from ytInitialPlayerResponse. Local only, no telemetry. Useful for yt-dlp or VLC handoff. Default off.
Default: Off
Extension + userscript GitHub-full only Downloads Live apply + reversible teardown Local companion Since v0.1.0
When Astra Downloader is unreachable, use a self-hosted Cobalt instance after granting access to that one HTTPS origin.
Default: Off
Extension + userscript GitHub-full only Downloads Live apply + reversible teardown Remote API Since v0.1.0
Self-hosted Cobalt origin downloadCobaltInstance
Required. Enter the root HTTPS origin of a Cobalt instance you operate or are authorized to use; public api.cobalt.tools is not permitted.
Default: Empty
Extension + userscript GitHub-full only Downloads Live apply Remote API Since v0.1.0
VLC / MPV Stream Handoff vlcMpvHandoff
GitHub-full profile only. Adds buttons next to the player that fire ytvlc:// or ytmpv:// protocol URLs. The protocol handler must be registered on your OS. Astra Deck never runs binaries directly. Default off.
Default: Off
Extension + userscript GitHub-full only Downloads Live apply + reversible teardown Local companion Since v0.1.0
Astra Context Menu astraContextMenu
Right-click the player or a feed card to get Astra actions: Hide channel, Copy video URL, Copy timestamp link, Open transcript. Default off. On those two surfaces it replaces the native right-click menu; everywhere else on the page the browser menu is untouched.
Default: Off
Extension + userscript Store-safe + GitHub-full Downloads Live apply + reversible teardown Since v0.1.0
Subtitle Download (SRT) subtitleDownload
One-click SRT download of the active caption track. It's a standalone player button, so no sidebar is required.
Default: Off
Extension + userscript Store-safe + GitHub-full Downloads Live apply + reversible teardown Since v0.1.0
Subtitles: 12 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Subtitles While Muted autoSubtitlesWhenMuted
Turn captions on automatically while the video is muted and restore the previous caption state on unmute
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.48.0
Subtitles on Rewind subtitlesOnRewind
After seeking backwards, show captions for 10 seconds so you can catch the missed line, then restore the previous caption state
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.48.0
Dual-language Subtitles dualLanguageSubtitles
Show an independently selected second caption track below YouTube captions when available
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v4.51.1
Second Subtitle Language dualSubtitleLanguage
Choose the caption language rendered below native YouTube captions
Default: auto Values: auto, en, es, fr, de, it, pt, ru, ja, ko, zh, ar
Extension + userscript Store-safe + GitHub-full Player Live apply Since v4.51.1
Subtitle Styling subtitleStyling
Override YouTube caption appearance: font size, family, and color, plus background, position, and shadow
Default: Off
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Caption Font Size subStyleFontSize
Scale caption text from 50% to 300%
Default: 100 Range: 50 to 300
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Caption Font Family subStyleFontFamily
Choose the typeface used for captions
Default: default Values: default, sans, serif, mono, YouTube Sans
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Caption Text Color subStyleColor
Choose the caption foreground color
Default: #ffffff Hex color
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Caption Background Opacity subStyleBgOpacity
Set the opacity behind caption text
Default: 75 Range: 0 to 100
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Caption Background Color subStyleBgColor
Choose the color behind caption text
Default: #000000 Hex color
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Caption Bottom Offset subStyleBottomOffset
Move captions up from the bottom edge of the player
Default: 10 Range: 0 to 90
Extension + userscript Store-safe + GitHub-full Player Live apply Since v0.1.0
Caption Text Shadow subStyleTextShadow
Add a dark shadow so captions stay readable over bright video
Default: On
Extension + userscript Store-safe + GitHub-full Player Live apply + reversible teardown Since v0.1.0
Research, wellbeing, and AI: 18 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Digital Wellbeing digitalWellbeing
Break reminders every N minutes of active playback + optional daily watch-time cap. Timers persist across SPA navigation.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
DW break interval min dwBreakIntervalMin
Sets the continuous-watch interval after which Digital Wellbeing prompts for a break; zero disables break prompts.
Default: 30 Range: 0 to 1440
Extension + userscript Store-safe + GitHub-full Watch page Live apply Since v0.1.0
DW daily cap min dwDailyCapMin
Sets the daily watch-time cap enforced by Digital Wellbeing; zero disables the cap.
Default: 0 Range: 0 to 1440
Extension + userscript Store-safe + GitHub-full Watch page Live apply Since v0.1.0
DW watch time today dwWatchTimeToday
Stores the dated, merge-safe daily watch-time accumulator used by Digital Wellbeing.
Default: {"date":"","seconds":0}
Extension + userscript Store-safe + GitHub-full Watch page Live apply Since v0.1.0
Local AI Summary (Browser Built-In) localAiSummary
Use Chrome's built-in Summarizer API when available; use the configured BYO-key lane when it is unavailable.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Experimental Since v0.1.0
Transcript Q&A localAiTranscriptQa
Ask citation-backed questions with Chrome on-device AI or an explicitly selected configured provider.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Remote API Since v0.1.0
Transcript Q&A provider transcriptQaLane
Choose on-device processing or the configured OpenAI, Anthropic, Gemini, or Ollama provider.
Extension + userscript Store-safe + GitHub-full Watch page Live apply Remote API Since v4.84.3
Study / Work Export researchSpacedReview
Export study/work-mode data to Markdown or CSV, or build a bounded local transcript study pack from visible videos.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Transcript Search Index researchTranscriptIndex
Indexes captions for eligible videos you visit through the shared transcript service, without opening YouTube's transcript panel. Search stays local in IndexedDB; no telemetry.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Adds a "Search transcripts" button on the watch page that opens a search UI over the local IndexedDB transcript index. Requires Transcript Search Index to be on. Default off.
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
Reddit Comments redditComments
Find Reddit discussions mentioning the current video (button in secondary sidebar)
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Remote API Since v0.1.0
Watch History Analytics watchHistoryAnalytics
Modal dashboard visualizing your 30-day YouTube watch time as a CSS bar chart (requires Watch Time Tracker)
Default: Off
Extension + userscript Store-safe + GitHub-full Watch page Live apply + reversible teardown Since v0.1.0
AI Video Summary aiVideoSummary
Bring-your-own-key LLM summary of the current video transcript (OpenAI/Anthropic/Gemini/Ollama)
Default: Off
Extension + userscript GitHub-full only Watch page Live apply + reversible teardown Remote API Since v0.1.0
AI summary endpoint URL aiSummaryEndpoint
Chat-completions endpoint for OpenAI, Anthropic, Gemini, or a local Ollama.
Extension + userscript Store-safe + GitHub-full Watch page Live apply Since v0.1.0
Privacy, profiles, and sync: 10 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Sidebar order sidebarOrder
Stores the user-defined settings-sidebar category order; null uses the shipped order.
Default: None until customized
Extension + userscript Store-safe + GitHub-full Global Live apply Since v0.1.0
Settings Profiles settingsProfiles
Save, load, switch, import, and export named setting configurations (e.g. Gaming / Work / Music). Controls appear at the top of the settings panel when enabled.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Feature schedules featureSchedules
Maps a feature id to an optional active window ({ start, end, days, enabled }) evaluated against the local clock, so a toggle can switch itself on during focus hours and hand back your previous value when the window closes.
Default: Empty object
Extension + userscript Store-safe + GitHub-full Global Live apply Since v4.69.0
Privacy data flow panel privacyDataFlowPanel
Shows the popup data-flow inspector with every API origin and removable runtime host grant.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Sync settings syncSettings
Opts the extension into browser-account sync for the bounded safe preference and Video Hider payload.
Default: Off
Extension only Store-safe + GitHub-full Global Live apply + reversible teardown Since v4.59.1
Safe store profile safeStoreProfile
Keeps the effective profile store-safe, hides GitHub-full controls, and scrubs full-profile values from exports.
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
GitHub full profile githubFullProfile
Unlocks GitHub-full settings and their explicitly granted optional network capabilities in a compatible build.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Sync safe prefs syncSafePrefs
Includes the approved safe preference subset in safe-store profile exports and browser sync.
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Sync safe prefs allowlist syncSafePrefsAllowlist
Lists the schema keys eligible for the bounded safe-preference sync payload; unknown and unsafe keys are discarded.
Default: 87 selected entries
Extension + userscript Store-safe + GitHub-full Global Live apply Since v0.1.0
Storage Quota Management storageQuotaLRU
LRU-cap growing settings and stores (ytkit-hidden-videos, ytkit-blocked-channels, videoNotesData, ytkit-bookmarks, ytkit-watch-progress, ytkit-watch-time, da_branding_cache, sb_segments_cache) to prevent quota exhaustion
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Accessibility and performance: 10 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Disable SPA Navigation disableSpaNavigation
Force full page loads instead of YouTube's smooth transitions (fixes player sizing issues)
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Experimental Since v0.1.0
Reduced Motion (strong) reducedMotion
Forces every Astra-injected animation, transition, and scroll behavior to be near-instant. Respects the OS prefers-reduced-motion setting automatically; this toggle adds an unconditional override on top.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Forced Colors / High Contrast Support forcedColorsSupport
Always active: when the OS reports forced-colors (Windows High Contrast, GTK forced colors), Astra-injected controls automatically use system colors so text remains readable and focus rings are visible. The media query itself is the gate; this toggle is retained for settings compatibility and has no additional effect.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Live Region For Toasts globalAriaLiveRegion
Mounts a single hidden role=status / aria-live=polite container under the document body. Screen readers announce any text Astra writes into it (toast bodies, filter outcomes, download status changes).
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Low Power Profile lowPowerProfile
When on, disables CPU-heavy features (cinema ambient glow, visual filters, playback stats overlay, monetization indicator, transcript index, transcript viewer, blue light filter) and bumps storage LRU sweep cadence. Toggle off to restore previous values from the backup snapshot.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Privacy Preset presetPrivacy
Privacy-focused bundle: clean share URLs, hide tracking chips, block infinite scroll, disable SPA navigation. Toggle off to restore prior values.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Researcher Preset presetResearcher
Research/study bundle: transcript viewer, timestamp bookmarks, watch time tracker, AI summary, comment search. Toggle off to restore prior values.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Power User Preset presetPowerUser
Maximum feature density: playback stats, persistent speed, fine speed control, resume playback, mini player bar, focused mode, A-B loop. Toggle off to restore prior values.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Focus Preset presetFocus
Distraction-free viewing: hide Shorts, related videos, infinite scroll, notifications, and autoplay. Enables Zen Mode and Digital Wellbeing tracking. Toggle off to restore prior values.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v4.47.0
API retry backoff apiRetryBackoff
Enables bounded exponential backoff for retryable external API requests so a failing service is not hammered.
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Diagnostics: 4 settings
Setting
Purpose
Default and accepted values
Availability and behavior
Debug Mode debugMode
Enable verbose diagnostic logging to the console
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Diagnostic Error Log diagnosticLog
Capture a rolling log of YTKit errors and export as JSON for bug reports
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply + reversible teardown Since v0.1.0
Known-Breakage Notices featureDisableFeed
Pause features the project has confirmed broken by a YouTube change, until a fix ships. Fetches a small text file from the Astra Deck repository; it can only ever pause a feature, never enable one.
Default: On
Extension + userscript Store-safe + GitHub-full Global Live apply Since v4.84.0
Selector auto refresh selectorAutoRefresh
Checks once a day for an updated page-matching rule set, through the same signed fetch, digest verification and rollback the manual Refresh button uses. Off by default, and no request is made while it is off.
Default: Off
Extension + userscript Store-safe + GitHub-full Global Live apply Since v4.89.0
Architecture
network boundary
rules/zero-ads.json Static MV3 rules, blocks known YouTube ad request surfaces
document_start
early.css Zero-ad shell collapse plus feature-scoped anti-FOUC CSS
ytkit-main.js MAIN world, canPlayType patching for codec/format filtering
document_idle
runtime-bootstrap.js ISOLATED world, reads settings and starts the guarded loader (<150 KB)
runtime-core-loader.mjs dynamic module graph, core + download bootstrap + ytkit
features/* dynamic, settings-gated feature modules
background.js Service worker, fetch proxy, downloads, gated cookie handoff
Split-context model, MAIN world for page API interception, ISOLATED world for extension APIs and DOM
Lazy runtime graph, normal YouTube pages inject only the small bootstrap; the module catalogue is exposed through a per-session dynamic URL and loaded idempotently after the bootstrap turn
Settings gate, a deferred feature module is skipped only when every feature it owns is switched off. Route gating is deliberately absent: a module is not withheld because of the page you happen to be on, since an SPA navigation would then have to fetch it mid-flight. Inline fallbacks preserve startup and userscript parity
SPA-aware, hooks yt-navigate-finish, yt-page-data-updated, popstate, and video-id attribute changes
Tiered feature init, critical features load synchronously, normal features in requestAnimationFrame, lazy features in requestIdleCallback
Crash recovery, features that crash 3 times auto-disable with console warning
Conflict map, 6 conflict pairs enforced at both toggle and init time
Trusted Types compliant, all innerHTML via TrustedHTML policy wrapper
Safe mode, append ?ytkit=safe to any YouTube URL, or ytkit.unsafe() in console to exit
Zero-ad request rules use the static MV3 declarativeNetRequest API, are restricted to YouTube initiators and known advertising endpoints, and do not inspect or transmit request contents
Reversible anti-adblock recovery reports the visible YouTube enforcement selector and sampled playback state without touching the native dialog. Pausing Astra's own rules takes an explicit click, shows a 15-minute deadline, and restores them through a browser alarm even after the page closes
EXT_FETCH proxy uses domain allowlist, blocks SSRF to private networks
Request/response headers filtered (Cookie, Set-Cookie, etc. stripped globally; Authorization only forwarded to explicit BYO-key/local service origins such as OpenAI/Anthropic/Ollama/MediaDL)
Response body capped at 10 MB, fetch timeout capped at 60s
Authenticated downloads expose only four required secure YouTube cookie
names behind a 20-second, one-use capability bound to the requesting tab and
document after Astra Downloader proves native API v2 identity; legacy health
tokens cannot release cookies
Quick Links blocks javascript:, data:, and vbscript: URIs and accepts
only YouTube-owned destinations
Explicit CSP: script-src 'self'; object-src 'self'; connect-src allowlists documented provider origins. GitHub-full alone carries a scheme-scoped https://* connection lane because CSP cannot know a user-selected host in advance; browser permissions still require one exact host and never grant all sites.
Verifying a download
Releases carry SHA256SUMS and the allowed-signers file from this
repository, and once a signing key is published (see below) a detached
SHA256SUMS.sig alongside them. Two commands, and both have to pass. The
first says who produced the list of hashes:
ssh-keygen ships with Git for Windows, macOS, and every Linux, so there is
nothing to install. On Windows use Git Bash; PowerShell users can substitute
Get-FileHash for the second command.
Why both. Releases are built on one machine with no CI, so the artifacts and
their checksum file come from the same place. Anyone who can forge one can
forge the other, which makes an unsigned checksum file a corruption check and
not a provenance claim. The signature is what makes it a claim about origin.
No signing key is published yet, so allowed-signers currently lists none and
the first command has nothing to check against. Until it does, treat releases
as unsigned and prefer the source tree.
Trust & Transparency
Fully open-source, every line of extension, companion, and build tooling is auditable
No telemetry, no analytics, no tracking, zero data leaves the browser except to APIs you explicitly enable
SBOM + checksummed manifest on every release build: a CycloneDX bill of materials for the npm tree, plus release-manifest.json and SHA256SUMS covering every artifact and the manifest itself. Those let you confirm a download is intact. They do not prove who built it (signing-claim: unverified): no release signing key is published yet, so SHA256SUMS.sig is absent and the hashes travel from the same place as the files. Treat provenance as unverified until allowed-signers carries a key
External CRX signing key, maintainer-only, never in the repo or CI
Credential scrub on settings export, API keys, tokens, and secrets are automatically stripped
Profile-split permissions, store-safe builds retain the authenticated companion handoff but strip AI, Ollama, and user-selected remote origins; GitHub-full keeps those capabilities behind runtime prompts, with Cobalt limited to an authorized self-hosted instance
Inspectable remote rules, optional Video Hider subscriptions preserve a
hashed last-known-good payload with HTTP validators and visible freshness;
stale rules are explicit and user-disableable, never silently replaced by a
malformed response
A repair channel that can only ever pause, the known-breakage feed names a
shipped feature, an issue, and a version range; it cannot enable anything,
write a setting, or supply copy, code, or links, and it is switchable off
26+ hardening passes documented in CHANGELOG with per-fix CVE/audit traceability
Privacy policy covers data handling for every API origin the extension contacts
SponsorBlock data attribution, the SponsorBlock and DeArrow features use
SponsorBlock API/database data licensed under
CC BY-NC-SA 4.0.
Astra Deck may reformat titles and visualize segments; those presentation
changes are made by Astra Deck and are not endorsed by SponsorBlock.
Reaction Spammer
The optional Reaction Spammer feature lets you pick a set of YouTube
live-chat reactions and fire them in a randomized loop at a chosen
interval. It ships in two forms:
Bundled in the MV3 extension as a Live Chat feature toggle, surfaces a floating launcher on live_chat pages.
Standalone as YT_Reaction_Spammer.user.js, a Tampermonkey /
Violentmonkey userscript with no extension dependency.
Default: OFF, opt-in only. Rapid synthetic reactions could trigger
YouTube's automated-behavior heuristics and result in account rate-
limiting or flagging. The first time you open the launcher per profile,
an amber toast surfaces this warning. The minimum interval is clamped
to 500 ms in both the extension and the standalone userscript, faster
than ~2 Hz is unsafe.
Use at your own risk.
Languages
Astra Deck ships with 11 bundled UI locales. These are extension only, YTKit.user.js bundles no locale catalogues, so the userscript tier is English:
Code
Language
en
English (default)
ar
العربية
de
Deutsch
es
Español
fr
Français
it
Italiano
ja
日本語
ko
한국어
pt_BR
Português (Brasil)
ru
Русский
zh_CN
简体中文
The popup language dropdown's "Auto (browser default)" option shows the
detected language inline. The selection writes
chrome.storage.local._localeOverride; the in-page YouTube workspace
picks up the override on next page navigation. Feature-definition entries
inside ytkit.js resolve through generated locale keys with English fallbacks;
community translations welcome via PR against extension/_locales/<lang>/messages.json.
Compatibility
Browser
Method
Status
Chrome / Edge / Brave
Extension (MV3)
Fully supported
Firefox 142+
Extension (MV3)
Supported, but the XPI is unsigned, so a permanent install needs Developer Edition / Nightly / ESR; Release and Beta can only load it temporarily (see Firefox)
Chrome / Firefox
Tampermonkey / Violentmonkey
Supported (userscript)
Safari
Userscripts app
Limited
Not supported: Mobile browsers, YouTube Music, and YouTube Studio. Embedded
/embed/:id pages have bounded player/quality support, not full watch-page
parity.
Optional browser capabilities
Astra Deck probes optional APIs before using them. The popup diagnostics bundle
includes the same generated matrix used by the runtime at
build/browser-capability-matrix.json, so support reports identify both the
available capability and the promised fallback.
The platform API adoption policy also records
why six newer extension and web APIs are retained or deferred at the Chrome 120
and Firefox 142 floors. A capability doesn't get a second runtime path unless
that path lets Astra remove more compatibility code than it adds.
Capability
Chromium
Firefox
Fallback when absent
Built-in Summarizer
Chrome 138+ when the local model is exposed
Not exposed
Local Summary uses the configured BYO-key lane explicitly
Built-in Translator
Chrome 138+ when the requested language pack is exposed
Not exposed
Transcript translation says so and uses the configured BYO-key lane
Astra Downloader
Companion health endpoint reachable
Same companion contract
User-authorized self-hosted Cobalt path after an exact host grant; companion-only panels stay unavailable
Ollama
Local server at 127.0.0.1:11434
Same loopback contract
Selected remote/BYO provider, never an implicit provider switch
Document PiP
Chrome 116+
Firefox 151+
Standard video PiP
Language Detector
Chrome 138+ when the local model is exposed
Not exposed
Conservative text comparison
Prompt API
Chrome 138+ when Gemini Nano is ready
Not exposed
Transcript viewing/export remain available; no implicit remote Q&A
Building
npm ci
npm test
npm run check
# Python dependency auditing lives in the Astra Downloader repository
npm run build # Build store-safe + Chromium-store + GitHub-full artifacts
npm run build:userscript # Include userscript, SBOM, manifest, and SHA256SUMS
npm run check:zero-ads # Validate the static rule contract and packaged manifest
npm run smoke:zero-ads:live # Cold-load desktop YouTube and verify blocked requests + collapsed shells
npm run smoke:main-bridge:live # Check on live YouTube that page-context features get their settings and a page can't forge them
npm run smoke:a11y # Check real extension pages plus controlled locale and accessibility states
npm run smoke:live-chat # Open a current YouTube live-chat frame and verify Astra attached
npm run smoke:firefox # Prove Firefox DNR, shell collapse, search, and SPA player behavior
npm run smoke:userscript-managers # Install and exercise YTKit in real Tampermonkey + Violentmonkey builds
npm run release:browser-smokes # Run Chromium, live-chat, Firefox, and userscript-manager release gates
npm run smoke:settings-overlay -- --desktop-only # Verify every extension settings destination at desktop sizes
npm run smoke:settings-userscript # Verify every userscript settings destination at desktop sizes
npm run release:prepare # Check + desktop browser gates + build + readiness
npm run release:prepare:no-crx # Same release gates, without any CRX or maintainer key
npm run release:sbom # Regenerate build/astra-deck-npm-sbom.cdx.json
npm run release:manifest # Regenerate release-manifest.json + SHA256SUMS
npm run release:readiness -- --require-pass # Generate release readiness JSON/Markdown
npm run release:health # Gate manifest, selectors, startup, and real-DOM smoke
npm run release:channels # Validate the checked-in channel ledger
npm run release:promote -- --channel userscript # Promote only after release:health passes
npm run release:rollback -- --channel userscript # Restore the recorded artifact without rebuilding
npm run release:verify-digests -- --tag vX.Y.Z # Compare uploaded asset digests after release upload
node build-extension.js --profile store-safe
node build-extension.js --profile chromium-store
node build-extension.js --profile github-full
node build-extension.js --bump patch # Bump and build
node build-extension.js --bump minor --with-userscript
The UI test inventory drives 44 live builders against connected DOM fixtures.
It catches wrong-parent mounts, duplicate children, missing state, and teardown
that leaves controls behind.
The live browser gates are desktop-only and require network access, Firefox,
and geckodriver on PATH (or FIREFOX_PATH / GECKODRIVER_PATH). They use
throwaway Firefox profiles and never touch the normal browser profile. The
real-manager lane downloads only the versioned AMO XPI URLs pinned in
scripts/userscript-manager-fixtures.json and verifies each size and SHA-256
before temporary installation.
The live Firefox zero-ad smoke also records the home page, search, SPA player,
blocked probe, and collapsed ad-shell states. Disposable profile cleanup is
bounded to the profile path used by that run.
The pinned manager smoke passes with Violentmonkey 2.47.0 and Tampermonkey
5.5.0. It verifies the install flow and the shell-only userscript contract in
fresh Firefox profiles.
The extension loads Player Dock from its preloaded feature module and keeps
only a descriptor in the large content-script bundle. The generated userscript
core uses the same module source, so runtime checks exercise the code that
ships rather than a discarded fallback copy.
Video Hider follows the same layout. Its feed, filter-list, and direct-watch
runtime lives in the preloaded feature module, while ytkit.js keeps only the
settings descriptor needed if that module cannot load.
The Chromium zero-ad smoke tries the installed browser candidates in order. A
candidate without MV3 declarativeNetRequest support is reported and skipped,
so a local Chrome policy block does not prevent the Edge proof from running.
npm run build is safe for validation builds: if no maintainer key is
configured, CRX files are signed with ephemeral key material that is not
retained. Public release builds that include the userscript or bump a version
must use the external maintainer key via ASTRA_CRX_KEY_PATH, the default
%LOCALAPPDATA%\Astra-Deck\keys\ytkit.pem location, or
node build-extension.js --crx-key <path>.
Or skip the CRX entirely.--no-crx (equivalently ASTRA_SKIP_CRX=1)
produces the ZIP / XPI / userscript / SBOM / manifest / SHA256SUMS set with no
CRX at all, and therefore needs no key, without it a release build with no key
aborts before producing anything:
npm run release:prepare:no-crx # one command: build + SBOM + manifest + readiness
node build-extension.js --with-userscript --no-crx # or just the build
This is the normal path for this project. Self-hosted CRX installs are
Linux-only on modern Chrome, and the last two published releases (v4.50.2,
v4.50.7) shipped no CRX at all, so the maintainer key does not gate a release.
Release readiness records the build as crxSigningMode: "none" and verifies
that build/ really contains no CRX before accepting it.
Outputs in build/ (the .crx files only when the build was not run with --no-crx):
astra-deck-chromium-store-chrome-v*.zip (download-free Chrome Web Store / Edge posture)
astra-deck-github-full-chrome-v*.zip + .crx (AI, local companion, optional self-hosted Cobalt)
astra-deck-github-full-firefox-v*.zip + .xpi
ytkit-v*.user.js (with --with-userscript / npm run build:userscript)
astra-deck-npm-sbom.cdx.json, release-manifest.json, and SHA256SUMS
release-readiness/release-readiness.json and
release-readiness/release-readiness.md after npm run release:readiness
release-health.json after npm run release:health; promotion refuses a
failed or stale health report
release-channels.json records the active, last-known-good, and rollback
artifact for every extension profile/browser channel plus the userscript. A
promotion checks the exact manifest hash and candidate asset digest before
moving those pointers. If a release fails after publication, run
npm run release:rollback -- --channel <id> (or omit --channel for all
channels); rollback points the channel back to the stored artifact reference
and does not rebuild or mutate the failed artifact.
Companion release assets are intentionally separate from the default extension
build output. Only a companion release/staging pass should add
AstraDownloader.exe and AstraDownloader.exe.sha256 to build/. No
published release attaches the companion asset pair yet; verify the live
release asset list before promising the one-click setup path.
Requires Node 24+ (package.json engines and .nvmrc both pin it).
Power-User Console Helpers
Most controls live in the settings panel; a few advanced flows are exposed only on window.* for power users:
Entry point
What it does
?ytkit=safe URL parameter
Append to any YouTube URL to load with all features disabled (recovery mode).
ytkit.unsafe()
Exit safe mode from the DevTools console.
window.__ytkitOpenAnalytics()
Open the Watch History Analytics modal (30-day bar chart of watchTimeTracker data).
window.__ytkitSearchTranscripts(query)
Full-text search over the local IndexedDB transcript index (researchTranscriptIndex setting). Returns up to 200 hits.
window.__ytkitClearTranscriptIndex()
Wipe the local transcript index.
window.__ytkitDiagnostics.download()
Download a JSON bug report containing the diagnostic log ring buffer, selector-health snapshot, and active feature list.
Take back desktop YouTube with classic layouts, Theater Split, cleaner feeds, transcript tools, SponsorBlock, DeArrow, and private controls for Chrome, Firefox, or a userscript.