A low latency physical volume mixer with programmable buttons for Windows, inspired by Deej.
Control your audio with near-instant response and automate actions with real hardware - fully scalable to your needs!
Features • Hardware • Installation • Configuration • Building
For Windows users, the simplest way to get up and running is with the pre-compiled executable!
- Download: Go to the Releases Page and download the latest
DeskMixer.exefile. (no instalation needed) - Configure: Follow the steps in the Configuration section to bind your sliders and program your buttons!
DeskMixer features a sleek, modern interface with a dark theme and smooth animations designed for intuitive hardware control.
Clean, modern interface with volume sliders and programmable action buttons
Sliding configuration menu for easy customization
Visual Design:
- 🎨 Modern Interface: Premium glassmorphic design with customizable accent colors and animations
- 🪟 Frameless Window: Custom title bar with drag-to-move functionality
- 📐 Scalable Layout: Automatically adapts to any number of sliders and buttons
- ✨ Smooth Animations: Fluid transitions and visual feedback for all interactions
Volume Sliders:
- 🎛️ Visual Scale Indicators: Each slider displays a scale icon showing the full range
- 🏷️ Smart Labels: Automatically display bound applications (e.g., "Master + Spotify")
- 💚 Hardware Sync: Sliders animate smoothly when adjusted via hardware with green highlight feedback
- 🔄 Drag-and-Drop Reordering: Rearrange sliders to match your preferred layout
- 🖱️ Click-to-Configure: Click any slider to open its configuration menu
Action Buttons:
- 🎮 Customizable Grid: Arrange buttons in any grid size (rows × columns)
- 🔵 Active State Indicators: Blue highlight shows which buttons are configured
- ⚡ Hardware Feedback: Buttons flash when pressed on the physical device
- 🔄 Drag-and-Drop: Reorder buttons including empty placeholder positions
- 📝 Dynamic Labels: Button text adjusts to show the configured action
Configuration Menu:
- 📱 Sliding Panel: Smooth slide-in menu from the right side
- 🎯 Context-Sensitive: Different menus for sliders, buttons, and settings
- 🔍 Live Search: Browse and add applications with file picker integration
- 📋 Expandable Sections: Organized categories with collapsible headers
- ✅ Visual Selection: Active bindings highlighted with checkmarks
Settings & Customization:
- ⚙️ General Settings: Start hidden, Windows startup integration, slider sampling modes
- 📐 Layout Controls: Configure button grid dimensions (R×C)
- 🔄 Reorder Modes: Toggle swap modes for buttons or sliders independently
- 📊 Slider Sampling: Choose between Soft, Normal, or Hard sensitivity modes
- ℹ️ Version Display: Build version shown at bottom of settings menu
Hardware Integration:
- 🔌 Real-time Sync: Slider positions update instantly from hardware movements
- 🎯 Button Press Feedback: Visual flash confirms hardware button presses
- 🔄 Bidirectional Control: Changes sync between hardware and software
- 🚫 Read-only Sliders: UI sliders display-only to prevent conflicts with hardware control
A functional, handcrafted build - proving that professional results don't require a professional workshop!
DeskMixer takes physical volume control and supercharges it with macro-like button actions.
- ⚡ Low Latency: Optimized for near-instant response (~10-20ms) with 115200 baud serial communication
- 🎛️ Physical Sliders: Control individual application volumes with real hardware sliders
- 📊 Scalable Design: Add as many sliders as you need - the software adapts automatically
- 🔊 Flexible Targets: Control master volume, microphone, system sounds, or individual apps
- 🎚️ Adjustable Sensitivity: Choose between Instant, Responsive, Soft, Normal, or Hard sampling modes
- 💾 Persistent Settings: Your configuration is saved between sessions
- ⌨️ Custom Keybinds: Map any keyboard shortcut to physical buttons
- 🎮 Media Controls: Play/pause, next/previous track, seek forward/backward
- 🔇 Mute Controls: Instant mute/unmute for system, microphone, or specific applications
- 🔀 Audio Switching: Switch between audio output devices with a button press
- 🚀 App Launcher: Launch or focus applications instantly
- 🪟 System Tray: Runs minimized with quick access
- 🔌 Auto-Detection: Automatic serial port detection
- 🔄 Hot-Reload: Configuration updates in real-time
- 🎯 Focus Tracking: Optional control of currently active application
The software supports multiple volume control modes:
| Target | Description | Use Case |
|---|---|---|
| 🔊 Master | System master volume | Overall volume control |
| 🎤 Microphone | Default microphone input | Quick mic adjustments |
| 🔔 System Sounds | Windows notification sounds | Silence those pings! |
| ⭐ Current Application | Currently focused app | Dynamic control of active app |
| 🎵 Individual Apps | Specific applications | Dedicated controls (Spotify, Discord, etc.) |
| ❔ Unbound | No assignment | Flexible unassigned slider |
| ❌ None | Disabled | Slider inactive |
Note: The application list updates automatically based on running audio applications. The UI scales to accommodate any number of slider bindings you create!
- ⏯️ Play/Pause: Toggle media playback
- ⏭️ Next Track: Skip to next media track
- ⏮️ Previous Track: Go to previous media track
- ⏩ Seek Forward: Jump forward in current media
- ⏪ Seek Backward: Jump backward in current media
- 🔊 Volume Up: Increase system volume
- 🔉 Volume Down: Decrease system volume
- 🔇 Mute: Toggle mute for system, microphone, or specific application
- 🔀 Switch Audio Output: Switch between available audio output devices*
- ⌨️ Custom Keybind: Execute any keyboard shortcut (see KEYBIND_EXAMPLES.md)
- 🚀 Launch App: Start or focus specific applications
Pro Tip: Combine button actions with specific application targets for powerful workflows. For example:
- Mute Discord specifically with one button
- Launch Spotify and set volume to 50% with another
- Send custom shortcuts to specific apps
The button configuration UI scales dynamically - add as many buttons as your microcontroller has pins!
- Microcontroller: ESP32 or compatible Arduino board
- Sliders: 4x 10kΩ linear potentiometers (scalable to more)
- Buttons: 6x push buttons (scalable to more)
- Connection: PCB or breadboard
- Cable: USB cable for serial communication
You can modify these in the Arduino sketch to match your build:
Sliders:
- GPIO 33, 32, 35, 34
Buttons:
- GPIO 27, 25, 14, 26, 12, 13
Want more controls? Simply:
- Add more potentiometers/buttons to your hardware
- Update the pin configuration in
arduino/DeskMixer/DeskMixer.ino - Upload the modified firmware
- The DeskMixer software will automatically detect and configure the new inputs!
Wiring diagram showing connections between ESP32, potentiometers, and buttons
The DeskMixer circuit consists of three main components working together:
Power Distribution:
- The ESP32 is powered via USB connection to your computer
- All components share a common ground (GND) connection
- The 3.3V pin from the ESP32 powers the potentiometers
Potentiometer Connections (Volume Sliders): Each potentiometer has three pins:
- Left pin: Connected to GND (ground)
- Middle pin (wiper): Connected to ESP32 analog input pins (GPIO 33, 32, 35, 34)
- Right pin: Connected to 3.3V power
As you move the slider, the middle pin voltage varies between 0V and 3.3V, which the ESP32 reads as analog values (0-1024). The software then maps these values to volume levels (0-100%).
Button Connections: Each button uses a simple pull-down configuration:
- One side: Connected to ESP32 digital input pins (GPIO 27, 25, 14, 26, 12, 13)
- Other side: Connected to GND (ground)
- Internal pull-up resistor: Enabled in firmware (button reads HIGH when not pressed, LOW when pressed)
Color Coding in Diagram:
- Black: Ground connections
- Red: 3.3V power connections
- Yellow/Orange/Blue: Signal wires to ESP32 GPIO pins
💡 Wire Gauge: Use 22-24 AWG wire for connections. Solid core wire works well for breadboard prototyping, while stranded wire is better for the final build.
💡 Debouncing: The firmware includes software debouncing for buttons to prevent false triggers. No additional hardware debouncing (capacitors) is needed.
Coming Soon: 3D printable enclosure models and Gerber files for PCB manufacturing will be added in future updates!
- Download
DeskMixer.exefrom the Releases page. - Run the executable
Requirements:
- Python 3.13+
- Arduino IDE
- ESP32 board or compatible Arduino
Steps:
- Clone the repository:
git clone https://github.com/RaduAndre/DeskMixer.git
cd DeskMixer/src- Install dependencies:
pip install -r requirements.txt- Run the application:
python main.py- Open
arduino/DeskMixer/DeskMixer.inoin Arduino IDE - Select your board (ESP32) and COM port
- Upload the sketch
- The firmware will automatically communicate with DeskMixer
- Launch DeskMixer
- Connect Hardware: The application will automatically detect your Arduino's serial port
- Configure Sliders:
- Click on any slider to open the configuration menu
- Select from General options (Master, Microphone, System sounds, Focused application, Unbound)
- Or choose from Active sounds (currently running applications)
- Or add custom applications via the search function
- Multiple applications can be bound to the same slider
- Configure Buttons:
- Click on any button to open the action menu
- Select from Media Controls (Play/Pause, Next, Previous, etc.)
- Configure Mute actions with specific targets
- Set up custom Keybinds or Launch app actions
- Changes save automatically
Binding Options:
- General Targets: Master volume, Microphone, System sounds, Focused application, Unbound
- Active Sounds: Dynamically detected running applications with audio
- Custom Applications: Add any application via name search or file browser
- Multiple Bindings: Bind multiple applications to a single slider for grouped control
- Smart Labels: Slider labels automatically update to show all bound applications
Configuration Menu:
- Click any slider to open its dedicated configuration menu
- Expandable sections organize options by category
- Active bindings show checkmarks for easy identification
- Right-click custom applications to delete them from the list
- Browse for .exe or .lnk files to add new applications
Available Actions:
Media Controls:
- Play/Pause, Previous, Next
- Volume up/down
- Seek backward/forward
Advanced Actions:
- Mute: Choose target (Master, Microphone, System sounds, Focused application)
- Switch Audio Output: Cycle through devices or select specific output (Speakers, Headphones)
- Keybind: Enter custom keyboard shortcuts (see KEYBIND_EXAMPLES.md)
- Launch app: Browse and select applications to launch or focus
Configuration Menu:
- Click any button to open its action menu
- Expandable items reveal sub-options (e.g., Mute → Master/Microphone/etc.)
- Input fields for Keybind and Launch app actions
- File browser integration for selecting applications
- Active action highlighted with blue indicator
Button Grid:
- Open Settings menu (gear icon)
- Navigate to Layout → Grid Size
- Enter desired Rows (R) and Columns (C)
- Grid automatically validates against available buttons
- Invalid dimensions flash red with error feedback
Reordering Elements:
- Open Settings → Layout → Reorder Elements
- Select "Swap Buttons" or "Swap Sliders" to enter reorder mode
- Drag and drop elements to rearrange them
- Supports sparse layouts (buttons can occupy any grid position)
- Click the reorder option again to exit reorder mode
Access via the gear icon in the top-right corner:
General:
- Start Hidden (on tray): Launch minimized to system tray
- Start on Windows startup: Automatically launch with Windows
- Slider Sampling: Adjust hardware response sensitivity
- Instant: Zero-latency mode - no smoothing for immediate response
- Responsive: Minimal smoothing - very fast with slight stabilization
- Soft: Light averaging - balanced response (5 samples)
- Normal: Moderate averaging - smooth control (10 samples)
- Hard: Heavy averaging - very smooth, slower response (20 samples)
Layout:
- Grid Size: Configure button grid dimensions
- Accent Color: Customize the UI with 'Default' (Teal) or any custom color via the picker
- Reorder Elements: Enable drag-and-drop for buttons or sliders
- Double-click tray icon: Show/hide main window
- Right-click tray icon: Quick actions menu
- Window automatically minimizes to tray when closed
Create your own executable using either method:
cd src
python build_app.pycd src
python build_nuitka.pyBuilt executables will appear in src/build/dist/
The device shown in the gallery was handcrafted with basic tools and materials - no fancy workshop required! It's a testament that functional, effective hardware doesn't need to be professionally manufactured. The beauty of this project is in its functionality and the satisfaction of building something yourself.
DIY Philosophy: This project embraces the maker spirit - it's about creating tools that work for YOU, not winning beauty contests. If it controls your volume and makes your workflow better, it's perfect.
DeskMixer is designed to grow with your needs:
- Start small: 2 sliders and 2 buttons
- Go big: 16+ sliders and 20+ buttons
- Mix it up: Combine sliders, buttons, rotary encoders, or other inputs
The software automatically adapts to whatever hardware configuration you define in the Arduino firmware!
- Configure targets per-slider/button
- Create complex automation chains
- Save multiple profiles (future feature)
For comprehensive keybind examples and syntax, see KEYBIND_EXAMPLES.md
Contributions are welcome! Whether it's:
- 🐛 Bug reports
- 💡 Feature suggestions
- 📝 Documentation improvements
- 🔧 Code contributions
- 📸 Sharing your build
Feel free to open an issue or submit a pull request!
This project is open source. Check the LICENSE file for details.
- Inspired by Deej by Omri Harel
- Built with passion for makers and tinkerers everywhere
- Special thanks to everyone who builds DIY hardware and shares their projects!
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with 🎛️ by makers, for makers
Star ⭐ this repo if you find it useful! You can also support further development buying me a Coffe ☕.