stash
stash copied to clipboard
[Feature] DeoVR support
DeoVR is a popular player for VR content. Supporting the DeoVR API in stash would be a great improvement for DeoVR users, because they could browse the entire stash library in the player itself.
To-Do:
- API endpoints for DeoVR
- Serve all scene and file information, which is necessary for correct playback
- Serve lists of scenes, so users can browse their stash library in DeoVR
- Deep link (deovr://) in the scene view or scene player to open scenes in DeoVR
Optional:
- Serve projection specific information (180 SBS, rf52, …)
- Serve correction information
- Serve markers as timestamps
- Support images too
- Support interactive scenes
Things to consider:
- API docs: https://deovr.com/app/doc
- There is a PR already #2105
- Read the discussion in #2105
- #2660 requires detection of content projection too.
- Maybe some users want to watch 2D content in DeoVR
$100 bounty assigned from #2575/#1444 per discussion in #2708 .
I don't know the rules very well, but i'm very much personally invested in this and would like to bump it. Honestly, i'll look into how to place a bounty like the other guy did because whoever implements this will deserve the paycheck. Quick search shows someone that roughly got a workaround, but it's not polished and I haven't attempted it yet to see if I can even get it working https://github.com/stashapp/stash/discussions/1735
I don't know the rules very well, but i'm very much personally invested in this and would like to bump it. Honestly, i'll look into how to place a bounty like the other guy did because whoever implements this will deserve the paycheck. Quick search shows someone that roughly got a workaround, but it's not polished and I haven't attempted it yet to see if I can even get it working #1735
Bounties are handled through Open Collective.
How much of deovr are you looking to support? DeoVR supports single-video deep links (via deovr://<url>
) and a top-level multi-video browser (via /deovr
). I've implemented them both before for a NodeJS server, but I'm not terribly familiar with Go.
Unfortunately, the multi-video browser support leaves much to be desired since you have to dump all videos into a single file. That means there aren't a lot of options for filtering in DeoVR, but hopefully that will improve in the future.
The biggest issue I see is the need to introduce additional fields to Scene for all of the various capabilities:
- video corrections (IPD and vertical alignment offsets, brightness/contrast/saturation adjustments)
- FOV angle (i.e., 180, 190, 200, 360)
- stereo mode (i.e., sbs, sbsl, sbsr, sbs2l, sbs2r, abl, tb, tbl, abr, tbr, ab2l, tb2l, ab2r, tb2r, al, ar, irl, irr, icl, icr, cuv)
- screen type/projection (dome, sphere, fisheye, etc.)
- chroma keying (for passthrough videos)
It looks like stash-vr-companion
does that through tags, but that seems to be more of a hack as it doesn't make for a great experience when trying to edit a video and know what the valid options are. This would address #3637 as well.
This was covered in #3794, but I'm not wanting a bunch of DeoVR concepts embedded in the core system, so doing this via the plugin system is really the only viable approach. It will require further developments to the plugin infrastructure to even support something like this. Adding VR fields to VideoFile
s is something worth considering though.
It will require further developments to the plugin infrastructure to even support something like this.
A plugin could already hook scene updates and generate static files that could be consumed by DeoVR (assuming the relevant fields are stored with the scene). What a plugin would need then would be the ability to claim specific path patterns and redirect them to static file locations. It might also need the ability to hook parts of the web UI, but I'm not sure if Stash's userscript support sufficiently covers that.
Another benefit of additional VR fields would be that you could use this information to improve the generation of thumbnails, previews, and scrubber sprites by passing additional arguments to ffmpeg
to take a stereo 3D input and produce a flat mono output. For example, you could pass -vf stereo3d=sbs2l:ml
to convert a side-by-side stereo video to a mono thumbnail.
Adding VR fields to
VideoFile
s is something worth considering though.
Would you add them to VideoFile
or to Scene
itself? The VR fields are something you'll need to manually specify, and there really isn't much in the way of data entry for VideoFile
currently.
https://github.com/stashapp/stash/discussions/4777