Watch your Stash library in VR for that full immersion effect.
Stash-VR bridges your Stash instance and VR video player allowing you to browse, play and manage your scenes using the video players native VR UI.
It's lightweight, optionally configurable and has support for two-way sync.
Install Stash-VR, point it to your Stash instance and point your VR video player to Stash-VR.
(Traditional flat/2d videos as well as VR videos are supported.)
- HereSphere (two-way sync)
- DeoVR
- Browse, play and manage videos from your Stash library using native VR UI of supported video players.
- Customizations from your Stash front page and saved filters.
- Heatmaps for interactive scenes generated by Stash.
- Transcoding endpoints to your videos served by Stash
- HereSphere
- Two-way sync of studio, tags, performers, rating, favorites, markers
- Increment o-count
- Toggle organized flag
- Generate categorized tags
- Delete scenes
- Funscript
- DeoVR
- Markers
Container images available at docker hub.
For details or docker compose see docker_compose.yml.
After installation open your endpoint (e.g. http://localhost:9666
) in a regular browser to verify your setup.
docker run --name=stash-vr -e STASH_GRAPHQL_URL=http://localhost:9999/graphql -e STASH_API_KEY=XXX -p 9666:9666 ofl0w/stash-vr:latest
Stash-VR listens on port 9666
by default. To change local port, use docker port binding, e.g. -p 9000:9666
, or set env. LISTEN_ADDRESS=:9000
to listen on port 9000
instead.
Download and extract a binary for your platform. Run stash-vr -h
to display help.
Example: Connect to Stash running on localhost:9999 with api key XXX and set Stash-VR to listen on port 9000:
stash-vr --STASH_GRAPHQL_URL=http://localhost:9999/graphql --STASH_API_KEY=XXX --LISTEN_ADDRESS=:9000
STASH_GRAPHQL_URL
- Required
- Url to your Stash graphql - something like
http://<stash.host>:<9999>/graphql
.
STASH_API_KEY
- Api key to your Stash if it's using authentication, otherwise not required.
More (click to expand)
ALLOW_SYNC_MARKERS
- Default:
false
- Enable sync of Marker from HereSphere NOTE
- Default:
FAVORITE_TAG
- Default:
FAVORITE
- Name of tag in Stash to hold scenes marked as favorites (will be created if not present).
- Default:
FILTERS
- Default: Empty
- Narrow the selection of filters to show by setting one of below values:
frontpage
- Show only filters found on Stash front page.
- Comma separated list of filter ids, e.g.
1,5,12
- Show only filters from this list.
- Empty
- Show all saved filters.
DISABLE_HEATMAP
- Default:
false
- Disable display of funscript heatmaps. Shown by default if available, as a small bar on the preview thumbnail.
- Default:
HEATMAP_HEIGHT_PX
- Default: 0 (use height of heatmap)
- Manually set height of all heatmaps. If not set, height of the heatmap retrieved from Stash will be used, currently 15 by default.
DISABLE_PLAY_COUNT
- Default:
false
- Disable incrementing Stash play count for scenes. Will otherwise send request to Stash to increment play count when video is played in HereSphere.
- Default:
FORCE_HTTPS
- Default:
false
- Force Stash-VR to use HTTPS. Useful as a last resort attempt if you're having issues with Stash-VR behind a reverse proxy.
- Default:
Browse to http://<host>:9666
using a supported video player. You'll be presented with your library within their respective native UI.
To enable two-way sync with Stash the relevant toggles (Overwrite tags
etc.) in the cogwheel at the bottom right of preview view in HereSphere needs to be on.
Scene metadata is handled using Video Tags
in HereSphere.
To tag a scene open it in HereSphere and click Video Tags
above the seekbar.
On any track insert a new tag and prefix it with #:
i.e. #:MusicVideo
.
This will create the tag MusicVideo
in Stash if not already present and apply it to your scene. Removing a tag in HereSphere will untag the scene in Stash.
Same workflow goes for setting studio and performers but with different prefixes according to below:
Metadata | Prefix | Alias |
---|---|---|
Tags | #: |
Tag: |
Studio | $: |
Studio: |
Performers | @: |
Performer: |
(Both Stash and HereSphere use the word tag but they use it differently. Tags in heresphere are akin to Markers in Stash)
Markers in Stash need a primary tag. Marker title is optional.
To create a marker using HereSphere play the target scene and create a "tag" on any track using Video Tags
.
The naming format is:
<tag>:<title>
will create a Marker in Stash titled<title>
with the primary tag<tag>
<tag>
will create a Marker in Stash with primary tag<tag>
and no title.
Set the start time using HereSphere controls. Tags (markers) in HereSphere has support for both a start and end time. Stash currently defines Markers as having a start time only. This means the end time set in HereSphere will be ignored.
Enable sync of markers by setting ALLOW_SYNC_MARKERS=true
but make sure you've also read the caveat.
When the favorite-feature of HereSphere is first used Stash-VR will create a tag in Stash named according to FAVORITE_TAG
(set in docker env., defaults to FAVORITE
) and apply that tag to your scene.
Tip: Create a filter using that tag, so it shows up in HereSphere for quick access to favorites.
Ratings set in HereSphere will be converted to its equivalent in Stash (4.5 stars => 90).
Increment o-count by adding a tag named !O
(case-insensitive) in Video Tags
.
Current o-count is shown as O:<count>
. It is also visible in the preview list on the thumbnail by the lower right heart.
Toggle organized flag by adding a tag named !Org
(case-insensitive) in Video Tags
.
Current state is shown as Org:<true/false>
Both DeoVR and HereSphere has algorithms to automatically detect and handle VR videos. It's not foolproof and to manually configure the players with custom layout/mesh-settings you can tag your scenes in Stash as follows:
- Mesh:
DOME
180° equirectangularSPHERE
360° equirectangularFISHEYE
180° fisheyeMKX200
200° fisheyeRF52
190° Canon fisheyeCUBEMAP
Cubemap (lacks support in DeoVR?)EAC
Equi-Angular Cubemap (lacks support in DeoVR?)
- Layout:
SBS
Side-by-side (Default)TB
Top-bottom
If a mesh is provided but no layout then default layout SBS
will be used.
Most common combination is DOME
+SBS
meaning most VR videos only need the DOME
tag.
- Premade Filters (i.e. Recently Released Scenes etc.) from Stash front page are not supported.
- Tip: If you really want such filters to show they can easily be recreated and saved using regular filters in Stash.
When using Video Tags
in HereSphere to edit Markers Stash-VR will delete and (re)create them on updates.
There currently is no support for correlating the markers (tags) in HereSphere to a Marker in Stash.
!! Any metadata, besides the primary tag and title, related to a marker will NOT be retained !!
(id, preview, secondary tags and created/updated time). If you're not using these fields anyway you probably won't notice the difference.
DeoVR/HereSphere both seem to have limits and struggle/crash when too many videos are provided than they can handle.
- For HereSphere the limit seems to be around 10k unique scenes.
- Fixed in HereSphere v0.7.3?
- Tip: If you have a VERY LARGE library and your player is struggling to load them all, try explicitly setting env. var.
FILTERS
with a list of filter ids such that the total amount of videos are lowered to a "reasonable" amount.
When the index page of Stash-VR is loaded Stash-VR will immediately respond with a cached version. At the same time Stash-VR will request the latest data and store it in the cache for the next request. This means if changes are made in Stash and the player refreshed, it will receive the cached version built during the last (previous) request. Just refresh again and the player should receive the latest changes. In other words, refresh twice.
Stash-VR | Stash |
---|---|
v0.7.x | v0.23.x |
v0.6.x | v0.18.x |
v0.5.x | v0.17.x |
v0.4.x | v0.16.x |
If you have issues arising from running an older version of Stash the recommended path is to upgrade Stash before attempting a fix.