How to use DMXhub
From first launch to a fully routed rig: sources, outputs, routes, merge modes, failover, and projects.
Getting started: install and first launch
DMXhub is a free macOS desktop app. There is nothing to buy and no account to create.
Install
- Download DMXhub from dmxhub.io and open the downloaded disk image.
- Drag DMXhub into your Applications folder.
- Launch it from Applications (the first launch may prompt the standard macOS "downloaded app" confirmation; approve it).
Get on the right network first. DMXhub sends and receives real lighting data over your network interface, so before you build anything, put your Mac on the same network and IP range as your consoles and nodes. Art-Net is commonly run on a dedicated 2.x or 10.x lighting network and sACN on a production LAN with multicast. DMXhub just needs you to pick the correct interface per source and output. You'll pick the exact network interface per source and per output inside the app.
What the app does, in one line. It ingests lighting control (Art-Net and sACN) from the network, merges and remaps universes through routes you draw, and sends the merged result back out as Art-Net and/or sACN, a router/patchbay/merger for lighting control networks.
Everything you build lives in the main router editor window, which the rest of this guide walks through.
The start page and projects (New / Open / Save / Recent)
On launch you land on the start page rather than dropping straight into the last show. It shows the DMXhub wordmark and three things:
- New Project: creates a blank routing graph (no sources, no outputs, no routes) so you start clean.
- Open Project…: opens a native file picker for an existing
.dmxhubproject file. - Recent: a list of recently opened projects. Each row shows the file name and its folder; click a row to reopen it instantly with no dialog.
Projects are `.dmxhub` files. A project file holds your entire configuration: every source, every output, every route, merge policies, failover settings, modifiers, and master state. Your config *is* the show, so save it like one.
Inside the editor, project commands live in the `File ▾` menu (top-left of the toolbar):
- New (
⌘N): start a blank project. - Open… (
⌘O): open an existing.dmxhubfile. - Save (
⌘S): write the current project to its file. If it has never been saved, this prompts for a location (acts like Save As). - Save As… (
⌘⇧S): write a copy to a new file and switch to editing that copy. - Close Project: return to the start page.
Unsaved-changes dot. The project name is centered in the toolbar. When you have unsaved edits, an orange dot (•) appears next to the name. The name reads Untitled until you first save.
Undo / redo are always available from the two arrow buttons next to the File menu (↶ / ↷), or via keyboard. They cover graph edits like adding sources, drawing routes, and changing policies.
Adding sources (Art-Net & sACN inputs) and their universes
Sources are your inputs: the consoles, media servers, and nodes whose data you want to ingest. They live in the top half of the left Library pane, under the Sources header.
Add a source
- In the Library, click the + next to Sources.
- Choose Art-Net input or sACN input. A new source appears in the list with a small status dot (green = enabled).
- Click the source to select it; its properties open in the right-hand Inspector.
Configure the source in the Inspector
- label: rename it to something readable (e.g.
Main Console,Backup Desk). - kind: Art-Net or sACN (set when you created it).
- iface: the network interface to listen on. Pick the NIC that faces the lighting network from the dropdown (each entry shows the interface name and its IPv4 address); leave it on (any) only if you're unsure.
- port: the listen port. Defaults are correct for standard rigs: Art-Net 6454, sACN 5568. Change it only if your system is non-standard.
- enabled: turns the whole source on or off.
- universes: how many universes this source currently carries (see below).
Universes within a source. A source carries many universes, each with its own on/off and its own live 512-channel preview. Select the source node on the canvas and click its disclosure arrow (▸) to expand it; each universe shows a toggle dot, a U01/U02… label, and a live DMX bar. Use the + on the source node header to add another universe slot. Click a universe's dot to mute or unmute just that universe.
Discovery. As live Art-Net and sACN traffic arrives on the chosen interface, the source's universes light up in the previews so you can confirm you're actually receiving data before you route anything.
Adding outputs and arming them
Outputs are your destinations: where the merged result is sent. They live in the bottom half of the left Library pane, under the Outputs header.
Add an output
- Click the + next to Outputs.
- Choose Art-Net output or sACN output.
- Select it to open its properties in the Inspector.
Configure the output in the Inspector
- label: name it (e.g.
Stage Left Nodes,Dimmer Room). - iface: the interface to transmit from; choose the NIC facing the rig.
- target: the transport mode, constrained per protocol:
- Art-Net: broadcast or unicast.
- sACN: multicast or unicast.
- ip: only shown for unicast; the destination address (e.g.
192.168.1.50). Broadcast/multicast need no address. - port: defaults to Art-Net 6454 / sACN 5568.
- priority (sACN only): the per-source priority 0-200 this output stamps on every packet it sends (default 100). Receivers and downstream mergers use this to arbitrate between sources.
Arming. New outputs and routes are only as live as you make them. In the Library, each output has a small square checkbox to the left of its name: filled orange = armed, hollow = disarmed. Click it to arm/disarm; you can also toggle armed in the Inspector. The same merged result can be mirrored to several outputs, so you might arm an Art-Net output and an sACN output simultaneously.
Transport. Output sending only happens while the engine is running. Press ▶ Start in the top-right of the toolbar to begin transmitting and ■ Stop to cease. Disarming an output (or stopping) cleanly stops its streams downstream.
Creating routes: mapping input universes to outputs
A route (also called a mapping) connects one or more input universes to one or more output universes, with a merge policy in between. You build routes visually on the center canvas.
Draw a route by dragging
- Make sure you have at least one source and one output, and expand both nodes (
▸) so their universes and connectors are visible. - On a source node, find the universe you want and grab its connector dot on the right edge.
- Drag to an output node and drop on its green "+ map here" connector (the green dot on the output's left edge). This creates a new route from that input universe to that output. A mapping card appears in the middle column wired between them.
Other ways to wire
- Drop a source universe onto an existing output universe to add it as another input to that route (it joins the merge).
- Drop a source universe onto an existing mapping card to add that input to the route.
- Drag from a mapping card's output dot onto another output to mirror the same merged frame to a second destination (e.g. Art-Net *and* sACN).
Set the output universe. Select the mapping card; the Inspector shows the route. Under output, the U field is the universe number sent on the wire, the Art-Net port-address or the sACN universe at the destination. The input universe and the output universe are independent, so this is where you remap (e.g. input U1 → output U101).
Reading the card. A collapsed mapping card summarizes the route: Source·U1 → Output·U101 plus the merge mode abbreviation. A green dot and orange highlight indicate the route is live (passing signal). Expand the card to see the input previews and the merged output preview inline.
Remove a route with remove mapping at the bottom of the route's Inspector panel.
Merge modes and per-input controls
When a route has more than one input, the combine policy (set in the route's Inspector, under routing) decides how they mix. Select the route, then pick from the combine dropdown:
- priority: the highest-priority live input wins per channel; inputs of equal priority merge HTP. Input order is the priority rank (1 = highest). For sACN inputs you can additionally honor the wire-priority byte.
- HTP (Highest-Takes-Precedence): the highest value per channel across all live inputs. Classic intensity merge.
- LTP (Latest-Takes-Precedence): the most recent input to change a channel owns it.
- switch: exactly one source is active at a time. It fails over by order automatically, or you pin one manually; it can crossfade on switch if you set a fade time.
A plain-English description of the selected mode shows directly under the picker.
Per-input controls. Each input in the route is a row with controls:
- Enable dot (orange): click to mute/unmute that input in the merge. A muted input is struck through and contributes nothing.
- Solo (`S`, yellow): isolates the input. When any input on the route is soloed, only soloed inputs are merged. Non-destructive; great for checking "what is this desk actually sending."
- Honor priority (`P`, blue): sACN inputs only, shown in priority mode. When on, the route respects that input's sACN wire-priority byte instead of its list rank.
- Drag to reorder (`⠿` handle): in priority and switch modes, drag inputs to set the rank (1 = highest / primary). The rank number is shown on each row.
- Remove (`✕`): drops the input from the route.
Add an input to a route with + add in the route's inputs section, which lists every source universe not already wired in.
Failover and manual flip
Failover protects a route when an input loses signal. Its controls are in the route's Inspector under routing → advanced.
Failover settings
- failover ttl: how long (in ms) an input may go silent before it's treated as lost and failover engages. Default 2000 ms. Tighten it for faster takeover, loosen it to ride out brief network hiccups.
- on loss: what the route outputs when *every* input is lost:
- hold last look (default): freeze the last merged frame on the output. Safest for most shows.
- snap to zero: drop the output to 0 immediately.
- fade to black: fade the output down to 0 over the fade time.
- auto return: when an earlier (higher-ranked) input recovers, switch back to it automatically instead of staying on the fallback.
- fade on switch: the crossfade time (ms) used when the active input changes.
0= a hard cut; a non-zero value makes switches a make-before-break dissolve.
Failover order follows the input list: rank 1 is the primary, and the first available input down the list takes over. Reorder the inputs (drag the ⠿ handle) to set that order.
Manual flip (switch mode). In switch mode each input row gets a radio button:
- Click an input's radio to pin it active. DMXhub holds that source regardless of order, useful for a deliberate A/B flip from the booth.
- Pick the top auto row to unpin and return to automatic, order-based failover.
When a route fails over or you flip it, the route shows its live state on the canvas (the active wire and card highlight), so you can see at a glance which source is currently feeding each universe.
Modifiers (invert / clamp / range) and master / blackout
Per-route modifiers are post-merge processing applied to a route's output, in the Inspector under output → advanced:
- level: the route's overall output level (master), 0-255, on the slider above the advanced section. Scales the whole merged frame for this route.
- invert: inverts every passed channel (output = 255 − value).
- max (clamp): clamps every channel to at most this value (255 = no clamp). Use it as a hard ceiling, e.g. to cap intensity.
- channel range: passes only channels within this 1-based range (e.g. 1-24); channels outside the range output 0. Use it to mask a route down to just the addresses you care about.
Modifiers run after the merge, so they apply to the combined result regardless of how many inputs fed it.
Master and blackout are global, in the top toolbar:
- Grand master: scales every output universe from one control. Leave it at full for normal operation; pull it down for an overall dim.
- Blackout: the red Blackout button forces all output to zero immediately (it can fade if a master fade time is set). Click it again to release. This is your panic control; it overrides the merge and sits on top of everything.
Per-input scale, per-route level, modifiers, grand master, and blackout stack in a predictable order: input scale → merge → route level/modifiers → grand master → blackout.
Live previews and stats
DMXhub gives you live 512-channel DMX previews and throughput stats so you can confirm signal at every stage, end to end, at 44 Hz.
DMX bars. Every preview is a 512-channel bar: one column per channel, grayscale from black = 0 to white = 255. They update continuously while the engine runs (▶ Start). You see them in three places:
- Per source universe: expand a source node to see a live bar per universe. This confirms you're actually receiving from that console/node.
- Per route (merged): expand a mapping card to see each input's bar *and* the merged output bar after merge and modifiers. This is the "what is this route actually sending" view.
- Per output universe: expand an output node to see the bar driving each output universe.
Watching the input bars and the merged bar side by side is the fastest way to verify a merge policy, a clamp, or a channel-range mask is doing what you intended.
Status bar (bottom of the window). A live readout of engine health:
- LIVE / IDLE: whether the engine is running.
- signal / no signal: whether input data is currently arriving.
- present count: how many universes are currently present (e.g.
12/32 present). - in pps: input packets per second.
- ART pps / sACN pps: output packets per second per protocol, shown when that output is armed.
- Errors: any engine error is shown in red here.
Live highlighting. On the canvas, live routes and their wires highlight orange, and source/route indicators turn green when passing signal, so the editor doubles as a real-time status board.
Keyboard shortcuts
DMXhub's shortcuts cover project I/O and editing. On macOS the modifier is ⌘ (Command).
Projects
- New project:
⌘N - Open project…:
⌘O - Save:
⌘S - Save As…:
⌘⇧S
Editing
- Undo:
⌘Z - Redo:
⌘⇧Z(or⌘Y)
Dialogs
- Close / dismiss a dialog:
Esc
Notes: shortcuts respect text fields. While you're typing in a name or number field, ⌘Z performs normal text undo rather than a graph undo, so editing labels never blows away your routing history. Undo/redo apply to graph edits (adding sources/outputs/routes, changing policies, reordering inputs, modifiers, etc.). The arming checkboxes, ▶ Start / ■ Stop transport, and the Blackout button are one-click controls in the toolbar and Library rather than keyed shortcuts.