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 the moment it reconnects and a partial switch reports what is missing rather than silently half-failing.
Under the surface it is a four-layer clean architecture in Python: a pure domain, an application layer of use cases, infrastructure speaking to Windows Core Audio through pycaw and comtypes 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-tab app that installs per-user with no administrator rights, stores profiles in a local JSON file under your own AppData and talks to nothing outside your machine: no account, no cloud, no background service. Launch it twice and the existing window fronts itself; headless switches stay exempt, so the Stream Deck keys keep working while the window is open.
Full reasoning at crankthecode.com.