Notice
If you are the author of this project, you can claim this topic by clicking > at the bottom of this post. Select Something Else as a reason and leave a comment explaining you want to claim the topic. Include a link to your git profile or pull request showing ownership of the project.
![]() |
Summary | 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. |
![]() |
Repository | https://github.com/o-fl0w/stash-vr |
Stash-VR
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.)
Supported video players
- HereSphere (two-way sync)
- DeoVR
Features
- Browse, play and manage videos from your Stash library using the 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 tags, rating, markers
- Increment o-count/play count
- Generate categorized tags, studios, performers
- Delete scenes
- Funscript
- Subtitles
- DeoVR
- Markers(?)
Installation
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
docker run --name=stash-vr -e STASH_GRAPHQL_URL=http://stash-host: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.
Binaries
Download and extract a binary for your platform. Run stash-vr -h
to display help.
Example: Connect to Stash running on stash-host:9999 with api key XXX and set Stash-VR to listen on port 9000:
stash-vr --STASH_GRAPHQL_URL=http://stash-host:9999/graphql --STASH_API_KEY=XXX --LISTEN_ADDRESS=:9000
Configuration
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)
FILTERS
- Default: Empty (show all saved filters)
- 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
- To find ids of your saved filter you can run the following graphql query in Stash playground (http://stash-host:9999/playground
{findSavedFilters(mode: SCENES) {id name}}
- Empty
- Show all saved filters.
FAVORITE_TAG
- Default:
FAVORITE
- Name of tag in Stash to hold scenes marked as favorites (will be created if not present).
- 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:
Usage
Browse to http://<host>:9666
using a supported video player. You’ll be presented with your library within their respective native UI.
HereSphere
Two-way sync
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.
Manage metadata
Scene metadata is handled using Video Tags
in HereSphere. Both for presentation and making changes.
- Stash tags
#:<Name>
- Adding or removing tags in this #:format in HereSphere will sync changes to Stash
- Tag in Stash is created if necessary.
- Studio
Studio:<Name>
- Performers
@:<Name>
- Groups
%:<Name>
- Play count
Played:<Count>
- Automatically incremented
- To disable, set
DISABLE_PLAY_COUNT=true
- To disable, set
- O-Count
O-Count:<Count>
- To increment, add a tag
/o
- Organized
Organized:true
- To set organized, add a tag
/org
- To unset organized, add a tag
/org-
- Markers
- Everything else is treated as a marker
<Primary Tag Name>
(empty title)<Primary Tag Name>:<Title>
- Set the start and end time using HereSphere controls.
- Changes in HereSphere will sync to Stash
Changes reflect in HereSphere when videos are re-opened.
Favorites
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.
Rating
Ratings set in HereSphere will be converted to its equivalent in Stash (4.5 stars => 90).
Known issues/Missing features
Unsupported filter types
- 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.
HereSphere sync of markers
When using Video Tags
in HereSphere to edit markers Stash-VR will no longer delete and (re)create them on updates.
We use the rating field of a marker in HereSphere to transport the id for correlating the markers in HereSphere to a marker in Stash, hacky.
Scene count limits (More than 10.000 links generated)
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.
Missing thumbnail images in DeoVR
DeoVR won’t show images served through HTTP - seems they only allow HTTPS. See From DeoVR 13.17 on thumbnails are not displayed anymore · Issue #1705 · xbapps/xbvr · GitHub
Missing thumbnail images in HereSphere
HereSphere doesn’t support WEBP images, which is sometimes fetched when scraping from Stash. A workaround is to manually regenerate a cover using Stash for those scenes.
Troubleshooting
- If your Stash requires an api key, make sure you provide it to Stash-VR
- Make sure Stash-VR has network access to Stash
- Make sure your VR-headset has network access to both Stash and Stash-VR
- Try explicitly setting
LISTEN_ADDRESS
to the external (accessible by headset) ip:port of Stash-VR
- Try explicitly setting