Linux-native input/mix routing for PipeWire, inspired by the workflow of modern creator mixers.
Group unlimited apps into software inputs such as Game, Chat, and Music; then build independent Personal, Stream, Chat, and custom mixes for monitoring and capture. Hardware inputs join the same matrix with independent routing, levels, and visual identity.
inputs ──► independent route cells ──► Personal / Stream / Chat mixes
├──► headphones / speakers
└──► WaveSink: <mix> for OBS/Discord
- Inputs and mixes - software channels group unlimited apps under one source fader; every input×mix cell has its own on/off, send level, and mute, so each mix keeps its own balance without touching the others
- Apps - running apps appear automatically; assign once, remembered forever
- Mixes - each mix is a recordable source (
<name> (WaveSink)): in OBS or Discord, add the mix as an audio input instead of Desktop Audio. A mix plays to any output devices you pick, or to the system default, and its slider is the one volume for all of them. New inputs and mixes start unrouted - tick the cells you want. - No amplification - every level tops out at 100% (unchanged audio)
- Equalizer - per-input parametric EQ (up to 10 bands) with a draggable response curve, bundled community presets, and import/export including AutoEq text blocks
- Hardware inputs - add mics and capture devices to the matrix and route each independently to any mix, with optional Audio FX (noise gate, compressor, limiter) applied before every mix it feeds
- Meters - live levels inside every slider; optional Pro Audio Metering (dBFS scale, dB labels, peak readout) and adjustable meter frame rate
- Profiles - save and switch full layouts from the tray
- Stream Deck - a local control socket lets stream controllers drive levels, mutes, routes, solo and profiles and follow them live; the OpenDeck plugin uses it
- Themes - Original plus all 22 stock Omarchy palettes, available on every distro. Omarchy installs can also follow their live desktop palette.
Each script fetches the newest stable release, verifies its SHA256SUMS entry, and installs it. Packages are for x86_64. WaveSink does not publish to AUR or COPR.
Arch / Omarchy:
curl -fsSLO https://raw.githubusercontent.com/calmasacow/WaveSink/main/scripts/install/arch.sh && bash arch.shUbuntu 24.04 / 26.04 LTS, Linux Mint 22, Pop!_OS 24.04:
curl -fsSLO https://raw.githubusercontent.com/calmasacow/WaveSink/main/scripts/install/ubuntu.sh && bash ubuntu.shFedora 43 / 44:
curl -fsSLO https://raw.githubusercontent.com/calmasacow/WaveSink/main/scripts/install/fedora.sh && bash fedora.shNixOS (user profile):
curl -fsSLO https://raw.githubusercontent.com/calmasacow/WaveSink/main/scripts/install/nixos.sh && bash nixos.shOther distros — portable AppImage, no root:
curl -fsSLO https://raw.githubusercontent.com/calmasacow/WaveSink/main/scripts/install/appimage.sh && bash appimage.shRun ~/.local/share/AppImages/WaveSink.AppImage afterward. For a launcher entry,
use Gear Lever or AppImageLauncher.
For manual downloads, see Releases.
Requires PipeWire with pipewire-pulse and WirePlumber 0.5+ (the default
on most current distros).
npm install
npm run tauri dev # run
npm run tauri build # packageConfig lives in ~/.config/wavesink as plain JSON. Existing ~/.config/sink
state moves there automatically on first launch.
The routing contract is documented in docs/routing-model.md.
On first launch after upgrading, old JSON files are backed up beside the new
routing.json; see the migration notes there for the old Sink mapping.
For bugs, feature requests, or support, open a GitHub issue.
Bundled Omarchy color palettes are used under the MIT License; see third-party notices.



