Skip to main content

TSMPSetup

Use TSMPSetup to prepare a scene for TSMP.

It connects the encoder, decoder, codec, render textures, network IDs, and generated binding data. The same controller prefab and inspector work with or without the VRChat SDK.

When you need it​

Scene instances prepare themselves automatically after import and when the hierarchy or setup settings change. Preparation also runs before saving the scene, entering Play mode, and building. You do not need a conversion menu or a separate SDK-free setup step.

Automatic preparation handles changes such as:

  • Adding or removing a TSMPNetwork* component.
  • Changing which object should be encoded or decoded.
  • Replacing the encoder output render texture.
  • Replacing the decoder source texture.
  • Changing codec selection.
  • Changing manual network IDs.
  • Moving TSMP components into or out of prefabs.

If the encoded texture changes but receiver objects do not move, check the Bindings tab and the decoder source. Apply Setup is available as an optional manual refresh, not a required step after every edit.

Common workflow​

  1. Drag TSMPController.prefab into the scene.
  2. Assign texture and scene references in the Reference tab.
  3. Confirm Luma4 is selected in the Codec tab.
  4. Add TSMP sync components to objects.
  5. Check that the expected objects appear in the Bindings tab.
  6. Enter Play mode or test in VRChat.
  7. Watch TSMPDebugCanvas while moving or interacting with synced objects.

Tabs​

TabUse it for
ReferenceAssign encoder, decoder, textures, render textures, and shared scene references.
CodecSelect the Luma4 handler, view codec package metadata, and refresh codec discovery.
BindingsReview synchronized behaviours, generated bindings, and network IDs.
DebugRun manual encode actions and inspect setup diagnostics.

What to assign first​

The prefab supplies encoder, decoder, codec, and work-texture references automatically. Check or replace these fields for your scene:

Field groupWhat to assign
EncoderThe TSMPEncoder in the controller prefab.
DecoderThe TSMPDecoder in the controller prefab, or your receiver decoder.
Encoder outputThe render texture that will be captured or displayed.
Decoder sourceThe texture that contains the received TSMP image.
Payload byte textureDecoder work texture used while reading payload bytes.
CodecThe Luma4 handler.

If the decoder is receiving from OBS or another capture path, Decoder source should be that captured texture, not the raw encoder output texture.

The default controller uses its encoder output as the decoder source for a local test. Installing the VRChat SDK does not change this setting. Assign the received image explicitly when setting up an external stream.

Package render textures and materials are templates. Each controller gets editable copies in Assets/TSMPGenerated; keep these generated assets with the scene in version control. Duplicating a controller gives it separate work textures. User-assigned textures outside the package are retained.

Apply Setup​

Automatic preparation and the optional Apply Setup button update the same runtime data:

  • Assigns selected codec references.
  • Calculates frame layout and payload capacity.
  • Resizes TSMP render textures when enabled.
  • Builds encoder and decoder binding tables.
  • Assigns or refreshes network IDs.
  • Configures codec decode materials.
  • Creates runtime codec instances when needed.

After applying, check the Bindings tab. If a component you expected to sync is not listed, the encoder will not send it.

Safe defaults​

Start with:

  • Automatic codec discovery enabled.
  • Luma4 selected.
  • Keep the controller in the scene so its setup references can be prepared.
  • Generated network IDs.
  • Default block size and sample size.
  • TSMPDebugCanvas visible during tests.

Lock down manual IDs and custom references only after the basic stream works.

Common setup mistakes​

SymptomLikely setup issue
Encoder runs but payload=0No enabled TSMP network component was found within the configured binding scope.
Decoder sees frames but applies nothingBindings do not match receiver components or receive interpolation is None.
Luma4 is missingCodec package or catalog was not imported/discovered.
Data disappears after adding playersPayload capacity is too small for the new data set.
Editor output uses old codecCheck the selected codec, the encoder reference, and whether you are viewing this controller's output texture.