No description
Find a file
2026-05-20 23:49:58 +10:00
crates stage 6: per-app 2026-05-20 23:49:58 +10:00
docs stage 2 2026-05-19 16:33:09 +10:00
profiles stage 2 2026-05-19 16:33:09 +10:00
.gitignore stage 2 2026-05-19 16:33:09 +10:00
Cargo.lock stage 6: per-app 2026-05-20 23:49:58 +10:00
Cargo.toml stage 6: per-app 2026-05-20 23:49:58 +10:00
flake.lock stage 2 2026-05-19 16:33:09 +10:00
flake.nix stage 2 2026-05-19 16:33:09 +10:00
IPC.md stage 2 2026-05-19 16:33:09 +10:00
PLAN.md stage 6: per-app 2026-05-20 23:49:58 +10:00
README.md stage 6: per-app 2026-05-20 23:49:58 +10:00
rust-toolchain.toml stage 2 2026-05-19 16:33:09 +10:00

headroom

AGC + compressor + true-peak limiter daemon for PipeWire, in Rust.

Headroom puts a per-application audio safety net between noisy sources (browsers, voice chat, random video) and your speakers, while leaving the things you don't want compressed (music players, games, DAWs) untouched.

  • Hard 0.1 dBTP ceiling on the processed route, with proper inter-sample-peak handling, enforced inline so the contract holds regardless of control-plane state. Streams routed bypass ride the real sink directly and are not in scope of the contract — that's the trade-off that makes the per-app exclusion useful.
  • Per-app exclusion with profile-driven rules.
  • Single binary daemon + CLI, controlled over a Unix-domain socket with a documented JSON wire protocol (see IPC.md).
  • First-party Rust crate (headroom-client) for programmatic use; third-party clients (Qt panels, status bars, …) target the wire protocol directly.

See PLAN.md for the full design and roadmap.

Status

Pre-alpha. Wire protocol and crate scaffolding are in; daemon and filter are under construction.

Building

nix develop          # toolchain + pipewire dev libs + helpers
cargo build          # iterate
nix build            # final packaged headroom binary

License

GPL-3.0-or-later for the daemon and CLI. headroom-dsp and headroom-ipc are MPL-2.0 so they can be reused by non-GPL plugin hosts and clients.