Why this exists

Windows treats changing your default audio devices as a settings task: several clicks deep, once for output and again for input, every single time your setup changes. If you move between speakers for music, a headset for calls and an interface for recording, that dig happens many times a day and it always happens at the worst moment, mid-call or mid-session, while everyone waits.

Audio Deck turns each setup into a named profile pinning one default output and one default input, applied together in one click. The same switch is available headless from the command line with a proper exit code, which is exactly what a Stream Deck key or a batch file needs, so a whole setup change becomes one physical button press. Edge cases are handled honestly: a profile naming a device that is currently offline (a powered-off Bluetooth headset) applies that device the moment it reconnects as the same device; a switch reports each device that did not land with its reason: missing, refused, set for only some of Windows' roles or accepted without the default changing.

Under the surface it is a four-layer clean architecture in Python: a pure domain, an application layer of use cases, infrastructure speaking to each platform's audio stack (Windows Core Audio through pycaw, macOS CoreAudio, PulseAudio and PipeWire through pactl with pw-dump and pw-metadata as fallbacks) and two thin clients (the PySide6 GUI and the CLI) wired in separate composition roots. Structural tests parse the source on every run, so a layering violation fails the build instead of surviving into review.

What works now is a two-view app that installs per user (with no administrator rights on Windows or Linux) and stores profiles in a local JSON file in your own per-user app-data folder: no account, no cloud, no background service. The one thing it asks the network is whether a newer release exists: an anonymous call to GitHub's releases API shortly after launch and once a day, carrying nothing about you or your profiles. Launch it twice and no second window opens (on Windows the existing one fronts itself); headless switches stay exempt, so the Stream Deck keys keep working while the window is open.