General Questions
What is HNode?
What is HNode?
What platforms does HNode support?
What platforms does HNode support?
- Windows: Primary platform with full Spout2 support
- Linux: Possible but Spout2 functionality is Windows-only
- macOS: May work but untested, no Spout2 support
Is HNode free to use?
Is HNode free to use?
What lighting software works with HNode?
What lighting software works with HNode?
- QLC+ (free, open-source)
- MA Lighting grandMA2/grandMA3
- Chamsys MagicQ
- Avolites Titan
- LightKey
- DMXControl
- And many others
Serializers and Compatibility
What serializers does HNode support?
What serializers does HNode support?
- VRSL - For VRSL (VRChat Stage Lighting) worlds
- Binary Stage Flight - For BSF gridnode implementations
- Binary - Standard binary encoding
- Ternary - Three-state encoding for higher density
- Color Binary - Color-based binary encoding
- Spiral - Spiral pattern encoding
- Furality Somna - Custom serializer for Furality events
What's the difference between a serializer and a deserializer?
What's the difference between a serializer and a deserializer?
- Converts DMX channel data to video output
- Takes raw byte values and encodes them into pixels
- Used for outputting lighting data to be streamed
- Converts video input to DMX channel data
- Reads pixel data and decodes it back to byte values
- Used for transcoding between different pixel mapping formats
Can I use multiple serializers at once?
Can I use multiple serializers at once?
- Use transcoding - Input one format via deserializer, output another via serializer
- Run multiple instances - Run multiple copies of HNode with different configurations
- Switch configurations - Save multiple show configurations and switch between them
How do I know which serializer to use?
How do I know which serializer to use?
- Check the world description or documentation
- Look for terms like “VRSL”, “Binary Stage Flight”, “BSF”
- Ask the world creator which gridnode system they use
- VRSL is the most common in VRChat
- Binary Stage Flight is increasingly popular
- Custom implementations may need specific serializers
Can I create custom serializers?
Can I create custom serializers?
- Implement the
IDMXSerializerinterface in C# - Implement the required methods:
SerializeChannel()- Convert DMX byte to pixelsDeserializeChannel()- Convert pixels to DMX byteInitFrame()- Initialize frame stateCompleteFrame()- Finalize frame (e.g., add CRC)
- Add your serializer to the
Assets/Plugin/Serializersdirectory - Rebuild HNode or use as a custom plugin
SerializerVRSL.cs or SerializerBinaryStageFlight.cs for examples.Configuration and Settings
How do I configure ArtNet settings?
How do I configure ArtNet settings?
- Default:
0.0.0.0(listen on all network interfaces) - Set to specific IP to bind to one interface
- Use
0.0.0.0if you’re unsure
- Default:
6454(standard ArtNet port) - Only change if your system requires a different port
- Must match your lighting console’s output port
What is transcoding and when should I use it?
What is transcoding and when should I use it?
- Converting between different serializer formats
- Testing serializer outputs
- Adapting existing video streams to different gridnode types
- Bridging incompatible systems
- Set
Transcode: truein configuration - Set a Deserializer (input format)
- Set a Serializer (output format)
- Configure Transcode Universe Count (how many universes to convert)
- Set Spout Input Name to receive video input
What is channel masking?
What is channel masking?
- Hide specific fixtures you don’t want in output
- Isolate specific channel ranges for testing
- Create transparency effects
- Reduce visual clutter
maskedChannels: List of channel ranges to mask (start/end pairs)invertMask: When true, only masked channels are visibleautoMaskOnZero: Automatically mask channels with zero value
What resolution should I use?
What resolution should I use?
- 1920×1080 (default): Best quality, higher processing load
- 1280×720: Good quality, better performance
- Higher resolutions: Only if you need more channel density
- Should match your Spout input source
- Mismatch causes scaling artifacts
- Higher resolution = more processing power required
- Your serializer determines minimum resolution needs
- Streaming bitrate should match resolution (higher res = higher bitrate needed)
What framerate should I target?
What framerate should I target?
- Standard for most VRChat users
- Good balance of smoothness and performance
- Lower CPU/GPU usage
- Most clients run at 30 FPS anyway
- Smoother motion for high-framerate clients
- Higher processing requirements
- Larger stream bandwidth needed
- Only beneficial if clients can maintain 60 FPS
- Rarely needed for lighting applications
- Significant performance impact
- Not recommended unless specific use case
TargetFramerate in your configuration. Start with 30 FPS and increase only if needed.Streaming and Output
What is Spout2 and why do I need it?
What is Spout2 and why do I need it?
- HNode outputs video via Spout2
- OBS captures this video via the Spout2 plugin
- No intermediate files or screen capture needed
- Extremely low latency and high performance
- Windows operating system
- Spout2 for OBS plugin
- DirectX compatible GPU
Can I stream without Spout2?
Can I stream without Spout2?
- Capture HNode’s window directly in OBS
- Higher latency and CPU usage
- Less efficient than Spout2
- Use virtual camera software to route video
- Adds extra processing overhead
- More complexity
- Network Device Interface protocol
- Would require additional implementation
- Not currently supported
What streaming services work with HNode?
What streaming services work with HNode?
- YouTube Live (high latency, wide reach)
- Twitch (high latency, gaming-focused)
- VRCDN (lower latency, VR-optimized)
- MediaMTX (recommended for local/LAN streaming)
- NGINX with RTMP module
- OBS Websocket
- Public services have 5-15 second latency
- Local streaming (MediaMTX) has <1 second latency
- Check service ToS for your use case
- Consider your audience size and geographic distribution
How do I set up local streaming with MediaMTX?
How do I set up local streaming with MediaMTX?
- Download MediaMTX for your platform
- Extract and run
mediamtx.exe(or equivalent) - Configure OBS:
- Service: Custom
- Server:
rtmp://localhost/ - Stream Key: Any ASCII text (or leave blank)
- Start streaming in OBS
- Access stream at:
rtspt://localhost:8554/[stream_key]
- Replace
localhostwith your server’s IP address - Ensure port 8554 is open in your firewall
- Use the server’s IP in your VR world video player
Why is my stream delayed?
Why is my stream delayed?
- High framerate (60+ FPS) increases processing time
- High resolution increases encoding time
- Insufficient CPU/GPU resources
- Slow encoder preset (Ultra Slow/P7)
- High bitrate with limited bandwidth
- Keyframe interval too long (>2 seconds)
- B-frames set too high (>2)
- Public streaming services add 5-15s inherent delay
- Network congestion or limited bandwidth
- Long geographic distance to server
- Client FPS lower than stream FPS causes buffering
- Poor client network connection
- Video player buffering settings
Generators and Advanced Features
What are generators?
What are generators?
- DMX Packet: Direct DMX control
- Static Value: Set channels to fixed values
- Strobe: Create strobe effects
- Fade: Smooth fade transitions
- Remap: Remap channel numbers
- Subtitle-based: SRT, LRC, ASS subtitle file control
- MIDIDMX: MIDI controller input
Can I run shows without a lighting console?
Can I run shows without a lighting console?
- Use SRT, LRC, or ASS files to script lighting cues
- Timeline-based control with precise timing
- Edit in text editors or subtitle tools
- Use MIDI controllers for real-time manual control
- Map MIDI notes/CC to DMX channels
- No lighting console software needed
- Use Static Value generators for fixed states
- Combine Fade and Strobe for dynamic effects
How do generators interact with ArtNet input?
How do generators interact with ArtNet input?
- ArtNet data is received
- Generators process/modify data in order
- Channel masking is applied
- Serializer converts to video output
- Generators can override ArtNet values on specific channels
- They can add to or modify existing data
- Processing order matters - first generator processes first
- Add automated effects on top of console control
- Fill in channels not used by your console
- Create backup content if ArtNet connection drops
What exporters does HNode support?
What exporters does HNode support?
- Sends DMX data to VRC-MIDIDMX
- Enables MIDI control in VRChat
- Useful for interactive lighting control in-world
IExporter interface, similar to custom serializers.Performance and Optimization
How many universes can HNode handle?
How many universes can HNode handle?
- CPU/GPU capabilities
- Available RAM
- Network bandwidth
- Some serializers are more efficient than others
- Binary/Ternary are generally lighter than VRSL
SerializeUniverseCount: Maximum universes to process- Lower values improve performance
- Only serialize what you actually need
How can I improve HNode performance?
How can I improve HNode performance?
- Lower target framerate (30 FPS instead of 60)
- Reduce output resolution (720p instead of 1080p)
- Limit
SerializeUniverseCountto only needed universes - Minimize active generators
- Use hardware encoding in OBS (NVIDIA NVENC, AMD VCE)
- Close unnecessary background applications
- Ensure adequate cooling for sustained performance
- Use dedicated GPU if available
- Disable Graphy statistics if not needed
- Reduce channel masking complexity
- Optimize generator order and count
Does HNode support GPU acceleration?
Does HNode support GPU acceleration?
- Unity rendering is GPU-accelerated
- Texture operations use GPU
- Spout2 uses GPU for efficient frame sharing
- ArtNet reception and parsing (CPU)
- DMX data processing (CPU)
- Serializer logic (mostly CPU)
Troubleshooting
Where can I find logs and error messages?
Where can I find logs and error messages?
- Check the Unity console in the editor
- Built versions output to log files
- Windows:
%USERPROFILE%\AppData\LocalLow\[CompanyName]\HNode\Player.log - Linux:
~/.config/unity3d/[CompanyName]/HNode/Player.log - macOS:
~/Library/Logs/[CompanyName]/HNode/Player.log
What should I do if nothing works?
What should I do if nothing works?
- HNode is running (check statistics panel for updates)
- ArtNet is being received (packet count increasing)
- Correct serializer selected for your world type
- Test Spout2 output (visible in OBS?)
- Test ArtNet reception (use console statistics)
- Test serializer output (visible pixels changing?)
- Review show configuration file
- Verify ArtNet address and port settings
- Confirm serializer settings
- Test with minimal configuration
- Remove all generators
- Disable channel masking
- Try default VRSL serializer
- Check the Common Issues page
- Review this FAQ
- Report bugs on GitHub Issues