Skip to content

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  &mdash;  Preact + signals"]
        Popup["Popup quick controls"]
        Options["Options page"]
    end

    subgraph BG["Background  &mdash;  persistent MV2"]
        Telemetry["Telemetry allowlist filter"]
        AdFilter["Ad response rewriter"]
        Sponsor["SponsorBlock hash proxy"]
        Remote["Download + LRCLIB proxy"]
    end

    subgraph Content["Isolated content  &mdash;  document_start"]
        Bridge["Nonce-authenticated bridge"]
        Styles["Cosmetic stylesheet"]
    end

    subgraph Page["MAIN world  &mdash;  page context"]
        VR["Credentialless ANDROID_VR fetch"]
        Handle["PlayerHandle: video.src hijack"]
        WebAudio["Web Audio: loudness + EQ"]
    end

    Store[("browser.storage.local")]
    Video[["YouTube &lt;video&gt;"]]

    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>.src hijack, 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.

Read the full architecture

Explore the docs

  • Architecture

Layer responsibilities, security boundaries, and per-milestone data-flow diagrams for every feature.

System design

  • Specifications

The "no spec, no code" contracts for milestones M0 through M7, from the foundation to release infrastructure.

SPEC-001 to SPEC-011

  • Decisions (ADRs)

Why WXT + TypeScript + Preact, and how single-ID AMO-listed distribution, the unlisted beta channel, and AMO preflight are structured.

Architecture decisions

  • Research

The deep dives behind each feature: streaming internals, ad blocking, ghost mode, ANDROID_VR, mobile support, and more.

Research notes

  • Project History

Milestone handoffs (M0 to M7) plus live and mobile Firefox verification results.

Handoffs & verification

  • Agent Instructions

The documentation-driven protocols this AI-enabled repository follows for every change.

Working agreement

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.