Skip to main content
HNode uses Spout2 for high-performance texture sharing on Windows. Spout allows zero-copy GPU texture sharing between applications, enabling real-time video routing without CPU overhead.

What is Spout?

Spout is a Windows-only system for sharing textures between applications via shared GPU memory. It provides:
  • Zero-copy texture sharing: Textures stay in GPU memory
  • Real-time performance: No encoding/decoding overhead
  • Multiple senders/receivers: Many applications can share textures simultaneously
  • Resolution independent: Automatically handles resolution changes

Spout Output

HNode’s Spout output sends rendered DMX textures to other applications like OBS Studio.

Configuration

The Spout output name is configured in your show configuration:
spoutOutputName: HNode Output
1

Set Output Name

In the HNode interface or your .shwcfg file, set the spoutOutputName field to a unique identifier.
Use descriptive names like “HNode VRSL Output” or “HNode Club Lights” if running multiple instances.
2

Configure Output Resolution

Set your desired output resolution in the show configuration:
outputResolution:
  width: 1920
  height: 1080
The output resolution determines the size of the texture sent via Spout.
3

Verify Output

  1. Start HNode
  2. Open a Spout receiver (like OBS with Spout plugin)
  3. Look for your Spout sender name in the receiver’s sender list
If the sender doesn’t appear, you may need to restart your PC for Spout to register new senders.

Output Resolution Guidelines

Standard HD

1920x1080Best for most use cases. Provides good quality while maintaining performance.

High Resolution

2560x1440 or 3840x2160Use for high-density pixel mappings or large-scale displays. Requires powerful GPU.

Low Resolution

1280x720 or 1024x768Use for simple setups or when performance is critical.

Custom Aspect

1920x480, 2048x1024, etc.Match your specific gridnode or display requirements.

Spout Input

HNode can receive textures from other applications via Spout input, enabling advanced workflows like:
  • Deserialization of textures from other HNode instances
  • Processing pre-rendered content
  • Transcoding between different serializer formats

Configuration

The Spout input name is configured in your show configuration:
spoutInputName: HNode Input
1

Set Input Name

In your .shwcfg file, set the spoutInputName to match the sender you want to receive from:
spoutInputName: Resolume Output
2

Configure Input Resolution

Set the expected input resolution:
inputResolution:
  width: 1920
  height: 1080
The input resolution should match the sender’s output resolution for best results.
3

Enable Deserializer

Configure a deserializer that matches the format of the incoming texture:
deserializer: !VRSL
  gammaCorrection: true
  rgbGridMode: false
  outputConfig: HorizontalTop
4

Enable Transcoding (Optional)

If you want to convert the input format to a different output format:
transcode: true
transcodeUniverseCount: 3
This will deserialize the input using the deserializer and re-serialize using the serializer.

Use Cases for Spout Input

Convert between different DMX serialization formats:
  1. Set deserializer to the input format (e.g., VRSL)
  2. Set serializer to the output format (e.g., Binary)
  3. Enable transcode: true
  4. HNode will convert the incoming VRSL texture to Binary format
This is useful when you have content in one format but need to output in another for compatibility.
Chain multiple HNode instances together:
  • Instance 1: Receives ArtNet, outputs VRSL via Spout
  • Instance 2: Receives Instance 1’s Spout output, applies effects, outputs Binary
  • Instance 3: Receives Instance 2’s output, sends to OBS
Each instance can have different serializers, generators, and exporters.
Process pre-rendered DMX textures:
  • Render DMX textures in a VJ application like Resolume
  • Send via Spout to HNode
  • HNode deserializes and optionally processes the texture
  • Output to MIDIDMX or another Spout sender
Create a test pattern generator:
  • One HNode instance generates test patterns (using generators)
  • Another instance receives the patterns via Spout
  • Use for testing serializer implementations without ArtNet

Transcoding Workflow

Transcoding allows you to convert between different serializer formats in real-time.
1

Configure Deserializer

Set the input format to match your incoming Spout texture:
deserializer: !VRSL
  gammaCorrection: true
  rgbGridMode: false
2

Configure Serializer

Set the output format you want to produce:
serializer: !Binary
  blockSize: 1
3

Enable Transcoding

transcode: true
transcodeUniverseCount: 3
The transcodeUniverseCount limits how many universes are transcoded, which can improve performance if you don’t need all universes.
4

Set Input Source

Point the Spout input to your source:
spoutInputName: Source Application Output
5

Test Transcoding

  1. Start the source application (must be sending Spout)
  2. Start HNode with transcoding configuration
  3. Verify the output matches the expected format
  4. Use OBS to capture the transcoded output

Performance Considerations

Resolution Matching

Match input and output resolutions when possible to avoid unnecessary scaling.

Universe Limits

Use transcodeUniverseCount and serializeUniverseCount to limit processing to only the universes you need.

GPU Usage

Spout uses GPU memory. Monitor GPU memory usage when running multiple instances or high resolutions.

Framerate

Set targetFramerate appropriately. Higher framerates increase GPU load but provide smoother output.

Troubleshooting

  • Ensure HNode is running and outputting
  • Restart the receiving application
  • Restart your PC (Spout registration sometimes requires a reboot)
  • Check Windows Graphics settings haven’t disabled GPU sharing
  • Verify the input resolution matches the sender’s output
  • Check the deserializer format matches the incoming texture format
  • Ensure the sender is actively transmitting (not paused or stopped)
  • Try disabling gamma correction in the deserializer
  • Lower the transcodeUniverseCount
  • Reduce input and output resolutions
  • Lower the target framerate
  • Close other GPU-intensive applications
Ensure spoutInputName and spoutOutputName are different:
spoutInputName: HNode Input
spoutOutputName: HNode Output
Using the same name for both will cause conflicts.

Advanced: Multiple HNode Instances

You can run multiple HNode instances simultaneously for complex workflows:
# Instance 1: ArtNet Receiver
spoutOutputName: HNode Primary Output
serializer: !VRSL
# ... receives ArtNet, outputs VRSL via Spout

# Instance 2: Format Converter
spoutInputName: HNode Primary Output
spoutOutputName: HNode Binary Output
deserializer: !VRSL
serializer: !Binary
transcode: true
# ... receives from Instance 1, converts to Binary

# Instance 3: MIDIDMX Sender
spoutInputName: HNode Binary Output
deserializer: !Binary
exporters:
  - !MIDIDMX
    midiDevice: loopMIDI Port
# ... receives from Instance 2, sends to VRChat
Each instance requires separate configuration files and will use additional system resources.

Next Steps

Build docs developers (and LLMs) love