Privacy
The promise
Your audio never leaves your device. Compressr processes tab and page audio entirely inside the browser, on your machine, in real time. There is no server that receives your audio, no upload step, and no "send a sample for analysis" feature — by design, not just by current implementation. This is a product invariant, not a configuration option someone can accidentally turn on.
What never leaves the device
The following are never transmitted anywhere, under any setting, by any code path:
- Tab audio or any captured PCM audio data
- Microphone input
- Video frames or screen content
- Page content, DOM, or text
- URLs, tab titles, or browsing history
- Any per-site or per-device profile data (see below) beyond what the user explicitly chooses to sync via their own browser profile sync, which Compressr does not participate in
Loudness measurement, the AGC rider, the compressor, dialogue enhancement, sudden-volume
protection, and the true-peak limiter (ARCHITECTURE.md §6) all run inside the
AudioWorkletProcessor in-browser. Nothing in src/core/dsp has network access, and the
import boundary (src/core/** may not import browser/extension APIs) makes it structurally
awkward for that to change by accident.
Telemetry: opt-in, allow-listed only
Telemetry is off by default and, when a user opts in, is limited to a fixed allow-list of event names — no free-form payloads, no audio, no page content attached to any event:
installed
capture_started
capture_failed
capture_provider
preset_selected
ab_used
fair_compare_used
upgrade_clicked
purchase_completed
dsp_error
If an event isn't on this list, it isn't sent. Adding a new telemetry event requires adding
it to this list in this document and in src/core/telemetry, not just calling a "send"
function with a new string.
Site and device profiles
For automatic page-media leveling, a normalized hostname is sent to the background only long enough to select an explicit site rule. It is never written to extension storage, telemetry, desired-session state, or history.
- Site profiles (
hostname → preset) are created only when the user explicitly assigns a preset to a site. Compressr does not build profiles passively from browsing history, and does not infer a profile from how long you spent on a page or how often you visit it. - Device profiles are user-chosen labels (e.g. "Laptop speakers," "Headphones") the user attaches to a settings variant. They are not derived from hardware fingerprinting, device IDs, or any signal the user didn't explicitly provide.
- Both profile types are stored locally (
storage.local/storage.syncas appropriate) and are never part of any telemetry event.
Account and payments
Signing in and paying for Pro/Pro+ necessarily involves a server (Firebase Auth, Stripe via
the "Run Payments with Stripe" extension — see ARCHITECTURE.md §8–9). That path carries
account identity and entitlement state, never audio or page content. Free tier never touches
auth at all: leveling, SVP, and the DSP chain work fully offline-of-the-account, with no
sign-in required.