Overview
The MIDIDMX exporter enables HNode to send DMX channel data to VRChat worlds that have the MIDIDMX receiver installed. It supports up to 16,384 DMX channels across 8 banks (2,048 channels per bank). Requirements:- MIDIDMX receiver installed in VRChat world: https://github.com/micksam7/VRC-MIDIDMX
- Virtual MIDI device (e.g., loopMIDI on Windows)
Configuration
The name of the MIDI output device to use for sending data. Must match the exact name of the device as it appears in the system.
Maximum number of channels to send per frame. Limited to 100 due to VRChat buffer constraints. Higher values may cause data loss.
Number of channels to periodically rescan during idle operation. Keeps this low to preserve bandwidth for actively changing channels.
If true, monitors the Unity Editor log instead of the VRChat output log. Used for testing in the Unity Editor.
YAML Example
Key Features
Bank Switching
MIDIDMX automatically switches between 8 banks (0-7) to support 16,384 total channels. Each bank contains 2,048 channels.Watchdog System
The exporter implements a watchdog system that monitors the VRChat log file for “MIDIREADY” responses from the world. This ensures data is only sent when the world is ready to receive it.Connection States
The exporter has three connection states accessible viaMidiStatus():
No MIDI connection established.
Connected to MIDI device, waiting for VRChat world to respond to watchdog.
Actively sending data to VRChat world.
Public Methods
GetMidiDevices()
Returns a list of available MIDI output devices on the system. Returns:List<string> - Device names including “(none)” as the first option
MidiConnectDevice(string device)
Connects to the specified MIDI device. Disconnects from any previously connected device. Parameters:device(string): Name of the MIDI device to connect to
MidiStatus()
Returns the current status of the MIDI connection. Returns:MIDIDMX.Status - Current connection state
Protocol Details
Control Codes
The exporter uses MIDI control codes on channel 15:- Watchdog (127): Periodic heartbeat signal
- Knock Sequence (101, 120, 107): Initial handshake to activate world receiver
- Bank Change (0-7): Switches active bank
- Clear (100): Clears all channel data
Data Encoding
Channel data is encoded using 18-bit MIDI messages:- Channels 0-1023: NoteOn events
- Channels 1024-2047: NoteOff events
Technical Implementation
Usage Notes
- Keep
channelsPerUpdateat 100 or lower due to VRChat buffer limitations - The exporter automatically handles reconnection if the world becomes unresponsive
- Only changed channels are sent to minimize bandwidth usage
- Idle scanning ensures channels remain synchronized even without changes
- The watchdog system prevents data loss by only sending when the world is ready
Troubleshooting
No data being sent:- Check that the MIDI device name exactly matches your virtual MIDI port
- Verify the VRChat world has MIDIDMX receiver installed
- Monitor status using
MidiStatus()- should show “ConnectedSendingData”
- Reduce
channelsPerUpdateif seeing packet loss - Ensure
idleScanChannelsis low (10 or less) - Check VRChat output log for “MIDIREADY” messages