Art-Net to MIDI Bridge - Convert DMX lighting data to MIDI for visual synchronization.
- π¨ DMX to MIDI Conversion - Converts RGB, White, UV, and Intensity channels to MIDI CC
- π Color Analysis - Extracts Hue from RGB for color-reactive visuals
- πΉ Note Triggers - DMX attribute channel triggers MIDI notes
- β‘ Strobe Support - Simulates strobe effects via intensity modulation
- π₯οΈ Cross-Platform - Native builds for Windows and macOS
- ποΈ Real-time Monitor - Visual feedback of all DMX and MIDI values
- Download the latest PulzWaveArtNetMidiBridge-Setup.exe
- Run the installer and follow the prompts
- If loopMIDI is not installed, the installer will prompt you to download it
Note: Windows requires loopMIDI (free) to create virtual MIDI ports. See loopMIDI Setup for configuration details.
- Download the latest PulzWaveArtNetMidiBridge.dmg
- Open the DMG and drag the app to your Applications folder
- Set up a virtual MIDI port using the built-in IAC Driver:
macOS includes a built-in virtual MIDI driver called IAC Driver:
- Open Audio MIDI Setup (search in Spotlight or find in
/Applications/Utilities/) - From the menu bar, select Window β Show MIDI Studio
- Double-click IAC Driver
- Check Device is online
- Click the + button under "Ports" to add a new port (e.g., "PulzWave MIDI")
- Click Apply
The virtual MIDI port will now appear in PulzWaveArtNetMidiBridge and other MIDI applications.
# Clone the repository
git clone https://github.com/pulzwave/PulzWaveArtNetMidiBridge.git
cd PulzWaveArtNetMidiBridge
# Create virtual environment
python -m venv .venv
# Activate (Windows)
.venv\Scripts\activate
# Activate (macOS/Linux)
source .venv/bin/activate
# Install dependencies
pip install -r requirements.txtpython -m src.mainStarting from the configured start channel (10 channels total):
| Offset | Channel | Description |
|---|---|---|
| +0 | Red | RGB Red (0-255) |
| +1 | Green | RGB Green (0-255) |
| +2 | Blue | RGB Blue (0-255) |
| +3 | White | White (0-255) |
| +4 | UV | UV/Blacklight (0-255) |
| +5 | Dimmer | Master Intensity (0-255) |
| +6 | Strobe | Strobe Speed (0-255) |
| +7 | Attribute | Note Trigger (0-255) |
| +8 | Hold MSB | Note Hold Time - High Byte |
| +9 | Hold LSB | Note Hold Time - Low Byte |
The hold time uses two DMX channels (MSB + LSB) for precise timing control:
- Calculation:
(MSB Γ 256) + LSB = milliseconds - Range: 0-10,000 (capped at 10 seconds)
- Value 0: Note is held continuously until the attribute changes
- Value 1-10000: Note is held for the specified duration in milliseconds
Examples:
| MSB | LSB | Result |
|---|---|---|
| 0 | 0 | Continuous (β) |
| 0 | 255 | 255ms |
| 3 | 232 | 1000ms (1 second) |
| 19 | 136 | 5000ms (5 seconds) |
| 39 | 16 | 10000ms (10 seconds) |
| CC | Parameter | Range |
|---|---|---|
| 10 | Red | 0-127 |
| 11 | Green | 0-127 |
| 12 | Blue | 0-127 |
| 13 | White | 0-127 |
| 14 | UV | 0-127 |
| 15 | Intensity | 0-127 |
| 16 | Hue | 0-127 |
| 17 | Inverse Hue | 0-127 |
- Attribute channel value 1-127 triggers MIDI notes 12-138 (C0 onwards)
- Notes are automatically released when attribute changes
Settings are stored in:
- Windows:
%APPDATA%\PulzWave\PulzWaveArtNetMidiBridge\config.json - macOS:
~/Library/Application Support/PulzWaveArtNetMidiBridge/config.json
On first launch, the app displays a setup wizard that guides you through:
- DMX Configuration - Set Art-Net universe and start channel
- MIDI Output - Select your MIDI output device
- Connection Test - Verify Art-Net connectivity
PulzWaveArtNetMidiBridge requires a virtual MIDI port to send MIDI to other applications. I recommend loopMIDI (free).
- Download and install loopMIDI
- Launch loopMIDI
- Click the + button to create a new virtual MIDI port
- The port will appear in the list and can now be selected in PulzWaveArtNetMidiBridge
To use PulzWaveArtNetMidiBridge with SoundSwitch, you need to configure Art-Net output and add the fixture.
- Open SoundSwitch Preferences
- Go to the Art-Net section
- Enable Art-Net output
- You should see the PulzWaveArtNetMIDI interface in the list (make sure the app is running)
Note: If the PulzWaveArtNetMIDI interface doesn't appear, make sure PulzWaveArtNetMidiBridge is running and listening on the correct network interface.
- Go to DMX Setup
- Click Add Fixture
- Search for manufacturer: Unknown
- Select fixture: PulzWave ArtNet MIDI Bridge
- Add it to your DMX profile and assign it to the desired universe/channel
Note: Make sure the Art-Net universe and start channel in SoundSwitch match the settings configured in PulzWaveArtNetMidiBridge.
PulzWaveArtNetMidiBridge works great with Pangolin QuickShow for lighting-synchronized laser shows.
π See the QuickShow Setup Guide β
The guide includes animated demos showing:
- How to configure MIDI mapping using the LEARN button
- What the live synchronization looks like in action
βββ .github/workflows/ # CI/CD pipelines
βββ build_scripts/ # PyInstaller specs
βββ src/
β βββ __init__.py
β βββ main.py # Entry point
β βββ config.py # Settings manager
β βββ ui.py # NiceGUI interface
β βββ setup_wizard.py # First-time setup wizard
β βββ texts.json # UI texts for easy localization
β βββ artnet_listener.py# UDP Art-Net receiver
β βββ midi_manager.py # MIDI output handling
βββ requirements.txt
βββ README.md
MIT License - See LICENSE file for details.
β Buy me a coffee
Made with β€οΈ by PulzWave


