Loading...
dLive MIDI Bridge · Talk Light Trigger · Pilot Tone Trigger · Time Code Tool · Console Control
One module, five macOS apps, one connection per app: dLive MIDI Bridge, Talk Light Trigger, Pilot Tone Trigger, Time Code Tool and Console Control. Pick the app in the connection's settings. Through MIDI Bridge you control an Allen & Heath dLive and see what it is doing: mutes, fader levels, names, colours and the current scene come back from the desk and drive feedbacks, variables and self-labelling presets. The other four apps expose their own controls (run/stop, thresholds, modes, the timecode readout) with live state on the keys.
The MIDI Bridge connection controls an Allen & Heath dLive through the dLive MIDI Bridge application. The bridge owns the connection to the console; this module attaches to it as a named lane, alongside anything else you have connected — a DAW, Console Control, other apps — all sharing one console connection and one MIDI monitor that attributes every message to the app that sent it.
It does not connect to a console directly. You need the MIDI Bridge app (v1.1 or later) running and connected to your desk. Console address, base MIDI channel and reconnect behaviour are configured in the bridge, and this module inherits them.
127.0.0.1 when
Companion runs on the same machine as the bridge — which today is the
only way, as the bridge listens on its own Mac. Leave the token empty;
it is for the LAN access the bridge will grow later.With MIDI Bridge 1.1.9 or later, this connection also controls the bridge
app itself: Run (start or stop the bridge), Restart bridge and
Auto-reconnect. Its state shows as $(dlive:bridge_state) (stopped ·
not connected · connecting · connected · error), $(dlive:bridge_running),
$(dlive:bridge_msg_rate) and a few more, with presets under MIDI
Bridge. These go to the bridge's menu-bar side on port 8770, so they
still work while the bridge itself is stopped. The connection status then
reads "MIDI Bridge is stopped" instead of "nothing answering".
Turn on Allow Companion control in the bridge's popover. Stopping and restarting are refused while its Lock show-critical controls switch is on. An older bridge simply doesn't offer these, and console control works as before.
The same module also controls Talk Light Trigger, Pilot Tone Trigger, Time Code Tool and Console Control. Add one connection per app and choose it under App; each app must be running on this Mac with Allow Companion control switched on in its popover.
Everything for those connections is built from what the app reports about itself: each of its buttons and switches becomes an action, each on/off or choice becomes a feedback, and every value it shows becomes a variable, with ready-made presets. A feature added to an app in an update appears here without a new version of this module.
Name the connection after the app — ptt, tlt, tct — because the
label is the variable prefix: $(ptt:state), $(tct:timecode).
Port 0 uses the app's standard port (Talk Light 8771, Pilot Tone 8772, Time Code Tool 8773, Console Control 8774).
Show-critical controls — stopping an app, changing Pilot Tone's failback mode — are refused while the app's Lock show-critical controls switch is on. The action says so in its description.
When an app says no, its own reason goes to the Companion log word for word — "Signal is still below threshold — stay on backup".
When an app isn't running, its buttons stay put: the connection remembers the app's controls from last time. A press then says in the log that the app isn't answering.
The presets read at a glance. Each key has a short label sized to fit whole, like PLAY, TO START or CUE UNITY. It sits on its menu's colour, with a red bar across the top when the control is show-critical. A key lights:
Console Control's REC turns red while it records. A control an app adds later gets a short label made from its name.
Styled keys. Each app also has a styled keys preset section, in the app's own look:
Console Control's presets follow its menus: a section per category (Transport, Console, Cue, Navigate, Track, Edit, Markers, …), one key per keyboard shortcut. In Show Mode, edits are refused with the app's own "Locked in Show Mode."
Time Code Tool also has a four-key timecode readout preset
(hours, minutes, seconds, frames). The digits are zero-padded, green
while locked or generating, amber in freewheel, and -- without a
signal.
The connection's status says which of these it is: the app isn't running; Companion control is switched off in the app (state still shows, presses are refused); or the app and this module speak different versions of the control API, in which case update whichever is older.
While Talk Light reports talk, your Stream Decks can jump to a TALK
page whose keys blink, so a talkback call can't be missed. The page and
the two triggers that drive it ship as one file,
talk-flash.companionconfig.
Importing it
What it does
Returning to the right page (recommended). "Back" relies on Companion's page history, which doesn't always hold the page a deck came from. Seen on a real Stream Deck: talk taken over from page 7 came back to page 5. For each deck, the module can remember the page for you:
internal:surface_<id>_page, with the action Talk flash: remember a
deck's page. Choose Deck 1, and set the page field to that same
variable in expression mode. It keeps the deck's last page that
isn't the TALK page, as $(tlt:talk_return_1).$(tlt:talk_return_1) (expression) instead of back.Decks 2–4 work the same way with talk_return_2 … _4.
More than one deck. The triggers act on surface index 0, the first deck in Companion's Surfaces list. For each other deck, duplicate both triggers and change the surface index. EXIT's "already went back" is shared, not per deck: after EXIT on one deck, the others stay on the TALK page when talk ends — press EXIT on each, or step them back by hand.
The pieces are ordinary module parts you can reuse on any page: the
Talk flash feedback, the Talk flash: exit action, the TALK key
preset, and the variables $(tlt:talk_active), $(tlt:talk_flash_armed),
$(tlt:talk_flash_exited), $(tlt:talk_flash_took_over) and
$(tlt:talk_page).
| Setting | Notes |
|---|---|
| App | Which dylanmaudio app this connection controls. MIDI Bridge is the dLive console, and everything below; the others are covered above |
| Talk flash rate / cooldown / TALK page number | Talk Light only — see Talk flash above |
| MIDI Bridge address / port / token | Where the bridge is: 127.0.0.1 : 8765, beside Companion. The bridge listens on its own Mac, so the token stays empty until it grows LAN access |
| Bridge app control port | 0 = the standard 8770, on the same address. For Run, Restart and Auto-reconnect (MIDI Bridge 1.1.9+) |
| Console firmware | Not detectable over MIDI; shown in $(dlive:firmware) |
| Inputs in use / extended types | Bounds the variable grid and the preset library |
| Ask the console for | What the bridge fetches for every strip on connect, and on Resync. The desk announces only what changes, so without this a connection made mid-show shows nothing until someone moves something |
| Scene Go / Next / Previous | The CC number + value you assigned on the console. 0/0 = not assigned |
| Console Actions map | cc,value,Name per line. Optional when a firmware 2.1x show file is loaded — Actions import automatically; manual lines win on the same CC/value |
| Show file | Loaded on the connection's own show file page, not here — see below |
| Show file path (advanced) | Only useful when the file sits somewhere this sandboxed module can read. An uploaded show wins over it |
| Scene names (manual) | scene,Name per line; overrides the show file |
| Show send levels in dB | On by default. The send law was measured on hardware and matches the fader law exactly; turn off for raw 0–127 |
| Preamp gain range | Sources disagree; pick what matches your screen |
Green means the bridge is reachable and reports its console link is up — not merely that the bridge answered. If the bridge is running but the desk is not connected you get:
MIDI Bridge is running but its console link is down — check the bridge app
and if the bridge itself is not reachable, the status stays amber with the address it is waiting on. Fix console-side problems (MIDI mode Off or Secure, Global MIDI Receive disabled, wrong address) in the bridge, not here.
Scene names exist only in the show file — there is no way to ask the console for them over MIDI — and firmware ~2.1x shows also carry the named Actions table. Both are loaded from the connection's own page:
http://<your-companion>:8000/instance/<connection label>/
The link is on the connection settings page, next to Show file. Choose a
dLive show — the .tar.gz the console writes to USB, or a Director export —
and the page reports how many scene names and Actions came out of it.
The file is read in the browser and only the scene names and the Actions table are kept, in this connection's settings. The show itself is not stored, and nothing leaves the computer. It survives restarts, so the show file does not have to stay on the Companion machine — which matters, since Companion runs modules sandboxed to their own folder and usually cannot read a path you type in.
Anything typed into Scene names (manual) or Console Actions map still wins over the loaded show, so a wrong or out-of-date entry can be corrected without re-exporting anything.
$(dlive:unsupported_gets) so the limitation is visible.Mute · Fader (dB, ±dB, raw, all with optional timed fade) · Send level · Main / DCA / mute-group / mix assign · Preamp gain / pad / 48 V · PEQ band · HPF · Set name / colour · Scene recall · Console Action (named, from the map) · UFX key / scale · Refresh strip · Resync · Reload show file.
Scene Go / Next / Previous, Cue-list recall and Surface CC refuse. They belong on the console's second socket, the Surface (51328), and the MIDI Bridge has one console connection: the MixRack's. There the same bytes mean something else — on the Virtual dLive, "cue list: recall ID 11" recalled scene 12 — so the module says so in the log and sends nothing. Use Scene recall, which is a MixRack message and works.
Channel numbers accept expressions, so $(custom:channel) in the Number
field works for "selected channel" layouts.
Fades are dB-linear and only send when the value changes (a 3 s fade is ~60 messages, not 600).
Mute · Fader level (value, text, above-threshold) · Channel colour (button takes the desk colour) · Channel name · Main / DCA / mute-group / mix assigned · Send level · HPF on · Preamp pad / 48 V / gain · Current scene is… · Scene name · Console is answering.
Per strip: name_ch12, colour_ch12, mute_ch12, fader_ch12 (dB
text), fader_lv_ch12 (0–127). Type prefixes: ch inputs, grp/stgrp
groups, aux/staux, mtx/stmtx, fxsnd/stfxsnd/fxrtn, main,
dca, mgrp, ufxsnd/ufxrtn.
Global: scene_current, scene_current_name, scene_name_<n>,
connected, firmware, base_channel, plus diagnostics
gets_in_flight, gets_missed, unsupported_gets.
Template groups per channel type — mute buttons that take the strip's name and colour, and turn a deep red marked MUTED when muted (the word matters: a channel coloured red on the desk is red either way); level buttons showing the dB value with ±1 dB nudges; scene recall buttons that show the scene's name from the show and light when current; the current scene; named Console Actions; a status button.
$(dlive:unsupported_gets) — it never marks the connection failed for it.