-
-
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
- If the instance master leaves, sync correctly resumes under whoever becomes the new master — it no longer silently stops for the rest of the instance
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. Failed resolves (or non-HTTPS sources) now report a single, correct result instead of occasionally firing a second, contradictory callback.
VRCVideoCacher is a free tool that caches VRChat videos to local disk and fixes YouTube videos from failing to load. It works alongside any video player system.
Why use it:
- Fixes YouTube loading failures — works around bot detection that causes videos to fail
- Caches videos locally — repeat playback is instant, no re-downloading
- Auto-installs codecs — adds missing VP9, AV1, and AC-3 codecs for better compatibility
- Configurable storage — set resolution limits and storage caps
- URL blocking — block specific URLs with customizable redirects
Recommended for all VRChat users — video loading issues are common and this tool fixes most of them.
Fynn's fork extends VRCVideoCacher with additional features:
-
Video thumbnails — browse cached videos with thumbnail previews extracted via FFmpeg
-
Batch pre-caching — download multiple videos ahead of time with a URL list
-
Custom domain caching — cache videos from non-YouTube domains
-
Cookie management — setup wizard for logged-in YouTube playback
-
YouTube metadata — displays video titles in the cache browser via oEmbed API
- 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