Stash VR Plugin
December 30, 2025 · View on GitHub
A lightweight Stash plugin that adds WebXR VR support for modern VR headsets (Quest via Link/AirLink, Oculus Rift, Index, etc.). It enables immersive viewing directly within the Stash video player.
Features
- VR Button - Seamlessly integrated into the VideoJS control bar.
- WebXR Native - Built on modern WebXR APIs for broad hardware compatibility.
- 180° / 360° Support - Designed for immersive video formats (currently optimized for 180° SBS).
- Stereoscopic Rendering - Full 3D support using Side-By-Side (SBS) video textures.
- Zero Backend - Runs entirely in the browser; no complex installation or Python scripts required.
Installation
Method 1: Add Source to StashApp (Recommended)
- Go to Settings > Plugins.
- Click Sources (top right) -> Add Source.
- Enter the following details:
- Name: stashInteractive
- URL:
https://happykinkster.github.io/stashInteractive/main/index.yml
- Click Confirm.
- Go back to the Available plugins tab.
- Install stashVR.
Method 2: Manual Installation
- Locate Plugin Directory: Find your Stash plugins directory (e.g.,
C:\Users\<User>\.stash\plugins). - Copy Files: Copy the
stashVRfolder into thepluginsdirectory. - Reload Plugins: Go to Stash > Settings > System > Plugins and click "Reload Plugins".
Usage
- Connect Headset: Ensure your VR headset is connected to your PC (e.g., via Quest Link).
- Open Scene: Play a video in Stash.
- Toggle VR: Click the 🥽 VR button in the video control bar.
- Immersive View: Put on your headset. The video will be projected onto a hemispherical sphere with full head tracking.
- Exit: Click the button again or take off the headset and end the session in your browser.
Requirements
- Browsers: Chrome, Edge, or any Chromium-based browser with WebXR enabled.
- Hardware: Any VR headset supported by OpenXR.
- Orientation: This plugin currently optimizes for 180° SBS video.
Troubleshooting
- Button Persistent: If the button doesn't appear, ensure "WebXR" is enabled in your browser flags (
chrome://flags/#webxr-runtime). - Double Vision: Ensure your video is a Side-By-Side (SBS) format.
- Black Screen: Check the developer console (F12) for blocks on CDN loading (three.js is loaded from
cdn.jsdelivr.net).
Technical Details
The plugin operates by:
- Dynamically importing Three.js from a CDN.
- Hooking into the VideoJS player instance.
- Creating a
WebGLRendererwith XR support enabled. - Mapping the video element as a
VideoTextureonto aSphereGeometry. - Splitting the texture for stereoscopic depth in SBS mode.
License
MIT