Control your Universal Audio Apollo from anywhere on your network.
Apollo Monitor is a native macOS menu bar app for controlling Universal Audio Apollo monitor output. Works locally or remotely over your network — control volume, mute, dim, and mono from any Mac on your LAN.
No need to keep UA Console open on your screen. Just click the menu bar icon.
| Feature | Description |
|---|---|
| Volume Control | Full range slider (-96 to 0 dB) with precision curve and real-time display |
| Mute / Dim / Mono | One-click toggles with visual feedback |
| Network Control | Connect to any Apollo on your LAN, not just localhost |
| Auto-Discovery | Automatically find UA Console instances via Bonjour |
| Multi-Device | Enumerate and select devices and outputs dynamically from protocol |
| Real-time Sync | Subscribe-based push updates — instant sync with hardware |
| Auto-Reconnect | Exponential backoff reconnection, auto-launches UA Mixer Engine |
| macOS Widget | WidgetKit widget shows volume, mute/dim/mono status at a glance |
| Persistent Config | Remembers last host, device, and output across restarts |
| Native UI | SwiftUI menu bar app, follows Apple HIG |
| Zero Dependencies | Built entirely with Apple frameworks |
- macOS 14.0 (Sonoma) or later
- Universal Audio Apollo (Solo, Twin, x4, x6, x8, x8p, x16)
- UA Console / UA Mixer Engine running on the target Mac
- Download the latest
.dmgfrom Releases - Open the DMG and drag Apollo Monitor to Applications
- First launch: Right-click the app → Open → Open
Note: The app is not notarized. macOS will block it on first launch. Right-click → Open → Open. You only need to do this once.
git clone https://github.com/noiseheroes/ApolloMonitor.git
cd ApolloMonitor
xcodegen generate # requires: brew install xcodegen
open ApolloMonitor.xcodeprojSet your Development Team in Signing & Capabilities, then Build & Run.
- Click the dial icon in your menu bar
- Drag the slider to adjust volume (-96 to 0 dB)
- Click Mute / Dim / Mono to toggle
- The panel closes when you click outside
The app auto-discovers UA Console instances on your network. To connect to a remote Apollo:
- Click the gear icon in the popover footer → Settings
- Go to the Connection tab — remote hosts appear automatically
- Click a host to connect, then choose your device and output
- Done — you're controlling the Apollo remotely
You can also add hosts manually if auto-discovery doesn't find them.
Access settings from the gear icon in the popover footer.
| Tab | Options |
|---|---|
| Connection | Host auto-discovery, device/output pickers, manual host entry |
| Audio | Volume step size for keyboard shortcuts |
| General | Launch at login, version info |
Apollo Monitor includes a macOS widget (small and medium sizes) that shows your current volume level and mute/dim/mono status in real time.
The app communicates with UA Mixer Engine via TCP on port 4710. This is the same internal protocol used by Universal Audio's own software.
Transport: TCP/IP
Port: 4710
Host: Any Mac running UA Mixer Engine (local or remote)
Format: JSON over null-terminated strings
Sync: Subscribe-based push (not polling)
1. Connect TCP to host:4710
2. get /devices → enumerate available devices
3. get /devices/{id} → device name, online status
4. get /devices/{id}/outputs → enumerate outputs
5. subscribe to CRMonitorLevel, Mute, DimOn, MixToMono
6. Real-time push updates from UA Mixer Engine
| Command | Example |
|---|---|
get |
get /devices/0/outputs/4/CRMonitorLevel |
set |
set /devices/0/outputs/4/CRMonitorLevel/value/ -24.0 |
subscribe |
subscribe /devices/0/outputs/4/Mute |
ApolloMonitor/
├── ApolloMonitor/ # Main menu bar app
│ ├── ApolloMonitorApp.swift # App entry point
│ ├── AppDelegate.swift # Menu bar setup & lifecycle
│ ├── MonitorView.swift # Main popover UI (volume, controls, footer)
│ ├── SettingsView.swift # Settings window (Connection/Audio/General)
│ ├── AboutView.swift # About window
│ └── Info.plist
│
├── ApolloMonitorWidget/ # macOS Widget (WidgetKit)
│ └── ApolloMonitorWidget.swift
│
├── Shared/ # Core logic (Models.swift shared with widget)
│ ├── ApolloTCP.swift # TCP client with message buffering
│ ├── ApolloController.swift # State management, enumeration, widget sync
│ ├── Models.swift # UAHost, UADevice, UAOutput, App Group constants
│ └── NetworkDiscovery.swift # Bonjour NWBrowser discovery
│
├── Assets.xcassets/ # App icon
├── scripts/ # Build scripts, icon generator
├── Installer/ # DMG background assets
└── project.yml # XcodeGen configuration
- Make sure UA Console or UA Mixer Engine is running on the target Mac
- For remote: verify the target Mac's IP and that port 4710 is accessible
- Check that both Macs are on the same network/subnet
- The Apollo must be powered on and connected to the host Mac
- Try restarting UA Mixer Engine on the host Mac
- The app uses
subscribefor real-time push updates - If sync stops, click the reconnect button in the footer
- UA Mixer Engine must be running on the remote Mac
- Ensure no firewall is blocking port 4710
- Try pinging the remote Mac to verify network connectivity
- Make sure the main app is running — the widget reads data shared via App Group
- Try removing and re-adding the widget
- Protocol discovery by cuefinger (@franqulator)
- Additional protocol reference from UA-Midi-Control (@raduvarga)
- Created by Noise Heroes
MIT License — see LICENSE for details.
This is an unofficial third-party application. Universal Audio, Apollo, and UA Console are trademarks of Universal Audio, Inc. This project is not affiliated with or endorsed by Universal Audio.