Releases: fiverecords/DMXRouter
DMXRouter 1.7.6
Engine Groups
Process engines can now be organized into collapsible groups for managing large configurations.
- Create groups — right-click any engine(s) → Move to Group → New Group, or select an existing group name
- Multi-select support — select multiple engines (Ctrl/Shift+click) and move them to a group in one action
- Collapsible headers — double-click the group header to expand/collapse; state is preserved across refreshes
- Group color coding — right-click a group header → Group Color to assign a color from 9 presets (Red, Orange, Yellow, Green, Cyan, Blue, Purple, Pink, White). A vertical color bar appears on the group header and all its member engines for quick visual identification
- Reorder engines — right-click an engine → Move Up / Move Down to reorder within its group
- Reorder groups — right-click a group header → Move Group Up / Move Group Down to change the visual display order. Group order is independent of alphabetical sorting
- Group management — Rename Group, Remove Group (engines are kept, just ungrouped)
- Tristate group checkbox — enable/disable all engines in a group with one click. Partial state shown with a diagonal split indicator when some engines are on and others off
- Bulk operations — selecting a group header includes all its engines for Remove, Reroute, Rename, Uni+/Uni−
- Inheritance — new engines (Add, Templates, Clone) automatically join the group of the currently selected context
- Visual hierarchy — groups appear above ungrouped engines (like folders before files), with a subtle separator line after the last engine in each group
- Full-row hover — mouse hover highlights the entire row across all columns, including group headers (with lightened group background)
- Profile persistence — group assignments, display order, collapsed state, and color assignments are all saved and restored with profiles
- Web API —
groupfield exposed on GET/POST/PUT/api/engines
How it works
The engine list uses a redesigned table with group header rows. Engines without a group appear as standalone items below the groups. Grouped engines appear indented under their collapsible group header, which shows the group name, member count, and an expand/collapse arrow.
Groups are purely organizational — they don't affect routing, merge processing, or output priority. Engine numbering follows the global config order, which can be changed with Move Up/Down.
Engine Reordering
- MergeEngine::moveConfig(from, to) — new method to reorder process engines. Atomically moves a config in the internal vector and re-indexes all state maps (backup, crossfade, switch, master/limit, data loss, failsafe scenes, rate limiter)
- Move Up / Move Down — available in the engine context menu, respects group boundaries (engines can only move within their own group or among ungrouped engines)
- Disabled at boundaries — Move Up is grayed out for the first engine in a group, Move Down for the last
Fixture Database — Scan Mode & Import
New tools for rental companies and large installations that need to link physical fixture serial numbers and asset IDs to RDM devices.
Scan Mode (barcode workflow)
Walk through every fixture in the database that doesn't have a serial number yet. The selected fixture blinks (RDM Identify On), the cursor jumps to the Serial field, and a USB barcode scanner can type the number and press Enter — DMXRouter saves the serial, turns Identify Off, and auto-advances to the next fixture. Click Stop Scan at any time.
Import DB (CSV / Excel)
Import serial numbers and rental/asset IDs from external inventory software (Rentman, custom spreadsheets). Supports CSV files with automatic separator detection (comma, semicolon, tab) and Excel .xlsx files. A column mapping dialog lets you choose which columns in your file correspond to Serial Number and Rental ID, with a preview of the first rows. After import, a report shows how many fixtures were matched and lists unmatched serial numbers.
Manual fixture entries
Right-click the fixture table → Add Entry to create a fixture record that isn't tied to an RDM device. Useful for non-RDM equipment or pre-populating the database before a show. Manual entries use a synthetic UID (0000:xxxxxxxx) and allow editing the Manufacturer and Model columns directly in the table.
VLAN — Cross-Platform Profile Fix
Loading a VLAN profile saved on Windows onto a Mac or Linux machine no longer loses the VLAN 1 (Management) IP address. The physical adapter name is now preserved when the profile originates from a different platform.
Platform Availability
Windows
Download and run DMXRouter-Setup.exe. All dependencies included. UAC will prompt for administrator privileges automatically if your account has them — this enables VLAN management without needing to right-click "Run as administrator".
VLAN management requires Windows Pro/Enterprise with Hyper-V enabled.
Linux
Download the binary for your architecture:
DMXRouter-v1.7.6-linux-x86_64.zip— standard PCs and serversDMXRouter-v1.7.6-linux-arm64.zip— Raspberry Pi 4/5, Orange Pi, ARM64 boards
Qt6 runtime required:
# Ubuntu / Debian / Raspberry Pi OS
sudo apt install libqt6core6 libqt6gui6 libqt6widgets6 libqt6network6 libqt6websockets6 libqt6openglwidgets6
# Fedora
sudo dnf install qt6-qtbase qt6-qtwebsockets
# Arch
sudo pacman -S qt6-base qt6-websockets
Then: chmod +x DMXRouter && ./DMXRouter
VLAN management requires NetworkManager (sudo apt install network-manager if not present). No need to run as root — the app prompts for your password when needed. VLANs persist across reboots.
macOS
Download the .app bundle (Qt6 frameworks bundled). Requires macOS 13.0 (Ventura) or later.
First launch: macOS quarantines apps downloaded from the internet. Double-click install.command (shipped alongside the app) to remove the quarantine and sign it locally — you only need to do this once. Alternatively, run manually in Terminal:
xattr -cr DMXRouter.app
codesign --force --deep --sign - DMXRouter.appImportant: Disable the macOS Application Layer Firewall for reliable real-time DMX operation (System Settings → Network → Firewall → OFF). If you need firewall protection, use PF (pfctl) instead — see the v1.5.6 release notes for details and example rules.
No need to run with sudo — the app prompts for your password when needed. VLANs appear in System Settings → Network and persist across reboots.
DMXRouter 1.7.5
macOS VLAN Profile Restore — Complete Overhaul
VLAN restoration from saved profiles now works reliably on macOS, matching the Windows experience:
- Sequential confirmed restore — VLAN creation and IP assignment are performed in three verified steps: create all VLANs (one password prompt), scan the OS to confirm they are registered, then assign IPs using the confirmed macOS service names (second password prompt). No sleeps or timeouts — each step waits for the previous one to complete
- Correct macOS output parsing — the
networksetup -listVLANsparser now handles the actual macOS format (Device ("Hardware" Port): vlanX, fields in Name → Device → Tag order). Previous versions assumed a different field order and Device line format, causing all VLAN operations to fail silently - Service name resolution — macOS registers VLAN network services as
<name> Configuration(e.g.DMXRouter_VLAN200 Configuration). IP assignment now resolves the correct service name vialistallnetworkservicesbefore callingnetworksetup -setmanual - Scan with retry — after VLAN creation,
configdmay take several seconds to register all VLANs. The confirmation scan retries up to 8 times (2 seconds apart) before proceeding to IP assignment - Existing VLANs detected correctly — switching between profiles on the same machine is instant when the VLANs are already present. Only IPs that differ from the current OS configuration are updated
- Cross-platform profile loading — profiles saved on Windows can be loaded on macOS and vice versa. Interface activation matches by IP address when the platform-specific interface ID doesn't match (e.g. Windows
ethernet_32783:20.254.29.247→ macOSvlan0:20.254.29.247) - VLAN removal fixed — deleting a VLAN now resolves the correct BSD device and parent interface for the
networksetup -deleteVLANcommand
RDM PID Browser
- Hex dump preserved — the GET response hex dump in the PID Browser is no longer overwritten when the device tree refreshes due to periodic discovery. Previously, the discovery cycle would rebuild the supported PIDs list and the selection restoration would replace the hex dump with PARAMETER_DESCRIPTION metadata
RDM Emulator
- UID editor reacts immediately — toggling a profile's emulation on/off now enables or disables the UID field instantly, without needing to switch to another device and back
- Disabled UID styling — the UID field now shows grayed-out text when the profile is active, making it visually clear that it cannot be edited while emulating
- Accurate emulation of captured devices — the emulator now faithfully reproduces the exact capabilities of the captured device. PIDs that the real device didn't support (e.g. LAMP_STATE on fixtures without lamp control) are no longer advertised or responded to — controllers receive a proper NACK (NR_UNKNOWN_PID) just as the real device would. Dimmer curve count, response time count, and modulation frequency count are captured from the real device instead of using hardcoded defaults
- Deep capture includes descriptions — CURVE_DESCRIPTION, OUTPUT_RESPONSE_TIME_DESCRIPTION, and MODULATION_FREQUENCY_DESCRIPTION are now fetched with proper index parameters during deep capture. Previously these required a parameter byte that the PDL=0 sweep couldn't provide, so they were always missing from the captured profile
- Fixture ID (DEVICE_UNIT_NUMBER) works on emulated devices — the SET handler now correctly parses both 2-byte (E1.37-5 standard) and 4-byte (compatibility) formats. Previously, setting the Fixture ID on an emulated device always stored 0
- SET CURVE/RESPONSE_TIME/MODULATION_FREQUENCY fixed — the emulator was reading 2 bytes (uint16) for these SET commands, but E1.37-1 specifies 1 byte (uint8 index). This caused FORMAT_ERROR when controllers sent the correct 1-byte SET
Re-capture required: Emulator profiles captured with previous versions have incorrect default values (e.g. 4 curves instead of the real count, lamp state "On" for devices without lamp control). Delete old profiles and re-capture from the real device to get accurate emulation.
RDM Dimmer Descriptions (E1.37-1)
DMXRouter now fetches the text descriptions for dimmer settings instead of showing raw index numbers:
- CURVE_DESCRIPTION (0x0344) — after reading the current curve and count, DMXRouter requests the description for each available curve. The device inspector shows names like "Linear", "Square Law" next to the index
- OUTPUT_RESPONSE_TIME_DESCRIPTION (0x0346) — same treatment for response time settings
- MODULATION_FREQUENCY_DESCRIPTION (0x0348) — same for PWM frequency settings
- Descriptions are displayed in the Info tab dimmer config line, and in the RDM template editor tooltips with the full list of available settings
RDM Device Configuration Dialog
New Configure button in the device inspector action bar opens a dialog to view and modify all RDM-configurable parameters of the selected device:
- Dimmer curve, response time, modulation frequency — dropdown menus populated with the device's actual descriptions (e.g. "1 — Linear", "2 — Square Law") instead of raw numbers
- Minimum / Maximum level — spin boxes with current values pre-filled
- Lamp state and lamp on mode — dropdown with named options
- Display invert and brightness — dropdown + spin box
- Pan/Tilt invert and swap — on/off dropdowns
- Power state — Full Off / Shutdown / Standby / Normal
Controls for unsupported parameters are automatically disabled and grayed out. Only changed values are sent to the device. If advanced info hasn't been fetched yet, the dialog fetches it automatically and shows "Loading…" while waiting for the RDM pacer to complete.
RDM Templates — Full Device Capture
"Save Template" now captures the complete device state including dimmer curve, response time, modulation frequency (with all available descriptions), lamp state/mode, display settings, pan/tilt inversions, power state, min/max level, and DMX fail/startup mode. All description names for enumerated settings are cached in the template JSON, so the Template Settings editor can show "1 — Linear", "2 — Square Law" even without a device connected.
"Save as Template" is also available from the device tree context menu (right-click). If advanced device info hasn't been fetched yet, it is fetched automatically before saving.
RDM Template Settings Editor
The template settings editor has been significantly improved:
- Dimmer curves, response time, modulation frequency — now use dropdown menus with cached descriptions instead of raw spinboxes. All available options from the device are shown, not just the current value
- Unsupported parameters — controls are disabled and grayed out when a matching device is connected and doesn't support the parameter
- Descriptive labels — lamp on mode uses "Off (Manual Strike)", "DMX Signal", etc. instead of "Off (0)", "DMX (1)"
RDM Device Inspector — New Parameters
The device inspector now reads and displays several E1.20 parameters that were previously only available via the PID Browser:
- LAMP_STATE (0x0403) — Off / On / Strike / Standby
- LAMP_ON_MODE (0x0404) — Off / DMX / On / After Calibration
- DISPLAY_INVERT (0x0500) — Off / On / Auto, with display brightness level
- PAN_INVERT / TILT_INVERT / PAN_TILT_SWAP (0x0600–0x0602) — shown as flags when active
- POWER_STATE (0x1010) — Full Off / Shutdown / Standby / Normal
All values appear in the Dimmer Config line of the Info tab with human-readable names. Devices that don't support a parameter simply NACK and it's omitted from the display.
Platform Availability
Windows
Download and run DMXRouter-Setup.exe. All dependencies included. UAC will prompt for administrator privileges automatically if your account has them — this enables VLAN management without needing to right-click "Run as administrator".
VLAN management requires Windows Pro/Enterprise with Hyper-V enabled.
Linux
Download the binary for your architecture:
DMXRouter-v1.7.5-linux-x86_64.zip— standard PCs and serversDMXRouter-v1.7.5-linux-arm64.zip— Raspberry Pi 4/5, Orange Pi, ARM64 boards
Qt6 runtime required:
# Ubuntu / Debian / Raspberry Pi OS
sudo apt install libqt6core6 libqt6gui6 libqt6widgets6 libqt6network6 libqt6websockets6 libqt6openglwidgets6
# Fedora
sudo dnf install qt6-qtbase qt6-qtwebsockets
# Arch
sudo pacman -S qt6-base qt6-websockets
Then: chmod +x DMXRouter && ./DMXRouter
VLAN management requires NetworkManager (sudo apt install network-manager if not present). No need to run as root — the app prompts for your password when needed. VLANs persist across reboots.
macOS
Download the .app bundle (Qt6 frameworks bundled). Requires macOS 13.0 (Ventura) or later.
First launch: macOS quarantines apps downloaded from the internet. Double-click install.command (shipped alongside the app) to remove the quarantine and sign it locally — you only need to do this once. Alternatively, run manually in Terminal:
xattr -cr DMXRouter.app
codesign --force --deep --sign - DMXRouter.appImportant: Disable the macOS Application Layer Firewall for reliable real-time DMX operation (System Settings → Network → Firewall → OFF). If you need firewall protection, use PF (pfctl) instead — see the v1.5.6 release notes for details and example rules.
No need to run with sudo — the app prompts for your password when needed. VLANs appear in System Settings → Network and persist across reboots.
DMXRouter V1.7.4
RDM Preset Scenes (E1.37-1)
New Presets tab in the RDM device inspector for fixtures with internal scene storage:
- Preset capabilities — reads PRESET_INFO to show maximum scenes, fade/wait time ranges, and supported features (level field, sequence, split times)
- Scene table — displays all preset scenes with Scene#, Fade Up, Fade Down, Wait, and State columns. Scenes fetched via sequential paced PRESET_STATUS queries to respect RDM half-duplex timing
- Inline editing — "Programmed" scenes have editable time spinboxes; confirming a value sends SET PRESET_STATUS immediately. "Read-only" and "Not programmed" scenes display as plain text
- Playback controls — scene selector spin, Go button (SET PRESET_PLAYBACK), Off button, and merge mode combo (Default / HTP / LTP / DMX Only) all in the tab
- Capture to Scene — saves the current DMX look into the selected scene slot (CAPTURE_PRESET). Re-reads the scene status automatically after capture
- Clear Scene — erases a preset scene (SET PRESET_STATUS with clear flag). Respects read-only scenes
- Fetch button — always available when a device is selected. Requests PRESET_INFO first if not loaded, then auto-fetches all scenes
RDM Emulator — Deep Capture
"Capture for Emulation" now performs a deep capture: before creating the profile, DMXRouter fetches advanced info and then sends a sequential GET for every PID the device supports. The raw response bytes are stored in the profile and replayed verbatim when the emulated device is queried — including manufacturer-specific PIDs, product details, boot software info, and anything else the real fixture reported. The result is a perfect RDM replica that fools any controller into thinking it's talking to the real hardware.
- Raw PID cache — every successful GET response is automatically cached in memory. Deep capture copies the entire cache into the profile
- Emulator fallback — when a controller GETs a PID that the emulator doesn't have an explicit handler for, it checks the captured responses and returns the exact bytes. Only PIDs with no cached data return NACK
- Persisted in JSON — captured PID responses are serialized as hex keys → base64 values, surviving profile export/import and template conversion
- Template support — "Save as Template" (new button + right-click menu) carries all captured PIDs into the Template Library. Instances created from templates inherit the full data
- Progress feedback — deep capture shows a completion message with the number of PIDs captured (typically 30–80+ depending on the device)
RDM Emulator — Other Improvements
- Preset support — "Enable Preset Scenes" checkbox in the Create / Edit dialog with configurable max scene count. Emulated devices respond to all 5 preset PIDs (PRESET_INFO, PRESET_STATUS, PRESET_PLAYBACK, PRESET_MERGEMODE, CAPTURE_PRESET) with realistic demo data
- Local loopback fix — emulated devices now appear in DMXRouter's own RDM tree and respond to queries without network round-trip. Previously, the self-send filter blocked loopback packets, making emulated devices invisible to the local controller
- Removed per-interface emulator RX sockets — the dedicated sockets that bound to specific IPs on port 6454 were stealing ALL Art-Net unicast traffic on Windows (not just ArtRdm), causing real devices to disappear from discovery when any emulator profile was active. All emulator traffic now routes through the main receiver and the local handler callback
- Captured profiles unchanged — profiles captured from real fixtures don't gain preset support unless explicitly enabled. The emulator only advertises preset PIDs when presetMaxScenes > 0
VLAN Profile Restore
When loading a profile or config with "Preserve current IP / VLAN settings" unchecked, DMXRouter now properly restores the full VLAN configuration:
- Scan-first approach — existing OS adapters are detected and imported without being destroyed or recreated. A quick profile switch on the same machine is instant
- Create only what's missing — if the profile has VLANs that don't exist on the OS, DMXRouter creates the vSwitch infrastructure (Windows) and the missing VLAN adapters automatically
- IP address persistence — VLAN IP addresses and subnet masks are saved in profiles and configs. IPs are read from the OS at save time. When restoring, existing VLANs only get their IP reassigned if it differs from the current OS IP
- Adapter selection — if there are multiple physical network adapters, DMXRouter asks which one to use for VLAN creation. With a single adapter it's selected automatically
- Preserve IP checkbox on Load Config — File → Load Config now shows the same "Preserve current IP / VLAN settings" checkbox as the Profile Manager
Interface State Persistence
Enabled network interfaces are now saved and restored in all config paths: File → Save/Load Config, Profile Manager save/recall, startup profile auto-load, session file, and web API profile save.
When VLANs are created asynchronously during profile restore, an event-driven deferred enable waits for each VLAN operation to complete before enabling the corresponding interface — no hardcoded delays, adapts to any system speed.
Reduced Transport Rebuild Noise
- Suppress flag during VLAN reconcile — network change notifications from the OS no longer trigger intermediate transport rebuilds while VLANs are being created and IPs assigned. A single clean rebuild occurs at the end when all interfaces have their final addresses
- Windows IP assignment cleanup — New-NetIPAddress output is suppressed (it wrote the IP object to stderr causing false "Failed to assign IP" warnings). A post-assignment verification check ensures the IP was actually applied
Platform Availability
Windows
Download and run DMXRouter-Setup.exe. All dependencies included. UAC will prompt for administrator privileges automatically if your account has them — this enables VLAN management without needing to right-click "Run as administrator".
VLAN management requires Windows Pro/Enterprise with Hyper-V enabled.
Linux
Download the binary for your architecture:
DMXRouter-v1.7.4-linux-x86_64.zip— standard PCs and serversDMXRouter-v1.7.4-linux-arm64.zip— Raspberry Pi 4/5, Orange Pi, ARM64 boards
Qt6 runtime required:
# Ubuntu / Debian / Raspberry Pi OS
sudo apt install libqt6core6 libqt6gui6 libqt6widgets6 libqt6network6 libqt6websockets6 libqt6openglwidgets6
# Fedora
sudo dnf install qt6-qtbase qt6-qtwebsockets
# Arch
sudo pacman -S qt6-base qt6-websockets
Then: chmod +x DMXRouter && ./DMXRouter
VLAN management requires NetworkManager (sudo apt install network-manager if not present). No need to run as root — the app prompts for your password when needed. VLANs persist across reboots.
macOS
Download the .app bundle (Qt6 frameworks bundled). Requires macOS 13.0 (Ventura) or later.
First launch: macOS quarantines apps downloaded from the internet. Double-click install.command (shipped alongside the app) to remove the quarantine and sign it locally — you only need to do this once. Alternatively, run manually in Terminal:
xattr -cr DMXRouter.app
codesign --force --deep --sign - DMXRouter.appImportant: Disable the macOS Application Layer Firewall for reliable real-time DMX operation (System Settings → Network → Firewall → OFF). If you need firewall protection, use PF (pfctl) instead — see the v1.5.6 release notes for details and example rules.
No need to run with sudo — the app prompts for your password when needed. VLANs appear in System Settings → Network and persist across reboots.
DMXRouter 1.7.3
Custom VLAN ID
A new Custom entry at the top of the VLAN ID dropdown makes it obvious that you can type any VLAN ID (1–4094), not just Luminex group presets. Selecting it clears the field and shows a placeholder so you can type your ID immediately.
Fixture Database — Rental ID
A new editable Rental ID column in the Fixture Database allows you to tag each fixture with an asset or rental reference. Double-click to edit, just like Serial and Notes. Included in all CSV exports.
Serial & Rental ID Columns in RDM Device Tree
New Serial and Rental ID columns in the RDM device tree show the values entered in the Fixture Database. Hidden by default — right-click the tree header to enable them.
Platform Availability
Windows
Download and run DMXRouter-Setup.exe. All dependencies included. UAC will prompt for administrator privileges automatically if your account has them — this enables VLAN management without needing to right-click "Run as administrator".
VLAN management requires Windows Pro/Enterprise with Hyper-V enabled.
Linux
Download the binary for your architecture:
DMXRouter-v1.7.3-linux-x86_64.zip— standard PCs and serversDMXRouter-v1.7.3-linux-arm64.zip— Raspberry Pi 4/5, Orange Pi, ARM64 boards
Qt6 runtime required:
# Ubuntu / Debian / Raspberry Pi OS
sudo apt install libqt6core6 libqt6gui6 libqt6widgets6 libqt6network6 libqt6websockets6 libqt6openglwidgets6
# Fedora
sudo dnf install qt6-qtbase qt6-qtwebsockets
# Arch
sudo pacman -S qt6-base qt6-websockets
Then: chmod +x DMXRouter && ./DMXRouter
VLAN management requires NetworkManager (sudo apt install network-manager if not present). No need to run as root — the app prompts for your password when needed. VLANs persist across reboots.
macOS
Download the .app bundle (Qt6 frameworks bundled). Requires macOS 13.0 (Ventura) or later.
First launch: macOS quarantines apps downloaded from the internet. Double-click install.command (shipped alongside the app) to remove the quarantine and sign it locally — you only need to do this once. Alternatively, run manually in Terminal:
xattr -cr DMXRouter.app
codesign --force --deep --sign - DMXRouter.appImportant: Disable the macOS Application Layer Firewall for reliable real-time DMX operation (System Settings → Network → Firewall → OFF). If you need firewall protection, use PF (pfctl) instead — see the v1.5.6 release notes for details and example rules.
No need to run with sudo — the app prompts for your password when needed. VLANs appear in System Settings → Network and persist across reboots.
DMXRouter 1.7.2
sACN Multicast Limit (Linux)
DMXRouter now automatically raises the kernel IGMP multicast group limit on Linux when needed. sACN uses one multicast group per universe — the default Linux limit of 20 is too low for professional setups with many universes. On startup, DMXRouter detects the current limit and raises it to 1024 if necessary, requesting elevation via pkexec when not running as root. No manual sysctl commands needed.
Fixture Database — Serial Number & Notes
The Fixture Database now includes editable Serial and Notes columns. Double-click a cell to type a serial number or free-text note for any fixture. Values are saved automatically and persist across sessions. Both fields are included in CSV exports (manual and auto-mirror) for integration with inventory management systems and spreadsheets.
Useful when the printed serial number on a fixture doesn't match the RDM UID — some manufacturers use a separate internal counter for the UID instead of the serial.
Bug Fixes
- Fixed the Manufacturer PIDs tab not updating when switching between devices on the same gateway. Previously fetched values from one fixture would remain visible when selecting another fixture with the same manufacturer PIDs. Values are now cached per device and restored correctly when switching.
- Fixed the Manufacturer PIDs tab losing all previously fetched values when switching to a device on a different gateway. Values are now stored in the device cache and persist across tab rebuilds — no need to repeat GET requests for a device you already queried.
- Fixed the RDM device tree selection highlight showing mixed colors when focus moves to the inspector tabs. The branch area (left edge of the row) remained blue while the rest of the row turned grey. Both areas now use a consistent grey highlight when the tree loses focus.
- Fixed clicking on empty space in the RDM device tree not clearing the selection. The inspector tabs continued showing the last selected device even though no device appeared selected in the tree. Clicking on empty space now properly deselects and clears the inspector.
- Widened the UID, MAC Address, and CID columns in the LLRP target table. The UID column no longer truncates when the identify icon is shown.
- Improved the LLRP Device Configuration layout — info fields now use a compact grid, the personality table fills available vertical space instead of being capped at a fixed height, and the log panel has more room.
- Centered the RDM toolbar buttons (RDM ON/OFF, Discover, Force, Identify Off, Remove Lost) instead of pushing them to the right edge.
- Widened the Access and Type columns in the Manufacturer PIDs table to prevent truncation.
- Widened the Time and PID columns in the RDM Transaction Log. PID now uses stretch mode to accommodate long names.
- Widened the Last Seen column in the Fixture Database table to fit the full timestamp.
Platform Availability
Windows
Download and run DMXRouter-Setup.exe. All dependencies included. UAC will prompt for administrator privileges automatically if your account has them — this enables VLAN management without needing to right-click "Run as administrator".
VLAN management requires Windows Pro/Enterprise with Hyper-V enabled.
Linux
Download the binary for your architecture:
DMXRouter-v1.7.2-linux-x86_64.zip— standard PCs and serversDMXRouter-v1.7.2-linux-arm64.zip— Raspberry Pi 4/5, Orange Pi, ARM64 boards
Qt6 runtime required:
# Ubuntu / Debian / Raspberry Pi OS
sudo apt install libqt6core6 libqt6gui6 libqt6widgets6 libqt6network6 libqt6websockets6 libqt6openglwidgets6
# Fedora
sudo dnf install qt6-qtbase qt6-qtwebsockets
# Arch
sudo pacman -S qt6-base qt6-websockets
Then: chmod +x DMXRouter && ./DMXRouter
VLAN management requires NetworkManager (sudo apt install network-manager if not present). No need to run as root — the app prompts for your password when needed. VLANs persist across reboots.
macOS
Download the .app bundle (Qt6 frameworks bundled). Requires macOS 13.0 (Ventura) or later.
First launch: macOS quarantines apps downloaded from the internet. Double-click install.command (shipped alongside the app) to remove the quarantine and sign it locally — you only need to do this once. Alternatively, run manually in Terminal:
xattr -cr DMXRouter.app
codesign --force --deep --sign - DMXRouter.appImportant: Disable the macOS Application Layer Firewall for reliable real-time DMX operation (System Settings → Network → Firewall → OFF). If you need firewall protection, use PF (pfctl) instead — see the v1.5.6 release notes for details and example rules.
No need to run with sudo — the app prompts for your password when needed. VLANs appear in System Settings → Network and persist across reboots.
DMXRouter 1.7.1
Software Version Column
A new Software column in the RDM device tree shows each fixture's software version label at a glance. Hidden by default — right-click the tree header to enable it. Useful for spotting firmware mismatches across a fleet without selecting each device individually.
Manufacturer PIDs Tab
A dedicated Mfr PIDs tab in the RDM inspector lists all manufacturer-specific PIDs (0x8000–0xFFDF) reported by the device's SUPPORTED_PARAMETERS response. PARAMETER_DESCRIPTION is automatically queried for each manufacturer PID when selecting a device — when supported, the table shows human-readable names, access types (GET/SET), data types, and valid ranges. Use the GET button to read a PID, SET to write it with hex data, or GET All to read every readable manufacturer PID at once. Values are automatically displayed as ASCII text when printable, as decimal numbers for short numeric values, or as hex for binary data.
Flat View
A new Flat View toggle in the tree toolbar shows all fixtures as a flat list without the gateway/port hierarchy. This allows global sorting by any column — click on Name, DMX, FID, Manufacturer, Model, or Software to sort all fixtures across all nodes at once. Essential for large installations where you need to find all fixtures of a specific model, or sort the entire fleet by lamp hours or firmware version.
Expand All / Collapse All
Two new buttons above the RDM device tree let you expand or collapse all nodes with one click. Essential when working with large installations where scrolling through 50+ gateways and ports becomes impractical.
Improved DMX Conflict Details
DMX address overlap warnings now show exactly which fixtures conflict and their channel ranges in the tooltip. Instead of the generic "DMX address overlap with another device on this port", you now see: "⚠ Overlaps with: Fixture A (1–12), Fixture B (5–16)".
Bug Fixes
- The RDM device tree Name column no longer uses stretch mode. All columns are now individually resizable with a horizontal scrollbar appearing when the total width exceeds the panel. Previously, the stretch mode prevented the scrollbar from appearing when many columns were enabled.
- Gateway node names in the RDM tree no longer include the IP address in parentheses. The IP is already shown in the UID column, allowing independent sorting by name or by IP.
- The RDM device tree no longer forces DMX address sort order every refresh cycle. Clicking a column header now sorts devices by that column persistently, both within ports (hierarchical view) and globally (flat view).
- The selected device in the RDM tree now remains visually highlighted even when focus moves to the inspector tabs. Previously the selection became invisible when clicking on a tab, making it unclear which device was selected.
- Fixed the Manufacturer PIDs tab showing an empty list. The tab was sourcing PIDs from PARAMETER_DESCRIPTION responses only; devices that list manufacturer PIDs in SUPPORTED_PARAMETERS without supporting PARAMETER_DESCRIPTION had no entries. Now uses SUPPORTED_PARAMETERS as the source and enriches with description metadata where available.
- Fixed the Manufacturer PIDs GET, SET, and GET All buttons silently failing. The PID text format "0x8000" was parsed with base 16 which does not accept the "0x" prefix. Now uses the stored integer value directly.
- Fixed the PID Browser GET and SET buttons failing for PIDs entered with "0x" prefix in the hex field. Changed from base-16 parsing to auto-detect (base 0) which accepts both "8000" and "0x8000".
- Widened narrow tree columns (DMX, FID, Status, Last Seen) and set a minimum column width of 40px to prevent the sort arrow from overlapping column text.
- Fixed the RDM device tree sorting columns like DMX address and Fixture ID alphabetically instead of numerically (e.g. "113–128" appeared before "1–16"). Numeric columns now sort by their actual values.
- Fixed RDM ACK_TIMER responses causing infinite retry loops with certain fixtures. Retries are now capped at 5 attempts per transaction.
- Fixed RDM QUEUED_MESSAGE drain running indefinitely on devices that always report messageCount > 0. A 30-second cooldown prevents continuous retry after finding an empty queue.
- Fixed RDM status messages not being read from devices that use the direct-read model (GET STATUS_MESSAGES) rather than the queued notification model.
- Fixed the RDM Status tab description text being cleared every 300ms by the periodic refresh.
- Status tree indicators now show green checkmark when only advisory messages are present. Only warnings and errors display the warning icon.
- Fixed DEVICE_UNIT_NUMBER (Fixture ID) using 2-byte format which caused errors on fixtures that implement the 4-byte variant. GET now accepts both formats; SET sends 4 bytes.
- Fixture ID now populates automatically during RDM discovery instead of requiring a manual fetch. A single GET DEVICE_UNIT_NUMBER is sent after the basic probe completes for each device.
- PARAMETER_DESCRIPTION is now requested automatically during extended info fetch for all manufacturer-specific PIDs, instead of requiring a manual "Fetch Advanced" click. This populates the Mfr PIDs tab with human-readable names as soon as a device is selected.
- Manufacturer PIDs values are now displayed as readable text: ASCII strings when all bytes are printable, decimal numbers with hex reference for short numeric values, or hex dump for binary data.
- RDM queued change notifications for non-status PIDs are now detected and the affected PID is automatically re-fetched.
- Fixed sensor values displaying raw integer values instead of applying the SI prefix from the sensor definition. Values now show correct decimal places (e.g. 4.5 V instead of 45, 30.0 °C instead of 300).
- Widened the Sensor Unit column to prevent truncation of values like "A DC" and "Centigrade".
- Suppressed expected NACK log entries for SELF_TEST_DESCRIPTION, STATUS_ID_DESCRIPTION, and PARAMETER_DESCRIPTION during iterative discovery.
- Rearranged the Remote Control panel layout — Value Reference and Action Log are now side by side.
Platform Availability
Windows
Download and run DMXRouter-Setup.exe. All dependencies included. UAC will prompt for administrator privileges automatically if your account has them — this enables VLAN management without needing to right-click "Run as administrator".
VLAN management requires Windows Pro/Enterprise with Hyper-V enabled.
Linux
Download the binary for your architecture:
DMXRouter-v1.7.1-linux-x86_64.zip— standard PCs and serversDMXRouter-v1.7.1-linux-arm64.zip— Raspberry Pi 4/5, Orange Pi, ARM64 boards
Qt6 runtime required:
# Ubuntu / Debian / Raspberry Pi OS
sudo apt install libqt6core6 libqt6gui6 libqt6widgets6 libqt6network6 libqt6websockets6 libqt6openglwidgets6
# Fedora
sudo dnf install qt6-qtbase qt6-qtwebsockets
# Arch
sudo pacman -S qt6-base qt6-websockets
Then: chmod +x DMXRouter && ./DMXRouter
VLAN management requires NetworkManager (sudo apt install network-manager if not present). No need to run as root — the app prompts for your password when needed. VLANs persist across reboots.
macOS
Download the .app bundle (Qt6 frameworks bundled). Requires macOS 13.0 (Ventura) or later.
First launch: macOS quarantines apps downloaded from the internet. Double-click install.command (shipped alongside the app) to remove the quarantine and sign it locally — you only need to do this once. Alternatively, run manually in Terminal:
xattr -cr DMXRouter.app
codesign --force --deep --sign - DMXRouter.appImportant: Disable the macOS Application Layer Firewall for reliable real-time DMX operation (System Settings → Network → Firewall → OFF). If you need firewall protection, use PF (pfctl) instead — see the v1.5.6 release notes for details and example rules.
No need to run with sudo — the app prompts for your password when needed. VLANs appear in System Settings → Network and persist across reboots.
DMXRouter 1.7.0
Profile Preview
The Profile Manager now shows a detailed preview of the selected profile before loading. The preview panel displays the number of process engines, shows, cues, and VLANs, along with a compact list of each engine's mode, inputs, and outputs.
Preserve IP on Profile Load
When recalling a profile, a new Preserve current IP / VLAN settings checkbox (enabled by default) lets you keep your current network configuration. Uncheck it to load the VLAN settings stored in the profile — useful when moving profiles between machines.
Show Import / Export
Individual shows can now be exported to and imported from standalone JSON files. Use the ⤒ (export) and ⤓ (import) buttons next to the show selector. Exported shows can be shared between DMXRouter installations or used as backups independently of the full profile.
Engine Templates
A new Templates button next to Add in the process engine toolbar offers pre-configured engine setups: 8×/16× Forward sACN, 8×/16× Forward Art-Net, HTP Merge, LTP Merge, Backup Pair, X-Fade, and Switch. Templates automatically assign the next available universe numbers based on existing engines. Merge templates (HTP, LTP, Backup, X-Fade, Switch) assign distinct universes per input and place the output on the next available universe. Use this instead of creating engines one by one during initial setup.
Quick Universe Adjust
New Uni − / Uni + buttons (aligned right) in the process engine toolbar decrement or increment the input and output universe of the selected engine(s) by one. Only available for Forward mode engines — merge modes (HTP, LTP, Backup, etc.) are skipped to avoid breaking multi-input configurations. Works with multi-selection for fast bulk adjustments during setup.
RDM Self-Test (E1.20 §10.7)
Full self-test workflow support in the Status tab. DMXRouter discovers available self-tests on a device via SELF_TEST_DESCRIPTION, presents them in a dropdown, and lets you trigger any test with a single click via PERFORM_SELFTEST. A background poll detects when the test completes and directs the user to the status messages table for results — which are populated automatically by the existing messageCount auto-drain.
RDM Batch Operations
Select multiple devices in the RDM tree (Ctrl+click or Shift+click) and right-click for batch operations: Identify All On/Off, Set Personality (same mode on all selected), Set Sequential Addresses (auto-increments by each fixture's DMX footprint), and Fetch Info for all selected devices at once. Useful for touring setups where you need to repatch or remode an entire rig quickly.
Sensor Progress Bars
The Sensors tab now shows graphical progress bars for sensor values when the fixture reports a valid range (rangeMin/rangeMax). Bars are color-coded: green when the value is within the fixture's declared normal range, orange when outside. Plain numeric values are shown as fallback when no range is defined.
RDM Device Tree — Customizable Columns
Right-click the device tree header to show/hide columns and drag to reorder. Manufacturer and Model columns are now available (hidden by default). Column visibility, order, and widths persist across sessions. Use Reset to Defaults at the bottom of the context menu to restore the factory layout.
WiFi Interface Support
A new Show WiFi checkbox in the Network Interfaces panel makes wireless adapters visible for preprogramming scenarios where no Ethernet connection is available. WiFi interfaces appear tagged with [WiFi] in the interface list. Hidden by default to avoid confusion in live show environments. The setting persists across sessions.
Remote Control — Template Actions
Four new DMX remote control actions on the Main Channel: Auto-Apply Templates On (80–87), Auto-Apply Templates Off (88–95), Apply DMX Address On (96–103), and Apply DMX Address Off (104–111). The corresponding checkboxes in the RDM Templates tab update in real time when toggled via remote control.
Windows — Automatic Administrator Elevation
DMXRouter now includes a Windows application manifest with highestAvailable execution level. If the Windows user account has administrator privileges, UAC prompts automatically on launch — no need to manually right-click "Run as administrator" for VLAN management.
Bug Fixes
- Fixed keyboard arrow navigation in the RDM device tree not updating the right-side inspector tabs. Only mouse clicks were selecting devices; keyboard navigation now works identically.
- Added Delete key support in the RDM Templates tab to remove the selected template (with confirmation dialog).
- Fixed the RDM Self-Test "Fetch Tests" button not sending any requests to the device.
- Fixed RDM template apply sending incorrect parameter sizes for E1.37-1 dimmer PIDs (Curve, Output Response Time, Modulation Frequency, Maximum Level). Strict fixtures would NACK with FORMAT_ERROR.
- Fixed engine templates for merge modes (HTP, LTP, Backup, X-Fade, Switch) creating both inputs on the same universe, making the merge non-functional.
- Fixed a race condition in the RDM extended fetch pacer that could create duplicate worker threads under rapid start/stop cycles.
- Fixed a potential path traversal vulnerability in the web server when an external web root directory is configured.
- Fixed Windows administrator detection always reporting elevated privileges regardless of actual state. VLAN controls are now correctly disabled when not running as administrator.
- Fixed inspector tab tables (Personalities, Slots, Sensors, PID Browser, Status Messages) losing the selected row and scroll position on every periodic refresh.
- Fixed the self-test combo losing the selected test on every periodic refresh.
- Fixed the Undo button and Seq Loop dropdown overflowing outside the cue list panel on narrow windows.
- Improved the RDM Config tab layout — device controls now use a compact two-column grid, freeing more vertical space for the personality table.
- Fixed LLRP discovered devices disappearing and reappearing every 30 seconds. Periodic keepalive probes were including the known UID suppression list, causing compliant responders to not reply.
- Fixed LLRP multicast packets missing TTL=1 (link-local). Without this, some consumer routers attempted to route the multicast traffic beyond the local segment, causing internet disruption for the entire network.
- Removed the LLRP "All Interfaces" option. The interface selector now requires choosing a specific network adapter before starting LLRP discovery, preventing accidental multicast traffic on unintended interfaces. Non-Ethernet adapters (WiFi, VPN, tunnels) are filtered from the list.
- Fixed LLRP Identify and Get Info buttons briefly enabling then disabling when selecting a target.
- LLRP target table now highlights devices in identify mode with the identify icon and amber text, matching the RDM device tree visual style.
- LLRP now queries SUPPORTED_PARAMETERS on first target select and only requests PIDs the device actually supports. Controls for unsupported features (DMX address, personality) are automatically disabled. Avoids unnecessary NACK responses in the log.
- LLRP now auto-fetches device info and network configuration when selecting a target — no need to click "Read" manually. Network fields (Static IP, Mask, Gateway) are pre-filled from the device's current configuration, and the DHCP checkbox visually disables the static fields when DHCP is active.
- LLRP network config fields now show a clear visual distinction when disabled (dimmed background and text).
- LLRP network config re-reads the device IP twice after applying changes (at 1s and 4s) to catch DHCP lease assignments that take a few seconds.
- Removed the LLRP "Send Probe" button — redundant with the automatic periodic probe every 2 seconds.
- Expanded the PID Browser table to use all available vertical space instead of a fixed 150px height.
- Fixed RDM ACK_TIMER responses causing infinite retry loops with certain fixtures. Retries are now capped at 5 attempts per transaction, after which the operation fails cleanly instead of blocking the RDM queue.
- Fixed RDM QUEUED_MESSAGE drain running indefinitely on devices that always report messageCount > 0 but use the direct-read STATUS_MESSAGES model instead of the QUEUED_MESSAGE queue. A 30-second cooldown now prevents continuous retry after finding an empty queue.
- Fixed RDM status messages not being read from devices that use the direct-read model (GET STATUS_MESSAGES) rather than the queued notification model. Both approaches are now supported automatically.
- Fixed the RDM Status tab description text being cleared every 300ms by the periodic refresh, making it impossible to read STATUS_ID_DESCRIPTION results.
- Status tree indicators now show green ✔ (healthy) when only advisory messages are present. Only warnings and errors display the ⚠ icon — advisory messages are informational and represent normal device state.
- Fixed DEVICE_UNIT_NUMBER (Fixture ID, E1.37-5) using 2-byte format which caused FORMAT_ERROR on fixtures that implement the 4-byte variant. GET now accepts both 2-byte and 4-byte responses; SET sends 4 bytes for compatibility.
- Fixture ID (FID column) now populates automatically during RDM discovery instead of requiring a manual "Fetch Advanced" click.
- RDM queued change notifications for non-status PIDs (e.g. DEVICE_UNIT_NUMBER after SET) are now detected and the affected PID is automatically re-fetched to update the device cache.
- Fixed sensor values displaying raw integer values instead of applying the SI prefix from the sensor definition. Values now show correct decimal places (e.g. 4.5 V instead of 45, 30.0 °C instead of 300).
- Widened the Sensor Unit column to prevent truncation of values like "A DC" and "Centigrade".
- Suppressed expected NACK log entries for SELF_TEST_DESCRIPTION and STATUS_I...
DMXRouter 1.6.1
DMXRouter v1.6.1 — Release Notes
Show Mode
New Show Mode — a live-show protection lock that prevents accidental changes to the running configuration during a performance. When activated, destructive operations are blocked across the desktop GUI, the web interface, and the REST API.
Blocked (Destructive): Engine create / edit / delete, profile load / rename / delete / duplicate, VLAN create / delete, interface enable / disable, patch editing, config load / import.
Blocked (Caution): Engine enable / disable, RDM SET operations (address, personality, label), force discovery, RDM enable / disable, blackout / release.
Always allowed: Playback (GO, stop, pause, next, prev, record, autopilot, snapshot), DMX monitoring, RDM identify, stats, log, fixture database, node discovery list.
Activate Show Mode from the toolbar button (desktop) or the SHOW MODE button next to BLACKOUT (web). A red status bar badge and a red banner across the web interface confirm the lock is active. Show Mode always starts deactivated on launch.
The REST API exposes GET /api/showmode, POST /api/showmode/activate and POST /api/showmode/deactivate. State is included in GET /api/status and broadcast via the engines WebSocket channel. Blocked API calls return HTTP 403.
Web Remote Control
Improved mobile layout for the playback transport buttons. On narrow screens the first row (Prev, GoBack, Stop, Next) now shows icon-only buttons to prevent overflow. Full labels remain visible on desktop.
The web interface now receives network interface changes (cable connect/disconnect, adapter state) in real time via WebSocket, without requiring a manual refresh.
Network Interfaces
Improved filtering of non-Ethernet adapters on macOS. Low-level kernel interfaces (USB Host Controller, AWDL access point, Apple Neural Processing, bridge, tunnel, packet tap, and others) are now excluded from the interface list.
Data Safety
RDM templates, RDM emulator profiles, and user profiles now use atomic file writes. If DMXRouter is interrupted during a save (power loss, crash, forced kill), the previous version of the file is preserved intact.
Bug Fixes
- Fixed the process engine editor hanging for several seconds (and potentially crashing) on macOS when opening or switching modes.
- Fixed a race condition where reconfiguring network interfaces while multicast joins were in progress could cause missed sACN universes.
- Fixed the application closing and losing unsaved work when save-on-exit fails (e.g. writing to a folder without permissions) or when the user cancels the save dialog.
- Fixed transport buttons in the web interface overflowing horizontally on mobile devices.
- Fixed macOS showing internal system interfaces in the interface list.
- Fixed a potential path traversal vulnerability in the web server.
- Fixed a potential crash when the WebSocket watchdog removes a stale connection.
Platform Availability
Windows
Download and run DMXRouter-Setup.exe. All dependencies included.
VLAN management requires Windows Pro/Enterprise with Hyper-V enabled.
Linux
Download the binary for your architecture:
DMXRouter-v1.6.1-linux-x86_64.zip— standard PCs and serversDMXRouter-v1.6.1-linux-arm64.zip— Raspberry Pi 4/5, Orange Pi, ARM64 boards
Qt6 runtime required:
# Ubuntu / Debian / Raspberry Pi OS
sudo apt install libqt6core6 libqt6gui6 libqt6widgets6 libqt6network6 libqt6websockets6 libqt6openglwidgets6
# Fedora
sudo dnf install qt6-qtbase qt6-qtwebsockets
# Arch
sudo pacman -S qt6-base qt6-websockets
Then: chmod +x DMXRouter && ./DMXRouter
VLAN management requires NetworkManager (sudo apt install network-manager if not present). No need to run as root — the app prompts for your password when needed. VLANs persist across reboots.
macOS
Download the .app bundle (Qt6 frameworks bundled). Requires macOS 13.0 (Ventura) or later.
First launch: macOS quarantines apps downloaded from the internet. Double-click install.command (shipped alongside the app) to remove the quarantine and sign it locally — you only need to do this once. Alternatively, run manually in Terminal:
xattr -cr DMXRouter.app
codesign --force --deep --sign - DMXRouter.appImportant: Disable the macOS Application Layer Firewall for reliable real-time DMX operation (System Settings → Network → Firewall → OFF). If you need firewall protection, use PF (pfctl) instead — see the v1.5.6 release notes for details and example rules.
No need to run with sudo — the app prompts for your password when needed. VLANs appear in System Settings → Network and persist across reboots.
DMXRouter 1.6
DMXRouter v1.6.0 — Release Notes
Web Remote Control
DMXRouter now includes an embedded HTTP + WebSocket server with a built-in web interface that exposes the full application state and control surface over the network. Any device on the same network — phone, tablet, laptop, or automation system — can query status, control playback, manage process engines, trigger RDM operations, and receive real-time updates, all without touching the DMXRouter machine.
The server starts automatically on launch and listens on port 9090 (HTTP) and port 9091 (WebSocket) by default. The bind address is configurable — you can restrict the API to a specific network interface to keep DMX production networks clean. No external dependencies, no cloud services — it runs directly on Qt's event loop with zero impact on DMX performance.
Point any browser at http://<dmxrouter-ip>:9090 to open the web interface. The API is also directly usable from curl, Postman, Bitfocus Companion, custom scripts, or any HTTP client.
Web Interface
The built-in web interface is a responsive single-page application embedded in the binary (served from Qt resources — no external files needed). It uses the same dark professional theme as the desktop application. On desktop (≥768px) a sidebar provides direct navigation; on mobile a bottom tab bar with a "More" sub-menu is used.
Playback — Show management (create, rename, delete), cue list with inline editing (name, fade time, hold time, fade curve), cue reorder and cross-show copy, record cue with fade time. Full transport: ⏮️ Prev,
Engines — Process engine list with enable/disable toggles and expandable detail view (inputs, outputs, protocols, interfaces), snapshot and failsafe buttons, channel patch viewer with add/reset editing, global BLACKOUT/RELEASE button. 512-channel DMX output grid with color-coded intensity visualization and fullscreen mode. Desktop: 2-column grid (engines+patch | DMX grid).
RDM Devices — Enable/disable RDM toggle, force discovery, device list grouped by gateway with model, UID, DMX address range (start–end), personality, Fixture ID, probe progress, status indicators, and last seen time. DMX address conflicts are detected automatically and highlighted in red with a ⚠ warning — same overlap algorithm as the desktop. Inline SET forms for DMX address, personality, and device label. Identify button with visual state.
Stats & Log — Live PPS in/out, active universe count, error count (updated via WebSocket). Per-interface breakdown (Art-Net/sACN packets, PPS, errors per NIC). Scrollable log with color-coded severity levels. Desktop: stats in 4 columns.
More — Sub-menu (mobile) / sidebar links (desktop): Profiles (save, load, rename, duplicate, delete), Interfaces (enable/disable, no-link adapters shown dimmed) and VLANs (platform status, list, create, delete) in a single combined view, Nodes (discovery list), System (version, platform, Qt version, uptime, counters).
Features:
- Responsive layout — sidebar navigation on desktop, bottom tabs on mobile. 2-column grids on wide screens, single column on narrow. Hover states on desktop.
- Bidirectional sync — changes from the desktop GUI (engine toggle, show edits, RDM discovery, blackout, autopilot) are pushed to the web in real time via WebSocket. Changes from the web are pushed to the desktop via Qt signals.
- PIN authentication — if the server has a PIN configured, the web UI shows a login overlay. PIN is saved in the browser for convenience.
- WebSocket auto-reconnect (3s) with connection indicator in header (mobile) and sidebar (desktop).
- PWA support — web app manifest and Apple touch icon. Add to home screen for a native app experience.
- Zero external dependencies — vanilla HTML/CSS/JS, no build step, no CDN. Embedded in the binary.
Status Bar
The status bar shows a permanent Web API indicator at the right edge, next to the packet counter. It displays the HTTP port when the server is running (green) and the number of connected WebSocket clients when any are present (blue). When the server is stopped, it shows "API off" (dimmed).
REST API & WebSocket
The server exposes a full REST API covering system status, process engines, show cue playback (including all transport controls), RDM device management, profiles, network interfaces, VLANs, and nodes. Real-time updates are delivered over WebSocket on 6 channels (playback, stats, RDM, engines, log, interfaces). Optional PIN authentication protects both HTTP and WebSocket access. CORS headers are included for browser compatibility.
GET /api returns a self-describing JSON index of all endpoints and channels — point a browser or Postman at http://<ip>:9090/api to explore.
Configuration
Open Network → Web API... to configure the server: enable/disable, bind address, HTTP port, and PIN. Changes take effect immediately. Settings persist across sessions.
Network Interfaces
Disconnected adapters (no link) are now shown dimmed in the interface list instead of being hidden. The Enable checkbox remains active so you can pre-configure an interface before connecting the cable — it activates automatically when link is detected.
Improved filtering of non-Ethernet adapters on Windows: VPN, tunnel, TAP, and Bluetooth adapters are now identified by their hardware description (via GetAdaptersAddresses) even when the connection name is generic. Covers TAP-Windows, OpenVPN, WireGuard, Fortinet, Cisco AnyConnect, Palo Alto GlobalProtect, Tailscale, ZeroTier, Teredo, ISATAP, and Bluetooth PAN.
Fixture Database
The Fixture Database tab now includes a Recording toggle that lets you pause and resume database writes. When paused, RDM discovery and device probing continue normally but no fixture records or hour snapshots are written to disk. Existing data is preserved. The setting persists across sessions.
Channel Oscilloscope
Smoother waveform rendering: the oscilloscope now uses QOpenGLWidget with vsync-driven refresh at 60 fps, and all waveform coordinates use floating-point precision for sub-pixel positioning. The scrolling time axis no longer stutters between data samples.
Bug Fixes
- Fixed a GUI freeze when fetching extended device info (Fetch Hours / Fetch Extended) with the fixture database active.
Platform Availability
Windows
Download and run DMXRouter-Setup.exe. All dependencies included.
VLAN management requires Windows Pro/Enterprise with Hyper-V enabled.
Linux
Download the binary for your architecture:
DMXRouter-v1.6.0-linux-x86_64.zip— standard PCs and serversDMXRouter-v1.6.0-linux-arm64.zip— Raspberry Pi 4/5, Orange Pi, ARM64 boards
Qt6 runtime required (note the additional libqt6websockets6 and libqt6openglwidgets6 packages):
# Ubuntu / Debian / Raspberry Pi OS
sudo apt install libqt6core6 libqt6gui6 libqt6widgets6 libqt6network6 libqt6websockets6 libqt6openglwidgets6
# Fedora
sudo dnf install qt6-qtbase qt6-qtwebsockets
# Arch
sudo pacman -S qt6-base qt6-websockets
Then: chmod +x DMXRouter && ./DMXRouter
VLAN management requires NetworkManager (sudo apt install network-manager if not present). No need to run as root — the app prompts for your password when needed. VLANs persist across reboots.
macOS
Download the .app bundle (Qt6 frameworks bundled, including WebSockets and OpenGL). Requires macOS 13.0 (Ventura) or later.
First launch: macOS quarantines apps downloaded from the internet. Double-click install.command (shipped alongside the app) to remove the quarantine and sign it locally — you only need to do this once. Alternatively, run manually in Terminal:
xattr -cr DMXRouter.app
codesign --force --deep --sign - DMXRouter.appImportant: Disable the macOS Application Layer Firewall for reliable real-time DMX operation (System Settings → Network → Firewall → OFF). If you need firewall protection, use PF (pfctl) instead — see the v1.5.6 release notes for details and example rules.
No need to run with sudo — the app prompts for your password when needed. VLANs appear in System Settings → Network and persist across reboots.
DMXRouter 1.5.6
🍎 macOS Installation Note
If you see a message stating that "DMXRouter is damaged and can’t be opened", this is a security restriction from macOS Gatekeeper on non-notarized apps. To fix this, move the app to your /Applications folder and run these two commands in your Terminal:
- Remove the quarantine flag:
sudo xattr -rd com.apple.quarantine /Applications/DMXRouter.app
- Re-sign the app locally:
sudo codesign --force --deep --sign - /Applications/DMXRouter.app
Note: These steps are required because DMXRouter now uses the native SystemConfiguration framework to manage IPs and VLANs. macOS requires a local signature to grant the app permission to interact with these system-level network APIs.
macOS — Native Network Stack
All network management on macOS has been migrated from command-line tools (networksetup) to Apple's native SystemConfiguration framework — the same API used by System Settings → Network
Interface names throughout the application (Interfaces tab, engine dropdowns, Show Cue selectors, VLAN Manager) now resolve correctly for all interface types — physical adapters, VLANs, bridges, and bonds. The "Physical NIC" dropdown in the VLAN Manager shows friendly names like Thunderbolt Ethernet (en4) instead of raw device names.
Set IP and Set DHCP on VLAN interfaces now work reliably. The previous shell-based approach failed silently on VLANs because macOS could not resolve the service name. The new implementation writes directly to the system network preferences via SCPreferencesCreateWithAuthorization, the same mechanism used by System Settings. Write operations (Set IP, Set DHCP) still prompt for your administrator password; read operations (checking DHCP state) require no elevation.
Interface type detection now uses SCNetworkInterfaceGetInterfaceType() to filter WiFi, Bluetooth, modem, and mobile data adapters. This replaces QNetworkInterface::type(), which incorrectly reports AirPort adapters as Ethernet on some macOS versions.
Windows and Linux are unaffected by these changes — they continue using their existing PowerShell / nmcli paths.
macOS — Performance
App Nap prevention. DMXRouter now holds a runtime activity token (NSActivityLatencyCritical) that prevents macOS from throttling timers and network I/O when the window is in the background or occluded. The NSAppSleepDisabled Info.plist key was already present but can be overridden by the system; the runtime token is the authoritative mechanism used by professional audio and lighting applications. The display is still allowed to sleep when idle. You can verify the protection in Activity Monitor → App Nap column: DMXRouter should always show "No".
Ad-hoc code signing. The macOS build now includes automatic ad-hoc code signing as a post-build step, giving the app a stable identity so the firewall only prompts once on first launch instead of on every run.
Firewall warning. When the macOS Application Layer Firewall (ALF) is enabled, DMXRouter now shows a warning at startup recommending to disable it. This is a known macOS limitation that affects all high-packet-rate UDP applications — lighting control, professional audio, amateur radio, and network capture tools like Wireshark all suffer from it. Even with an app explicitly allowed as an exception (and even with a full Apple Developer ID signature), the kernel-level socket filter (com.apple.nke.applicationfirewall) inspects every incoming UDP packet, adding latency and CPU overhead that is incompatible with real-time DMX control at 44 packets/second per universe.
There is no workaround within the ALF — neither ad-hoc signing, Developer ID signing, nor firewall exception rules eliminate the per-packet inspection overhead. Two options are available:
Option 1 — Disable ALF (recommended for dedicated lighting machines on isolated production networks):
System Settings → Network → Firewall → switch OFF.
Option 2 — Replace ALF with PF (for machines on shared or internet-connected networks that need firewall protection):
Disable ALF as above, then enable macOS's built-in Packet Filter (pfctl), which operates at network level (like iptables/nftables on Linux) without per-socket overhead. Example PF rules for a lighting machine:
# /etc/pf.conf — allow Art-Net and sACN, block everything else inbound
pass in proto udp from any to any port {6454, 5568}
pass in proto udp from any to any port 5569:5668
block in all
Enable with: sudo pfctl -e -f /etc/pf.conf
PF provides proper firewall protection without the performance penalty of ALF's application-layer socket filter.
The startup warning can be dismissed permanently.
Network Interface Hotplug Detection
DMXRouter now detects network changes in real time on all three platforms. Plugging in a USB-Ethernet adapter, disconnecting a cable, changing an IP from the OS network settings, or creating a VLAN from an external tool will automatically update the interface list — no need to click Refresh.
Each platform uses its native push-notification mechanism:
- Linux — netlink socket subscribed to link and IPv4 address events, integrated into Qt's event loop.
- macOS —
SCDynamicStoremonitoring all network interface and IPv4 state changes. - Windows —
NotifyAddrChangeon a dedicated worker thread with clean shutdown support.
Events arrive in bursts (link down → IP removed → link up → DHCP assigned), so a 500ms debounce timer collapses them into a single interface refresh.
RDM Emulator
Device Hours and Power Cycles are now editable in the detail panel and in the Create/Edit Profile dialog.
Extended PID support. The emulator now responds to GET and SET for all standard RDM configuration parameters, allowing you to test template apply workflows end-to-end against emulated devices:
- Display —
DISPLAY_INVERT(0x0500),DISPLAY_LEVEL(0x0501) - Lamp —
LAMP_STATE(0x0403),LAMP_ON_MODE(0x0404) - Pan/Tilt —
PAN_INVERT(0x0600),TILT_INVERT(0x0601),PAN_TILT_SWAP(0x0602) - Power —
POWER_STATE(0x1010) - Dimmer (E1.37-1) —
CURVE(0x0343),OUTPUT_RESPONSE_TIME(0x0345),MODULATION_FREQUENCY(0x0347),MINIMUM_LEVEL(0x0341),MAXIMUM_LEVEL(0x0342) - DMX behavior —
DMX_FAIL_MODE(0x0141),DMX_STARTUP_MODE(0x0142)
All PIDs are advertised in SUPPORTED_PARAMETERS, persisted to JSON, and initialized with sensible defaults (e.g., 4 dimmer curves, 3 response time settings, 3 modulation frequencies). SET operations validate range and return NR_DATA_OUT_OF_RANGE for invalid values.
RDM Templates — Extended Settings
The template system now supports all standard RDM SET parameters. Clicking the "N params ▸" button in the Settings column opens a dialog with grouped controls:
- Display — Display Invert (Off / On / Auto), Display Level (0–255)
- Lamp — Lamp On Mode (Off / DMX / On / After-Cal), Lamp State (Off / On / Strike / Standby)
- Pan / Tilt — Pan Invert, Tilt Invert, Pan/Tilt Swap
- Power — Power State (Full On / Shutdown / Standby / Normal)
- Dimmer (E1.37-1) — Curve index, Output Response Time index, Modulation Frequency index, Minimum Level, Maximum Level. When a matching device has been discovered, the spin boxes show the device's supported range and current value in the tooltip. Minimum Level prevents LED flicker at low intensities; Maximum Level caps output for audience safety or power control.
- DMX Behavior (E1.37-1) — DMX Fail Mode (Hold Last Look / Full Off), DMX Startup Mode (Hold Last Look / Full Off). Controls what the fixture does when it loses DMX signal and what it does on power-up before DMX arrives — critical for safety in permanent installations.
All settings use the standard "— (not set)" convention — only parameters you explicitly configure are sent to the device. Templates are applied via the existing "Apply to Selected" button or automatically on discovery when auto-apply is enabled.
RDM Alert Identify
A new "Identify fixtures on alert" toggle in the Templates tab enables automatic RDM Identify for fixtures that have a problem. When enabled, DMXRouter sends IDENTIFY_DEVICE ON to any fixture that meets either of these conditions:
- Firmware mismatch — the fixture's software version doesn't match the version stored in its template
- Lamp hours exceeded — the fixture's lamp hours exceed the limit defined in its template
The fixture flashes on the rig, letting the technician spot it without looking at the screen. This is especially useful during pre-show checks in large rigs where visually scanning for problems on a monitor isn't practical.
When a template has a lamp hours limit configured, DMXRouter now automatically fetches hours PIDs (Device Hours, Lamp Hours, Lamp Strikes, Power Cycles) immediately after the basic probe completes. Previously, lamp hours were only available after a manual extended fetch (double-click or button), which meant the alert system was effectively inactive unless the user intervened. The auto-fetch adds only 4 lightweight RDM requests (~200ms of bus time) per fixture — not the full extended fetch which includes personalities, slots, and sensors.
Identify is sent once per device per session — toggling RDM off and on, or clearing the device list, resets the tracking so alerts are re-evaluated on the next probe. The identify stays on until the technician turns it off manually (right-click → Identify Off, or via the Info tab). The setting persists across sessions.
The feature can also be toggled from the DMX Remote Control main channel: value 64–71 enables alert identify, value 72–79 disables it. This allows a technician to activate pre-show fixture checks from the desk without touching the DMXRouter interface. The checkbox in the Templates tab s...