Volume control for macOS Multi-Output Devices.
F11 / F12 keys, scroll-wheel, and a custom HUD — works when macOS's native volume refuses to.
macOS deliberately disables the keyboard volume keys and the menu-bar slider when a Multi-Output Device is selected as system output. If you drive two Apple Studio Displays, monitors + headphones, or any aggregate output, you've hit the grey-slider problem.
Halo is a menu-bar app that fixes this. It intercepts F11 / F12 / mute and writes volume to each sub-device of the aggregate directly, so your speakers change together.
This is a fork of rlxone/MultiSoundChanger by Dmitry Medyuho (Apache 2.0), modernised for macOS Sequoia / macOS 15+ and with additional quality-of-life features. The original project did the hard part — figuring out the CoreAudio incantations for writing to aggregate sub-devices. Without it, Halo wouldn't exist.
- Custom volume HUD that replaces Apple's broken private
OSDManager(no chiclets bar on macOS Sequoia+). - 32 finer volume steps (~3% each) instead of the OS default 16.
- Scroll-wheel on the menu-bar icon to adjust volume without reaching for keys.
- One-click "Create Halo Speakers" — auto-builds a Multi-Output aggregate from connected Apple Studio Displays, skipping Audio MIDI Setup.
- Volume persistence — each sub-device's level is saved to
UserDefaultson change and restored at launch, avoiding the cold-boot "slammed to 100%" surprise. - Launch at Login toggle via
SMAppService. - Universal binary — native on Apple Silicon and Intel.
- Stable self-signed code-signing identity so macOS's TCC keeps Accessibility grants across rebuilds during development.
- Modern macOS compat fixes — storyboard module resolution after
PRODUCT_NAMErename, aggregate-device drift handling, bundledOSD.frameworkbinary replaced with the current SDK stub so arm64 linking works.
| Native macOS | Halo | |
|---|---|---|
| Volume keys on Multi-Output Device | ❌ | ✅ |
| Scroll-wheel volume on menu bar | ❌ | ✅ |
| Custom volume HUD (macOS 15+) | ❌ broken | ✅ |
| Auto-create aggregate for Studio Displays | ❌ | ✅ |
| Volume persistence across reboots | ✅ | |
| Launch at Login | ✅ | ✅ |
| Free | ✅ | ✅ |
| Signed by Apple | ✅ | ❌ self-signed (see Limitations) |
The Halo menu: output-device picker with the one-click Create Halo Speakers aggregate, Launch at Login toggle, and shortcuts to Sound Preferences and Audio Devices.
The custom HUD that fires on F11/F12 or scroll-wheel. Replaces Apple's private OSDManager, which no longer renders reliably on macOS Sequoia.
Requires macOS 13 (Ventura) or later.
git clone https://github.com/flight-william/MultiSoundChanger.git -b rebrand/halo
cd MultiSoundChanger
pod install # CocoaPods is required
./scripts/setup-codesign-cert.sh # one-time: creates a self-signed cert
./scripts/build-and-install.sh # build Release, sign, copy to /ApplicationsOn first launch, grant Accessibility permission when prompted (Privacy & Security → Accessibility).
No public release binary yet. Build from source, or ask the author.
If you don't already have one in Audio MIDI Setup, you have two paths:
- Apple Studio Displays (two or more) — click Halo's menu-bar icon → Create Halo Speakers. One click.
- Any other combination — open Audio MIDI Setup,
+→ Create Multi-Output Device, tick the devices you want, right-click → Use This Device for Sound Output. Halo will pick it up.
- Click Halo's menu icon, pick your Multi-Output Device from the list.
- Press F11 / F12 to adjust volume, F10 to mute.
- Or scroll on your trackpad while hovering near Halo's icon.
- Optional: toggle Launch at Login in the menu.
This fork is a personal project. Please read before using:
- Not signed by Apple — Halo is signed with a self-signed certificate, not an Apple Developer ID. Gatekeeper will warn on first launch. If you build from source yourself, you control the signing identity; if you trust a pre-built binary, you're trusting whoever built it.
- Not notarized — Apple's malware-scan warrant isn't applied, because that requires a paid Developer Program membership.
- Uses Apple's private
OSD.frameworkfor the bridging header. Private APIs can change between macOS versions; a rebuild against the new SDK usually fixes breaks, but no guarantees. - "Create Halo Speakers" only auto-matches Apple Studio Displays by device name. Other combinations require manual aggregate creation in Audio MIDI Setup (Halo still controls volume on them fine).
- Hobby scale — single maintainer, no auto-update, no bug tracker, no guarantee of future macOS compatibility.
If you need a supported commercial alternative, SoundSource by Rogue Amoeba is signed, notarized, and supported.
- rlxone/MultiSoundChanger by Dmitry Medyuho — Apache License 2.0. The upstream project, still the canonical implementation.
- MediaKeyTap by Nicholas Hurden — MIT. Used for global media-key interception.
Apache License 2.0 (inherited from upstream MultiSoundChanger). See LICENCE.
Original copyright © 2017 Dmitry Medyuho. Fork modifications © 2026 flight-william.

