-
-
Notifications
You must be signed in to change notification settings - Fork 0
StrangeVideo
StrangeVideo is the video player management component for Strange Toolkit. It provides a unified interface for 6 popular VRChat video player systems with inline settings, automatic wiring, and built-in sync for Unity video players.
Use StrangeVideo for:
- Managing any video player from one place
- Quick access to common player settings without navigating deep hierarchies
- Automatic AudioLink wiring
- Built-in timestamp sync for Unity video players
| Player | Package | Best For |
|---|---|---|
| ProTV | dev.architech.protv |
Big theatrical spaces or event worlds with polished controls, playlists, and host/admin support |
| iwaSync3 | dev.okunomiya.iwasync3 |
Performance-focused worlds needing synced playback — lightweight and efficient |
| USharpVideo | com.merlinvr.usharpvideo |
Straightforward video with minimal setup — low overhead, ideal for basic screens |
| VizVid | dev.jlchnto.vrczuid |
Community spaces with mixed media, watch-together features, and modular design |
| YamaPlayer | net.yama.yamaplayer |
Advanced UI with playlists, queues, and streaming — great for lounges and social hubs |
| VideoTXL | com.texelsaur.video |
Solid synced playback with flexible control options — reliable group watching without heavy cost |
All players are optional. Strange Toolkit detects which are installed and only shows relevant options.
| Property | Type | Description |
|---|---|---|
| primaryVideoPlayer | BaseVRCVideoPlayer | The video player component to manage |
| strangeHub | StrangeHub | Reference to the scene's StrangeHub for sync |
| useBuiltInSync | bool | Enable built-in timestamp sync (disable for players with their own sync like ProTV) |
| clientSyncThreshold | float | Time difference (seconds) before correcting client playback (default: 0.5) |
| masterSyncThreshold | float | Time difference (seconds) before master broadcasts new timestamp (default: 2.0) |
| syncCheckInterval | float | How often (seconds) the master checks sync state (default: 1.0) |
- Open Window > Strange Toolkit Dashboard
- Go to the Visuals tab
- In the Video section, select a player from the dropdown and click Add
- The status panel shows what needs wiring — click Fix buttons to auto-connect everything
- Adjust player settings inline without leaving the dashboard
- Add a video player prefab to your scene
- Add a StrangeVideo component to any GameObject
- Assign the video player to
primaryVideoPlayer - Assign your StrangeHub to
strangeHub - Set
useBuiltInSynctofalseif your player handles its own sync (ProTV, iwaSync3, etc.)
For Unity's built-in video player (or players without their own sync), StrangeVideo provides master-driven timestamp synchronization.
- The master periodically checks the video timestamp
- If the timestamp has drifted beyond
masterSyncThreshold, it writes the current time toStrangeHub.videoTimestampand callsRequestSerialization() - Clients compare their playback time against the synced timestamp
- If the difference exceeds
clientSyncThreshold, the client seeks to the correct time - On late join, the master immediately broadcasts the current timestamp
Set useBuiltInSync = false when using:
- ProTV — has its own sync system
- iwaSync3 — has its own sync system
- USharpVideo — has its own sync system
- VizVid — has its own sync system
- YamaPlayer — has its own sync system
- VideoTXL — has its own sync system
The dashboard auto-sets this when wiring a third-party player.
The StrangeVideo inspector provides:
- Open Dashboard button — jumps to the Visuals tab video workflow
- Video Players — lists all detected video players in scene with select buttons
- TV Settings — inline settings for the active player (varies by player type)
- Sync Settings — built-in sync configuration
- AudioLink — AudioLink wiring status and controls
- Show Raw Data — debug foldout showing all serialized fields
When AVPro Video is present, StrangeVideo includes a play mode shim that enables in-editor video playback. This allows testing video URLs directly in the Unity editor without uploading to VRChat.
The shim supports URL resolution via yt-dlp for YouTube and other streaming URLs.
- ProTV — best for event worlds, theatrical spaces, and host/admin control
- VideoTXL — reliable synced playback with flexible options, good for group watching
- YamaPlayer — advanced UI with playlists, queues, and streaming for social hubs
- VizVid — modular design for community spaces with mixed media
- USharpVideo — minimal setup, low overhead, ideal for basic video screens
- iwaSync3 — lightweight and efficient, best when performance matters most
- Keep
clientSyncThresholdlow (0.5s) for tight sync - Keep
masterSyncThresholdhigher (2.0s) to reduce network traffic - Increase
syncCheckIntervalfor less frequent sync checks
- Wire AudioLink through the dashboard for automatic setup
- The dashboard connects AudioLink to the player's audio source automatically