Skip to content

vtaeely/KnobMixer

Repository files navigation

KnobMixer

Build Windows exe License: MIT Python Platform

KnobMixer is a Windows per-app volume controller. It redirects keyboard volume keys, Fn volume shortcuts, media buttons, and supported USB volume knobs to one selected application instead of changing the Windows master volume.

KnobMixer icon

What it does

Normally, Volume Up, Volume Down, Mute, Fn volume shortcuts, and many physical volume knobs control the global Windows volume. KnobMixer listens for those controls and applies them to the selected audio application, such as Spotify, Discord, a browser, or a game.

Example:

Selected app: Spotify.exe

Volume Up   -> increase only Spotify volume
Volume Down -> decrease only Spotify volume
Mute        -> toggle only Spotify mute

KnobMixer tries to suppress changes to Windows master volume when possible. This is best-effort behavior because Windows and some HID Consumer Control devices do not always allow full suppression.

Features

  • Lists active Windows audio sessions.
  • Controls Spotify, Discord, browsers, games, and other processes with active audio sessions.
  • Remembers the selected process by name.
  • Controls all audio sessions that belong to the selected process.
  • Automatically resumes control when the process closes and opens again.
  • Supports standard VK_VOLUME_UP, VK_VOLUME_DOWN, and VK_VOLUME_MUTE keyboard events.
  • Supports Fn volume shortcuts when the keyboard sends standard Windows volume events.
  • Supports Raw Input / HID Consumer Control devices for many multimedia keyboards, macro pads, and USB volume knobs.
  • Always-on volume intercept: the UI checkbox is locked on intentionally.
  • Runs in the Windows system tray.
  • Stores settings in a local JSON file.
  • Builds into a standalone .exe with PyInstaller.

Fn key combinations

KnobMixer works with laptop keyboards and compact keyboards that use shortcuts such as Fn + F1, Fn + F2, Fn + F3, or similar media-key combinations, as long as those shortcuts send standard Windows volume events.

Important: KnobMixer does not intercept the Fn key directly. On most keyboards, Fn is handled by the keyboard firmware before Windows receives anything. KnobMixer reacts to the final volume event that Windows receives, such as:

VK_VOLUME_UP
VK_VOLUME_DOWN
VK_VOLUME_MUTE

If a keyboard handles Fn shortcuts completely in firmware or sends non-standard HID events, behavior may depend on the device. In that case, Raw Input / HID mode may still detect the volume event, but full master-volume suppression is not guaranteed.

Supported controls

KnobMixer is not tied to one specific keyboard or device model. It is designed to work with devices that send standard Windows volume input:

  • regular keyboard volume keys;
  • laptop Fn volume shortcuts;
  • multimedia keyboards;
  • USB volume knobs;
  • macro pads;
  • HID Consumer Control devices;
  • physical volume knobs that send standard volume events.

Requirements

  • Windows 10 or Windows 11
  • Python 3.11+ for source mode
  • Administrator mode may be required for some devices or elevated target applications

Quick start from source

git clone https://github.com/vtaeely/KnobMixer.git
cd KnobMixer
py -3.12 -m venv venv
venv\Scripts\activate
python -m pip install --upgrade pip
pip install -r requirements.txt
python main.py

If Python 3.12 is not installed, use Python 3.11:

py -3.11 -m venv venv

Build Windows exe

build.bat

The executable will be created here:

dist\KnobMixer.exe

Project structure

KnobMixer/
├── .github/
│   ├── ISSUE_TEMPLATE/
│   ├── workflows/
│   │   └── build-windows.yml
│   └── pull_request_template.md
├── app/
│   ├── assets/
│   ├── models/
│   ├── services/
│   └── ui/
├── docs/
├── logs/
├── main.py
├── requirements.txt
├── requirements-dev.txt
├── build.bat
├── run.bat
├── KnobMixer.spec
├── CHANGELOG.md
├── LICENSE
├── README.ru.md
└── README.md

How it works

  1. KnobMixer reads active Windows audio sessions through Windows Audio Session API.
  2. The user selects an app from the UI or tray menu.
  3. KnobMixer stores the selected process name.
  4. Volume events are captured through a low-level keyboard hook and/or Raw Input.
  5. The selected process volume is changed through pycaw.
  6. If the process has multiple audio sessions, all matching sessions are controlled.
  7. If the process is not running, the app shows that the target application was not found.
  8. When the process appears again with the same name, control resumes automatically.

Technologies

  • PyQt6 for the desktop UI.
  • pycaw for Windows audio sessions.
  • comtypes for Windows COM interop.
  • psutil for process information.
  • pywin32 for Raw Input and Windows message handling.
  • ctypes for the low-level keyboard hook.
  • PyInstaller for one-file Windows builds.

Limitations

Windows does not always allow an application to fully suppress master volume changes. This is especially common with devices that send volume events as HID Consumer Control input.

Best suppression behavior usually happens with standard keyboard events:

VK_VOLUME_UP
VK_VOLUME_DOWN
VK_VOLUME_MUTE

For USB knobs, multimedia devices, or some Fn shortcuts, Raw Input can receive the event, but the system volume may still change before KnobMixer can react.

Antivirus notice

KnobMixer uses Windows keyboard hooks and Raw Input to capture volume keys and HID media controls. Some antivirus software may flag PyInstaller-built executables as suspicious because of this behavior.

The source code is available for review, and release builds are produced through GitHub Actions.

Troubleshooting

See docs/TROUBLESHOOTING.md.

Build artifacts

GitHub Actions builds KnobMixer.exe on Windows and uploads it as a workflow artifact. Open the latest successful workflow run and download KnobMixer-windows.

Stable release builds are available on the Releases page.

License

MIT License. See LICENSE.

Packages

 
 
 

Contributors