Firefox · Desktop + Android
Stream only the audio from YouTube¶
A razor-focused, privacy-first extension that plays YouTube and YouTube Music as pure audio. It fetches a direct audio stream with no login, hijacks the page <video> element, and keeps playing in the background while it blocks ads and telemetry, skips sponsored segments, and adds real YouTube Music power features.
What it does¶
- Audio-only, no video decode
A credentialless ANDROID_VR request returns a direct audio URL, and PlayerHandle swaps it into the page <video>. No video frames are decoded, so battery, heat, and bandwidth all drop sharply.
- Background & lock-screen play
Playback keeps running when the tab is hidden or the phone is locked, with OS media controls wired through the Media Session API.
- Ghost mode: ad & telemetry block
An allowlist webRequest filter drops first-party YouTube telemetry, and a response rewriter strips ad descriptors from InnerTube player / next responses. Everything fails open to native playback.
- Private segment skipping
SponsorBlock ranges are fetched by a four-character hash prefix with credentials omitted, so no plaintext video ID ever leaves the browser.
- YouTube Music power features
One shared Web Audio graph applies per-track loudness normalization and a five-band equalizer, with opt-in timed lyrics from LRCLIB.
- One-tap audio download
An off-by-default in-player control grabs the preferred direct audio format and hands a validated URL and sanitized filename to the downloads API.
Under the hood¶
YouTube Audio runs as four cooperating layers built from a single strict TypeScript source tree (WXT + Preact), shipping as a Firefox Manifest V2 extension. Each feature fails open: if anything breaks, native YouTube keeps working.
flowchart TB
subgraph UI["UI — Preact + signals"]
Popup["Popup quick controls"]
Options["Options page"]
end
subgraph BG["Background — persistent MV2"]
Telemetry["Telemetry allowlist filter"]
AdFilter["Ad response rewriter"]
Sponsor["SponsorBlock hash proxy"]
Remote["Download + LRCLIB proxy"]
end
subgraph Content["Isolated content — document_start"]
Bridge["Nonce-authenticated bridge"]
Styles["Cosmetic stylesheet"]
end
subgraph Page["MAIN world — page context"]
VR["Credentialless ANDROID_VR fetch"]
Handle["PlayerHandle: video.src hijack"]
WebAudio["Web Audio: loudness + EQ"]
end
Store[("browser.storage.local")]
Video[["YouTube <video>"]]
Popup <--> Store
Options <--> Store
Store --> Bridge
Bridge <-->|postMessage| Handle
Content --> BG
VR --> Handle
Handle --> Video
WebAudio --> Video
classDef aqua fill:#22d3b4,stroke:#0f9e86,color:#04120f;
class VR,Handle aqua; - MAIN world is the only layer that touches page-owned player APIs. It owns the credentialless fetch, the
<video>.srchijack, and the Web Audio graph. - Isolated content owns extension storage and the nonce-authenticated bridge, and injects one cosmetic stylesheet for quality-of-life tweaks.
- Background owns every privileged API: the telemetry allowlist, the ad response filter, the SponsorBlock hash proxy, and download / lyrics proxies.
- UI is a Preact popup and options page over one storage-backed settings model, with quick controls surfaced first for Firefox Android.
Explore the docs¶
- Architecture
Layer responsibilities, security boundaries, and per-milestone data-flow diagrams for every feature.
- Specifications
The "no spec, no code" contracts for milestones M0 through M7, from the foundation to release infrastructure.
- Decisions (ADRs)
Why WXT + TypeScript + Preact, and how single-ID AMO-listed distribution, the unlisted beta channel, and AMO preflight are structured.
- Research
The deep dives behind each feature: streaming internals, ad blocking, ghost mode, ANDROID_VR, mobile support, and more.
- Project History
Milestone handoffs (M0 to M7) plus live and mobile Firefox verification results.
- Agent Instructions
The documentation-driven protocols this AI-enabled repository follows for every change.
Milestone map¶
| Milestone | Feature | Specification | Handoff |
|---|---|---|---|
| M0 | Extension foundation | SPEC-001 | Handoff |
| M1 | Core audio-only playback | SPEC-002 | Handoff |
| M2a | Ghost telemetry blocking | SPEC-003 | Handoff |
| M2b | YouTube ad blocking | SPEC-004 | Handoff |
| M3a | Private segment skipping | SPEC-005 | Handoff |
| M3b | Quality-of-life controls | SPEC-006 | Handoff |
| M4 | YouTube Music extras | SPEC-007 | Handoff |
| M5 | Audio download | SPEC-008 | Handoff |
| M6 | Design polish | SPEC-009 | Handoff |
| M7 | Release infrastructure | SPEC-010 | Handoff |
New here?
Start with the Architecture overview for the big picture, then dive into any Specification for the exact contract behind a feature.