Intro Features Configs Mixers Protocols Connecting Monitor OSC Stream Deck Settings Help
Independent third-party tool — not made by Allen & Heath
for Allen & Heath Mixers
User Manual
Version 0.6.5 · macOS 14+
Developed by Koodisto Digital · koodisto.org
Not affiliated with or endorsed by Allen & Heath / Audiotonix

Table of Contents

1 Introduction 2 Features 3 Dashboard 4 Configurations 5 Templates & QLab Quick Setup 6 Adding Mixers 7 Protocols 8 Connecting & Disconnecting 9 MIDI Monitor 10 Timecode Scene Recall 11 OSC Bridge 12 Stream Deck / Remote API 13 Menu Bar 14 Settings 15 Troubleshooting

1. Introduction

A&H MIDI Bridge is a third-party macOS application that enables simultaneous MIDI control of multiple Allen & Heath digital mixing consoles over a network connection.

The official Allen & Heath MIDI Control driver supports only one mixer at a time. For live sound engineers running dual-console setups — such as a dLive at Front of House and another at Monitors — this limitation makes it impossible to control both mixers from a single DAW or show control system like QLab.

A&H MIDI Bridge solves this by creating independent virtual CoreMIDI ports for each mixer, each with its own TCP/TLS network connection. Your DAW sees them as separate MIDI devices that you can assign independently.

Disclaimer: A&H MIDI Bridge is not developed by, affiliated with, or endorsed by Allen & Heath or the Audiotonix group. It is an independent third-party tool created by Koodisto Digital, a small Finnish company whose founder has extensive professional experience with Allen & Heath consoles in live sound production.

2. Features

Multiple Mixers

Connect to two or more Allen & Heath mixers simultaneously from one Mac.

Four Protocols

MIDI Thru, HUI, Mackie Control, and CC Translator — run multiple per mixer.

Virtual MIDI Ports

Creates CoreMIDI ports visible in QLab, Logic Pro, Reaper, and any MIDI-capable app.

Background Service

Runs silently in the menu bar. Close the window — connections stay alive.

Configurations & Templates

Save per-band or per-production setups, or start from ready-made QLab and DAW templates.

TLS Encryption

Secure connections to dLive and AHM consoles using TLS, just like the official driver.

MIDI Monitor

Built-in real-time MIDI message viewer with A&H protocol decoding. No external tools needed.

OSC Bridge (Bidirectional)

Built-in OSC server with real-time feedback. Works with Companion, TouchOSC, QLab, and custom scripts.

Stream Deck Ready

WebSocket API for Elgato Stream Deck via Bitfocus Companion. Scene recall, mute groups, DCA, HPF, EQ, preamp, channel names, send levels.

Full SysEx Support

Channel names, colours, send levels, preamp parameters — all SysEx messages flow through.

Auto-Connect

Reconnects to the last configuration on launch. Per-bridge connect/disconnect control.

Supported Mixer Types

MixerConnectionPort
dLive MixRackTLS51325
dLive SurfaceTLS51325
AHM-64 / AHM-32TLS51325
SQ-5 / SQ-6 / SQ-7TCP51325
GLD / GLD-80TCP51325
AvantisTLS51325

3. Dashboard

The main window has two tabs: Bridges (configuration and status) and MIDI Monitor (real-time message viewer). The Bridges tab shows three sections:

Header

The top bar shows the Allen & Heath logo, "MIDI BRIDGE" title, and the active configuration name with a connection indicator. A settings gear icon opens the preferences window.

Configuration Cards

All saved configurations appear as cards in a grid. Each card shows the configuration name, a list of mixers with their IP addresses, and a Connect / Disconnect button. A "New Configuration" card with a dashed border allows creating new setups.

Status Section

When a configuration is active, a detailed status section appears below the cards. It shows each mixer with its protocols, connection state (Connecting / Connected / Error / Disconnected), and the virtual MIDI port names that are visible in your DAW.

4. Configurations

A configuration represents a complete mixer setup — for example, "Band X Tour 2026" or "Theatre Production". Each configuration contains one or more mixer entries with their network addresses and protocol settings.

Creating a Configuration

1
Click "New Configuration" on the dashboard, or the + card.
2
Enter a name for the configuration (e.g., "Festival Main Stage").
3
Add one or more mixers using the "Add Mixer" button.
4
Configure protocols and port names for each mixer.
5
Click Save in the toolbar.
Configurations are stored locally in ~/.ah-midi-bridge/configs/ as JSON files. They persist across app restarts.

5. Templates & QLab Quick Setup

A&H MIDI Bridge includes ready-made templates for common setups. Templates appear on the empty state screen and create a pre-configured mixer entry with the right protocols and MIDI port names.

Available Templates

TemplateProtocolsUse Case
QLab Scene Recall MIDI Thru Simple scene recall from QLab using Program Change
QLab Full Control MIDI Thru CC Translator Scene recall + fader automation + mutes from QLab
FOH + Monitor MIDI Thru Dual dLive setup with separate QLab control per mixer
DAW Transport HUI Transport control for Logic Pro / Pro Tools

QLab Scene Recall — Quick Reference

After creating a configuration from the "QLab Scene Recall" template:

1
Edit the configuration — set the mixer's IP address and mixer type.
2
Click Connect — the virtual MIDI port "QLab Scene Recall" appears.
3
In QLab, create a MIDI cue with destination set to "QLab Scene Recall".
4
Set message type to Program Change and the scene number.

Scene Number Mapping

ScenesBank (CC 0)Program Change
1 – 12800 – 127
129 – 25610 – 127
257 – 38420 – 127
385 – 50030 – 115
For scenes above 128, send a Bank Select (CC 0) message before the Program Change. QLab can send both messages in a single MIDI cue.

QLab Fader & Mute Control

Use the "QLab Full Control" template. The CC Translator port accepts:

Mutes (Note On messages)

Fader Levels (NRPN via CC sequence)

Send three CC messages in sequence:

  1. CC 99 (NRPN MSB) = channel number (0-indexed)
  2. CC 98 (NRPN LSB) = 23 (0x17 = Fader Level parameter)
  3. CC 6 (Data Entry) = level (0 = -inf, 107 = 0dB, 127 = +10dB)

Channel Type by MIDI Channel Offset

MIDI ChannelChannel Type
Base (N)Inputs 1 – 128
N + 1Groups
N + 2Aux / FX Sends
N + 3Matrix
N + 4FX Return, Mains, DCA, Mute Groups

6. Adding Mixers

Each mixer entry requires:

FieldDescriptionExample
NameA friendly label for this mixerFOH dLive
TypeThe mixer model (determines TLS and protocols)dLive MixRack
IP AddressThe mixer's network address192.168.1.207
PortTCP port number (default 51325)51325

Manual Entry

In the "Add Mixer" dialog, fill in the name, IP address, and select the mixer type from the dropdown. The port defaults to 51325. Click "Add Mixer" to add it to the configuration.

Network Discovery

Click "Scan" to search for Allen & Heath mixers on the local network. Discovered mixers appear in a list — click one to add it with pre-filled details.

Network discovery requires that your Mac and the mixers are on the same subnet. Ensure your firewall allows UDP broadcast traffic.

7. Protocols

Each mixer can run one or more protocols simultaneously. Each enabled protocol creates a separate virtual MIDI port.

ProtocolDescriptionUse Case
MIDI Thru Raw MIDI passthrough — all messages forwarded as-is QLab scene recall, custom MIDI control
HUI Mackie HUI protocol for DAW control surfaces Pro Tools fader control
Mackie Control Mackie Control Universal protocol Logic Pro, Reaper, Ableton fader control
CC Translator Translates Control Change messages using A&H mapping rules Custom controller mapping

Port Names

Each protocol generates a virtual MIDI port name automatically: [Mixer Name] [Protocol]. For example, a mixer named "FOH" with MIDI Thru creates a port called FOH MIDI Thru.

You can customize port names in the configuration editor. This is useful when you want specific names visible in your DAW — e.g., "Stage Left Sends" instead of "MON MIDI Thru".

Tip: MIDI port names persist even when disconnected. This means your DAW routing stays intact between sessions — you don't need to reassign ports every time you reconnect.

8. Connecting & Disconnecting

Connect

Click the Connect button on a configuration card. A&H MIDI Bridge will:

  1. Create virtual CoreMIDI ports for each enabled protocol
  2. Establish TCP/TLS connections to each mixer
  3. Begin forwarding MIDI data between ports and mixers

The button turns red and changes to Disconnect as soon as connections are initiated. Status indicators show the connection state for each protocol:

IndicatorStateMeaning
ConnectingTCP/TLS handshake in progress
ConnectedActive, passing MIDI data
ErrorConnection failed or dropped
DisconnectedNot connected (ports still visible)

Disconnect

Click Disconnect to close the TCP connections to the mixers. The virtual MIDI ports remain visible in your DAW — only the network connections are closed. This means:

Per-Bridge Control

In multi-mixer setups, each protocol row in the status section has its own play/stop button. This allows you to connect or disconnect a single bridge without affecting others — for example, reconnecting your FOH mixer without interrupting the monitor link.

Auto-Connect on Launch

Enable Auto-connect on launch in Settings to automatically activate the last-used configuration when the app starts. This is ideal for touring rigs where the app should "just work" after a reboot.

Important: MIDI ports are only removed when you switch to a different configuration or quit the application entirely. This mirrors the behavior of the official Allen & Heath driver.

9. MIDI Monitor

The MIDI Monitor tab shows all MIDI messages flowing through the bridge in real time. Every message is decoded using Allen & Heath's MIDI protocol, so you see human-readable labels instead of raw hex.

Monitor Columns

ColumnDescription
TimeTimestamp (HH:MM:SS.ms)
DirectionIN = Mixer → DAW, OUT = DAW → Mixer
BridgeWhich mixer/protocol bridge handled the message
DecodedHuman-readable: "Mute ON ch1 note 5", "Scene Recall 42", "Fader Level"
RawHex bytes of the original MIDI message

Filtering

Decoded Message Types

The monitor recognizes and decodes:

Tip: Use the MIDI Monitor to verify your QLab cues are sending the correct messages before sound check. Send a test cue and check that the decoded output shows the expected scene number or parameter change.

10. Timecode Scene Recall

The Timecode tab lets you trigger scene recalls, key signatures, and other MIDI commands automatically from SMPTE timecode. No need for QLab or other show control software — connect an LTC audio signal or MTC MIDI source and the app fires cues at the right moment.

Timecode Sources

Select a timecode source in the Source selector:

SourceHow it works
LTC AudioReceives a SMPTE LTC audio signal from any audio input device. Frame rate is detected automatically (24, 25, 29.97df, 30 fps). Select the audio device and input channel from the dropdown.
MTC MIDIReceives MIDI Time Code Quarter Frame messages from a CoreMIDI source (DAW, hardware timecode generator). Select the MIDI source from the dropdown.

The selected source and audio device are saved and restored on next launch. If the audio device is disconnected when the app starts, it will reconnect automatically when the device reappears (hot-plug).

Cue Databases

Cues are organized into databases. Each database is a folder containing songs/cues with timecoded triggers. Use databases to separate different shows, artists, venues, or events.

1
Create a database — Click the + folder icon next to the database selector. Enter a name (e.g. "Band X", "Sunday Service", "Conference 2026").
2
Add songs/cues — Click Add Song. Enter a name, set the timecode trigger point, then assign MIDI actions for each mixer.
3
Switch databases — Use the dropdown to switch between databases. The last active database is restored on launch (if enabled in Settings).

Editing Songs & Cues

Each song/cue has one or more trigger points (timecodes). At each trigger point, you choose which mixers receive commands and what those commands are:

FieldDescription
TimecodeHH:MM:SS:FF — type numbers directly into the timecode field, cursor advances automatically
Mixer togglesEnable/disable each mixer for this trigger point. Only enabled mixers receive commands.
Actions per mixerClick + Add next to a mixer to pick an action: Scene Recall (1–500), Key Signature, Fader Level, Mute, DCA, EQ, Preamp, Send Level, or Raw MIDI.
Per-mixer scenes: Each mixer can receive different scene numbers at the same timecode point. For example, FOH gets Scene 42 while MON gets Scene 15.

If a song has multiple sections (e.g. Intro, Verse, Chorus), click Add Another Section to add more trigger points within the same song.

Mixer Targets

The Mixer Targets section shows all mixers from the active configuration. Toggle each mixer on/off to control which ones receive timecode triggers:

Important: Mixer Targets is a global filter. Even if a song has actions assigned to a mixer, those actions are only sent if the mixer is armed in Mixer Targets.

Arming & Running

1
Select source — Choose LTC or MTC and select the device/input.
2
Arm mixers — Toggle on the mixers that should receive triggers.
3
Press ARM (or spacebar) — The timecode display turns red. Cues will fire when the timecode matches a trigger point (±2 frames tolerance).

The Cue History shows every fired trigger with timestamp, song/section name, action, target mixer, and success/failure status.

Peer Network

When multiple machines run A&H MIDI Bridge on the same network, they discover each other automatically via Bonjour. If one machine arms a mixer for timecode, other machines see a lock icon on that mixer and cannot send conflicting scene recalls to it.

Auto-Connect

In Settings > General, enable auto-connect options to restore your full session on launch:

11. OSC Bridge

A&H MIDI Bridge includes a built-in OSC (Open Sound Control) server that translates OSC messages into Allen & Heath MIDI commands. This allows tools like Bitfocus Companion (Stream Deck), TouchOSC, QLab (via OSC cues), and custom scripts to control A&H mixers without MIDI routing.

Enabling OSC

1
Open Settings (Cmd+,)
2
Enable "Enable OSC server"
3
Set the UDP port (default: 8000)

The OSC server starts automatically and accepts UDP messages on the configured port. A green indicator in Settings confirms it's running.

OSC Address Reference

Channel Control

AddressTypeRangeAction
/ch/{n}/faderfloat0.0 – 1.0Set fader level (-inf to +10dB)
/ch/{n}/muteint0 or 1Mute on/off
/ch/{n}/namestringASCII textSet channel name
/ch/{n}/colorint0 – 7Set channel colour
/ch/{n}/hpf/freqfloat20 – 20000HPF frequency in Hz
/ch/{n}/hpf/onint0 or 1HPF on/off

Parametric EQ

AddressTypeRangeAction
/ch/{n}/eq/{band}/typeint0 – 4Bell, LF Shelf, HF Shelf, LPass, HPass
/ch/{n}/eq/{band}/freqfloat20 – 20000Frequency in Hz
/ch/{n}/eq/{band}/gainfloat-15 – +15Gain in dB
/ch/{n}/eq/{band}/widthfloat0.0 – 1.0Q width (mapped to 0–24)

Bands are numbered 0 – 3.

Scene Control

AddressTypeRangeAction
/scene/recallint1 – 500Recall scene by number

Send Levels

AddressTypeRangeAction
/send/{src}/{dst}float0.0 – 1.0Set send level from source to destination aux

DCA Control

AddressTypeRangeAction
/dca/{n}/faderfloat0.0 – 1.0DCA fader level
/dca/{n}/muteint0 or 1DCA mute on/off

DCAs are numbered 1 – 24.

Preamp Control

AddressTypeRangeAction
/preamp/{n}/gainfloat0.0 – 1.0Preamp gain (min to max)
/preamp/{n}/padint0 or 1Pad on/off
/preamp/{n}/48vint0 or 1Phantom power on/off

Socket numbers are 1-indexed (matching the physical socket labels).

Timecode

AddressTypeAction
/tc/armArm timecode engine
/tc/disarmDisarm timecode engine
/tc/positionstring, string, intQuery/broadcast: position (HH:MM:SS:FF), fps, armed (0|1)
/tc/cue/firedstring, string, intBroadcast when cue fires: song name, section name, scene number

Colour Values

ValueColour
0Off (default)
1Red
2Green
3Yellow
4Blue
5Purple
6Light Blue
7White

OSC with Bitfocus Companion

To control your mixer from a Stream Deck via Companion:

  1. In Companion, add a Generic OSC connection
  2. Set the target IP to your Mac's address and port to 8000
  3. Create buttons with OSC actions, e.g. /scene/recall with argument 42
  4. For mute toggles: /ch/1/mute with argument 1 or 0

OSC with QLab

QLab can send OSC cues directly — no MIDI routing required:

  1. In QLab, create a Network cue (OSC type)
  2. Set destination to your Mac's IP address, port 8000
  3. Set the OSC message, e.g. /scene/recall 42

Multi-Mixer OSC Targeting

By default, OSC commands are sent to all connected mixers. To target a specific mixer, prefix the address with /mixer/{name}/:

AddressTarget
/ch/1/mute 1All mixers
/mixer/FOH/ch/1/mute 1Only the mixer named "FOH"
/mixer/MON/scene/recall 42Only the mixer named "MON"

OSC Feedback (Bidirectional)

When the mixer sends MIDI data back (e.g., mute state changes, scene recalls from the console surface), A&H MIDI Bridge translates them to OSC and broadcasts to all connected OSC clients. Feedback addresses:

AddressTypeDescription
/ch/{n}/muteintMute state feedback (0=unmuted, 1=muted)
/dca/{n}/muteintDCA mute state feedback
/scene/currentintCurrently recalled scene number
/preamp/{n}/gainfloatPreamp gain value (0.0–1.0)
Bidirectional OSC feedback enables real-time state synchronization with TouchOSC, Lemur, and Stream Deck (via Companion). Button states on external controllers will update to reflect changes made directly on the console surface.

12. Stream Deck / Remote API

A&H MIDI Bridge includes a built-in WebSocket API server that enables control from Elgato Stream Deck (via Bitfocus Companion), custom scripts, and other external tools.

Enabling the API

1
Open Settings (Cmd+,)
2
Enable "Enable WebSocket API" under Stream Deck / Remote API
3
Note the connection URL: ws://localhost:28785

Stream Deck via Bitfocus Companion

To control your mixer from a Stream Deck:

  1. In Companion, add a Generic WebSocket connection
  2. Set the URL to ws://your-mac-ip:28785
  3. Create buttons that send JSON commands (see API Reference below)
  4. Button states update in real-time via push notifications

API Reference

Send JSON messages to the WebSocket server. Responses and state changes are pushed automatically.

Configuration & Status

RequestDescription
{"action": "status"}Get current bridge states
{"action": "listConfigs"}List all configurations
{"action": "activate", "configId": "..."}Activate a configuration
{"action": "connectAll"}Connect all bridges
{"action": "disconnectAll"}Disconnect all bridges

Scene Control

RequestDescription
{"action": "sceneRecall", "scene": 42}Recall scene 1–500
{"action": "sceneGo"}Scene Go (Surface only)
{"action": "sceneNext"}Next scene
{"action": "scenePrev"}Previous scene

Mute Control

RequestDescription
{"action": "channelMute", "channel": 1, "value": 1}Mute channel (value: 1=mute, 0=unmute)
{"action": "dcaMute", "channel": 1, "value": 1}Mute DCA 1–24
{"action": "muteGroupToggle", "channel": 1, "value": 1}Toggle mute group 1–8

Fader Control

RequestDescription
{"action": "faderLevel", "channel": 1, "value": 0.84}Set fader level (0.0–1.0, where 0.84 ≈ 0dB)
{"action": "dcaFader", "channel": 1, "value": 0.75}Set DCA fader level (DCA 1–24)

HPF & Parametric EQ

RequestDescription
{"action": "hpfFreq", "channel": 1, "value": 120}Set HPF frequency (20–20000 Hz)
{"action": "hpfToggle", "channel": 1, "value": 1}HPF on (1) / off (0)
{"action": "eqParam", "channel": 1, "band": 2, "param": "gain", "value": -3.5}Set PEQ band parameter (bands 0–3, params: type, freq, width, gain)

Preamp Control

RequestDescription
{"action": "preampGain", "channel": 1, "value": 0.5}Preamp gain (channel = socket 1–128)
{"action": "preampPad", "channel": 1, "value": 1}Pad on (1) / off (0)
{"action": "preampPhantom", "channel": 1, "value": 1}48V phantom power on (1) / off (0)

Channel Name & Colour

RequestDescription
{"action": "channelName", "channel": 1, "name": "Vocals"}Set channel name (ASCII)
{"action": "channelColor", "channel": 1, "color": 3}Set channel colour (0–7)

Send Levels

RequestDescription
{"action": "sendLevel", "channel": 1, "destination": 3, "value": 0.6}Send to aux (default bus type)
{"action": "sendLevel", "channel": 1, "destination": 1, "busType": "matrix", "value": 0.8}Send to matrix (busType: aux, matrix, fxSend, fxReturn)

Timecode Control

RequestDescription
{"action": "timecodeStatus"}Returns current TC position, fps, armed state, last fired cue
{"action": "timecodeArm"}Arm timecode engine
{"action": "timecodeDisarm"}Disarm timecode engine
{"action": "timecodeToggleArm"}Toggle arm/disarm
{"action": "timecodeSongList"}List all songs in the active cue database

Targeting a Specific Mixer

Add "mixer": "FOH" to any command to target a specific mixer by name. Without it, the command goes to all mixers.

Push Notifications

The server automatically broadcasts state changes to all connected clients:

MessageDescription
{"type": "stateChange", "bridges": {"FOH - MIDI Thru": "connected"}}Bridge state changed
Tip: Use websocat ws://localhost:28785 from the terminal to test the API interactively. Send {"action":"status"} to verify the connection.

13. Menu Bar

A&H MIDI Bridge runs as a background service in the macOS menu bar. When you close the main window, the app continues running — connections stay active and MIDI data keeps flowing.

Menu Bar Icon

A mixer icon appears in the menu bar. When connected, a number badge shows how many bridges are active.

Quick Actions

Click the menu bar icon to access:

To fully quit the application and remove all MIDI ports, use Quit from the menu bar or press Cmd+Q in the main window.

14. Settings

Open Settings via the gear icon in the header or Cmd+,.

General

Stream Deck / Remote API

OSC Bridge

About

Shows application version, the Allen & Heath logo, and Koodisto Digital branding with a link to koodisto.org.

15. Troubleshooting

Mixer stays in "Connecting" state

MIDI ports not visible in DAW

Connection drops frequently

CodeSign / build errors

OSC messages not reaching the mixer

SysEx messages not working (channel names, colours, sends)

Settings gear doesn't open