Documentation Index
Fetch the complete documentation index at: https://mintlify.com/AcChosen/VR-Stage-Lighting/llms.txt
Use this file to discover all available pages before exploring further.
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