Overview
VRSL’s video streaming system bridges professional lighting control software with VRChat by encoding DMX data into video pixels. This enables real-time control of hundreds of fixtures from industry-standard tools like MA3, Chamsys, or QLC+.The Grid Node is a separate paid application that runs locally, converting Art-Net/sACN to video that can be streamed to VRChat.
System Architecture
Grid Node Application
Installation & Setup
- Purchase the Grid Node from Gumroad
- Extract and run the application
- Configure network settings:
- Art-Net Universe: 1-9 (or more with RGB mode)
- sACN Universe: Same as Art-Net
- OSC Port: 12000 (for Unity editor sync)
- Set orientation:
- Vertical Mode: 13×67 grid (871 channels, 6.7 universes)
- Horizontal Mode: 120×13 grid (1560 channels, 3 universes)
RGB Expanded Mode
Enable RGB mode to triple capacity:- Red Channel: Universes 1, 4, 7
- Green Channel: Universes 2, 5, 8
- Blue Channel: Universes 3, 6, 9
Grid Node Output
The Grid Node outputs a 1920×1088 video texture: Vertical Mode:- Grid area: 208×1072 pixels (13×67 cells, 16px each)
- Remaining space: Black/unused
- Grid area: 1920×208 pixels (120×13 cells, 16px each)
- Remaining space: Black/unused
Unity Editor Integration
During development, the Grid Node can sync directly with Unity:GridReader Component
TheGridReader.cs script receives OSC data from Grid Node:
OSC Message Parsing
Texture Buffer Update
Changed cells are written to the texture each frame:The GridReader is editor-only (
#if UNITY_EDITOR). In VRChat, the video player provides the texture directly.VRChat Video Player Setup
In your VRChat world:1. Add Video Player
Use USharp Video Player or similar:2. Assign Render Texture
Create or assign the DMX grid render texture:- Name:
_Udon_DMXGridRenderTexture(or legacy_OSCGridRenderTextureRAW) - Size: 1920×1088 or larger
- Format: RGBA32
- Filter Mode: Point (no interpolation)
- Wrap Mode: Clamp
3. Global Shader Properties
Set the texture globally so all VRSL shaders can access it:Streaming Setup
OBS Configuration
- Add Window Capture or Display Capture source
- Point to VRSL Grid Node application
- Crop to grid area if desired
- Set output resolution:
- 1920×1080 (standard)
- Higher if you need sharper pixels
- Critical: Set bitrate high enough to prevent compression:
- Minimum: 6000 kbps
- Recommended: 8000-10000 kbps
- Ideal: Lossless recording/local streaming
Streaming Platform
Options for delivering video to VRChat: Twitch- Pros: Low latency (2-4 seconds), reliable
- Cons: Public stream, compression artifacts
- Bitrate: Use maximum allowed for your partnership tier
- Pros: High quality, unlisted streams
- Cons: Higher latency (5-10 seconds)
- Bitrate: Up to 51 Mbps for 4K
- Pros: Full control, minimal compression
- Cons: Requires server, networking knowledge
- Bitrate: Unlimited
Compression Handling
Video compression is the biggest challenge for DMX streaming:Problems Caused by Compression
- Color Banding - DMX values become imprecise
- Temporal Artifacts - Fast changes get blurred
- Block Artifacts - Encoding blocks create false data
VRSL’s Mitigation Strategies
Interpolation Render Texture Smooths values over time:Latency Optimization
End-to-End Latency Breakdown
| Stage | Typical Latency | Optimization |
|---|---|---|
| Lighting Console → Art-Net | 1-5 ms | Use wired network |
| Art-Net → Grid Node | 1-10 ms | Local processing |
| Grid Node → OBS | 16-33 ms | Monitor refresh rate |
| OBS Encoding | 30-100 ms | Use NVENC, lower preset |
| Stream Upload | 10-50 ms | Use CDN close to server |
| Platform Processing | 500-3000 ms | Choose platform carefully |
| VRChat Download | 100-500 ms | Player’s network |
| Video Player Buffer | 100-1000 ms | Configure buffer size |
| Total | ~750-4500 ms | 0.75-4.5 seconds |
Reducing Latency
- Use Twitch - Lowest platform latency
- Enable Low Latency Mode - In Twitch settings
- Reduce Buffer - In USharp Video Player settings
- Optimize Encoding - Use hardware encoding (NVENC/QuickSync)
- Local Network - Test with local RTMP server first
Some latency is unavoidable. Design your lighting cues with a 1-2 second offset to sync with audio.
Texture Modes
VRSL supports multiple texture configurations:Legacy Textures
Modern Textures
Testing Without Grid Node
For testing without streaming:1. Use Pre-recorded Video
Record a Grid Node session and play back:2. Use GridReader in Editor
Enable the GridReader component with OSC:3. Manual Texture Updates
Write a custom script to simulate DMX:Advanced Features
OSC Commands
Grid Node supports OSC control:MIDI Output
Grid Node can output MIDI alongside video:- Convert DMX channels to MIDI CC
- Useful for triggering other software
- Planned for future VRChat OSC integration
Multiple Outputs
Run multiple Grid Node instances:- Different universe ranges
- Different orientations
- Multiple worlds simultaneously
Troubleshooting
Grid Appears Black
- Check video player is playing
- Verify render texture is assigned
- Ensure texture is set globally (not per-material)
- Check
_EnableVerticalModematches Grid Node
Fixtures Not Responding
- Verify DMX channel assignments
- Check universe configuration in Grid Node
- Ensure fixtures have
_EnableDMXenabled - Test with GridReader in editor first
Jittery Movement
- Increase streaming bitrate
- Use movement-specific smoothing texture
- Adjust
_ConeSyncparameter - Consider slower, smoother movements
Incorrect Colors
- Check RGB mode enabled in both Grid Node and fixtures
- Verify
_NineUniverseModesetting - Ensure color channels are mapped correctly
- Test with solid colors first
Related Topics
DMX System
How DMX data is encoded and decoded
Shader Architecture
How shaders read the video texture