What is VRC-MIDIDMX?
VRC-MIDIDMX is a system created by Micca ([email protected]) that enables DMX control in VRChat worlds via MIDI:- Direct DMX control: No video encoding/decoding overhead
- Low latency: Faster response than streaming
- 16,384 channels: Supports up to 8 banks of 2,048 channels each
- Watchdog system: Ensures connection stability
VRC-MIDIDMX must be installed in the VRChat world you want to control. It cannot be added client-side.
Prerequisites
Install loopMIDI
Download and install loopMIDI to create virtual MIDI ports on Windows.
- Install loopMIDI
- Open loopMIDI
- Create a new port (e.g., “loopMIDI Port”)
- Keep loopMIDI running
Verify VRChat World Support
Ensure the VRChat world you’re using has VRC-MIDIDMX installed and configured. Check with the world creator or documentation.
Configuration
MIDIDMX is added as an exporter in your show configuration.Basic Setup
The name of the MIDI output device to use. Must match a device name from your system.Set to
(none) to disable output.Maximum number of channels to update per frame. Keeps bandwidth usage controlled.
Number of channels to scan during idle periods. Ensures all channels eventually sync even if unchanged.Lower values reduce bandwidth usage but increase time to full sync.
Use Unity Editor log instead of VRChat log for watchdog detection. Only useful during development.
Adding MIDIDMX in HNode UI
Configure MIDI Device
- Click in the MIDI Device field
- Type the exact name of your loopMIDI port (e.g., “loopMIDI Port”)
- Or select from the detected devices list if displayed
Adjust Settings (Optional)
- Leave Channels Per Update at
100(recommended) - Leave Idle Scan Channels at
10(recommended) - Leave Use Editor Log unchecked (unless developing)
How MIDIDMX Works
Connection Process
World Knocking
HNode sends a sequence of control messages to “knock” on the VRChat world:
- KnockStart (CC 127 = 101)
- KnockMiddle (CC 127 = 120)
- KnockFinish (CC 127 = 107)
Watchdog Monitoring
HNode continuously sends watchdog packets (CC 127 = 127) and monitors the VRChat log file for “MIDIREADY” responses.When detected, status changes to ConnectedSendingData.
Bank System
MIDIDMX supports 8 banks of 2,048 channels each (16,384 total channels):- Bank 0: Channels 0-2047 (Universes 0-3)
- Bank 1: Channels 2048-4095 (Universes 4-7)
- Bank 2: Channels 4096-6143 (Universes 8-11)
- Bank 3: Channels 6144-8191 (Universes 12-15)
- Bank 4: Channels 8192-10239 (Universes 16-19)
- Bank 5: Channels 10240-12287 (Universes 20-23)
- Bank 6: Channels 12288-14335 (Universes 24-27)
- Bank 7: Channels 14336-16383 (Universes 28-31)
Status Indicators
MIDIDMX provides three connection states:Disconnected
No MIDI device connection. Check device name and loopMIDI.
ConnectedWait
Connected to MIDI, waiting for VRChat world to respond. Make sure you’re in a world with VRC-MIDIDMX.
ConnectedSendingData
Actively sending data to VRChat. Lights should respond to DMX input.
Troubleshooting
Status stuck on Disconnected
Status stuck on Disconnected
- Verify loopMIDI is running
- Check the MIDI device name exactly matches your loopMIDI port
- Click “Reconnect MIDI Device” in HNode
- Try restarting loopMIDI
- Ensure no other application is using the MIDI port
Status stuck on ConnectedWait
Status stuck on ConnectedWait
- Verify you’re in a VRChat world with VRC-MIDIDMX installed
- Check VRChat’s audio input is set to the loopMIDI port
- Ensure VRChat is actually running (not just the loader)
- Look for “MIDIREADY” in the VRChat log file:
- Location:
%AppData%\..\LocalLow\VRChat\VRChat\output_log_*.txt
- Location:
- Try leaving and rejoining the world
Lights don't respond in VRChat
Lights don't respond in VRChat
- Verify status is ConnectedSendingData
- Ensure ArtNet is being sent to HNode (check HNode statistics)
- Verify the world’s gridnode configuration matches your serializer
- Check that fixture addresses in your lighting console match the world’s setup
- Try sending a simple static value generator to test:
Data is delayed or choppy
Data is delayed or choppy
- Lower
channelsPerUpdate(try 50 or 75) - Increase
idleScanChannelsslightly (try 20) - Check VRChat performance (low FPS affects MIDIDMX reception)
- Ensure HNode is running at target framerate (check statistics)
- Close other applications using the MIDI port
Connection drops randomly
Connection drops randomly
The watchdog system should maintain connection, but if it drops:
- Check VRChat didn’t crash or reload
- Verify loopMIDI is still running
- Look for errors in the VRChat log
- Try increasing the watchdog timeout (requires code modification)
Can't find VRChat log file
Can't find VRChat log file
The log file location:
- Multiple log files may exist; HNode uses the most recent
- If using Unity Editor for world development, enable
useEditorLog: true
Performance Optimization
Limit Channel Updates
Keep
channelsPerUpdate at 100 or lower. Higher values may overwhelm VRChat’s buffers.Optimize Idle Scanning
Lower
idleScanChannels (5-10) reduces bandwidth but increases sync time. Balance based on your needs.Use Appropriate Universes
Only use the banks/universes you need. Unnecessary channels still consume update bandwidth.
Match Framerate
Set HNode’s
targetFramerate to match your lighting console’s output rate (typically 30-40 FPS).Combining MIDIDMX with Streaming
You can use MIDIDMX alongside video streaming for redundancy or different purposes:- Direct DMX control via MIDIDMX (low latency)
- Video visualization via streaming (for viewers)
- Fallback if one system fails
Advanced: Editor Development Mode
When developing VRC-MIDIDMX worlds in Unity Editor:Next Steps
- Configure your show configuration to save MIDIDMX settings
- Set up OBS streaming for video output alongside MIDIDMX
- Learn about Spout I/O for additional texture routing options
- Explore available serializers for different world formats