| Summary: An extended fork of Stash-VR introducing two major features: Multi-part scene expansion (perfect for JAV) which splits scenes into multiple tiles in your VR player, and a Review Notes Web UI that lets you live-log timestamps, feedback, and global flags while watching a scene in VR. | |
| Repository: GitHub - Zalunda/stash-vr: Watch your stash library in VR. · GitHub | |
| Releases: Releases · Zalunda/stash-vr · GitHub |
Hey everyone! It seem to be the Stash-VR fork week because I’ve also been working on a custom fork of Stash-VR
to solve a couple of specific workflow issues I had, primarily around organizing multi-part JAVs and creating a very useful
workflow for reviewing funscripts and subtitles entirely within VR. This is something that I always wished was available
when testing my own scripts/subtitles or review other people’s scripts.
Here is a breakdown of the two main features included in this fork (and a useful Stash plugin).
1. Multi-part Scene Expansion
Tested & works in: HereSphere & DeoVR
By default in Stash, if you don’t merge multi-part JAV files, you end up with multiple identical tiles in the UI (e.g., three tiles all named SIVR-500), making it impossible to know which is part A, B, or C. However, if you decide to merge them into a single scene, you face a new problem: VR players will only let you play the primary file.
I chose to fix this second scenario. You can keep your scenes merged cleanly in Stash, but this fork will expand them on the fly in the VR player, displaying each file as its own independent tile with the correct label appended (e.g., [A], [B]).
(Tip: This feature requires your files to be merged into a single scene in Stash. If your scenes are not merged yet, check out Section 3 below for a custom plugin that automates the process)
- How it works: When enabled, Stash-VR will look at scenes with multiple files attached and smartly extract the differing labels from the filenames (e.g.,
CD1,CD2, orA,B) to use on the VR tiles. - Smart Resolution Detection: If the attached files have nearly identical durations (<= 1.0 second difference), the app assumes they are just different resolutions/encodings of the same video and will not split them, keeping your grid clean.
- How to use: Merge your multi-part files into a single scene in Stash. Then, set the environment variable
ENABLE_PARTS_EXPANSION=truein your Stash-VR config.
(Technical Note: To make playback actually work for non-primary files, Stash-VR mutates the “Primary File” in your Stash database when you hit play on a specific part. This change is permanent (well, until you click on a different part of the same scene). Because this is opt-in, it won’t affect users who rely on strict primary file assignments.
2. Review Notes Web UI
Tested & works in: HereSphere
A companion Web UI designed for funscript/subtitles creators, reviewers, or curators. It allows you to log timestamps, ranges, and feedback directly from HereSphere’s built-in web browser while watching the video.
How to use it:
-
Add .review.json files to the
/configfolder of stash-vr.
For example:
Funscript.review.json
Subitle.review.json
SourceVideo.review.json
Scene.review.json -
Tag the Scene: In Stash
http://<your-stash-ip>:9999/graphql(on your PC or VR browser), add your configured trigger tag to the scene you want to review (ex. “ReviewFunscript”). I suggest creating a Scene Filter for those tags too. (Note: You can skip this step and remove this prerequisite if you configure your trigger to["*"]to allow reviews on all scenes). -
Open the Grid: Open the Stash-VR grid in HereSphere (
http://<your-stash-vr-ip>:9666/heresphere). -
Play: Navigate to your scene and click the tile to start playing it.
-
Open the UI: When you want to add notes, open HereSphere’s built-in web browser and navigate to
http://<your-stash-vr-ip>:9666/review. -
Log Notes: Use the buttons you configured:
- Point: Single-click buttons (e.g., “Missing Subtitle”) mark an exact timestamp.
- Range: Click
📍 Mark [to start an event, and] Closeto end it (e.g., “Bad Sync”). If you only click Mark, it safely defaults to a single point.
-
Global Flags: At the end of your viewing, you can open the review page one last time to select any “Global Flags” (like overall rating, translation quality, etc.) related to the whole scene.
-
Tip - Customize your UI (Edit Mode): You can click the
Edit Mode toggle in the top right of the Review page to hide specific categories or buttons if you wish. -
Minor annoyance warning: When you use HereSphere’s built-in web browser to open the Review UI, navigating away from the /herespheregrid endpoint causes HereSphere to reset its state. This means when you go back to/herespherelater on, you will have to “find” the scene again to play the other parts.
The Output & Saving:
The system continuously saves your progress on every change, generating a cleanly formatted .txt file in your review-notes folder. This means you don’t have to worry about losing a 1-hour review if HereSphere crashes or something. It logs exactly what you actually played (ignoring skips/jumps), your timestamped notes, and a feedback summary.
Note on manual edits: Because the .txt file updates automatically if you resume watching the scene, any manual edits you make to this text file might be overwritten. If you are preparing a ‘final report’, you should copy the contents to a different file.
Example Review Output (.txt)
Scene: SIVR-001
Played:
A: 00:00:00.0-00:12:05.8 [00:12:05.8] FAST-FORWARDED
A: 00:12:05.8-00:13:36.6 [00:01:30.8] WATCHED
A: 00:13:36.6-00:22:24.4 [00:08:47.9] SKIPPED
A: 00:22:24.4-00:22:38.8 [00:00:14.4] WATCHED
A: 00:22:38.8-00:24:49.6 [00:02:10.8] FAST-FORWARDED
A: 00:24:49.6-00:24:57.0 [00:00:07.4] WATCHED
A: 00:24:57.0-00:39:22.4 [00:14:25.4] NOT WATCHED
B: 00:00:00.0-00:31:24.7 [00:31:24.7] NOT WATCHED
========================================
TIMELINE LOG
========================================
A: 00:12:29.0 [SUB] Missing Subtitle
A: 00:12:33.5->00:12:35.1 [SUB] Incoherent/Confusing
A: 00:12:42.1 [FS] Harsh Spike/repositionning
A: 00:12:47.6 [SRC] Immersion Broken
========================================
FEEDBACK SUMMARY
========================================
--- OTHER NOTES ---
[FS] Harsh Spike/repositionning:
- A: 00:12:42.1
[SRC] Immersion Broken:
- A: 00:12:47.6
[SUB] Incoherent/Confusing:
- A: 00:12:33.5->00:12:35.1
[SUB] Missing Subtitle:
- A: 00:12:29.0
(It also generates a raw.json file. This acts as the local “database” for your review session. If you stop watching and come back the next day, this file restores your exact session state so you can pick up right where you left off).
3. Automating Multi-part Merges (Scene Merger Plugin)
I also created a Stash plugin called Scene Merger that automatically merges all scenes identified to the same stashdb.org ID.
Installation & Setup
Installation (Docker & Executables)
You can run this using Docker (zalunda/stash-vr:latest) or by downloading the compiled executables (Windows, Linux, macOS) from the GitHub releases page.
Docker Compose (docker-compose.yml):
services:
stash-vr:
image: zalunda/stash-vr:latest
container_name: stash-vr
ports:
- "9666:9666"
environment:
- STASH_GRAPHQL_URL=http://<YOUR_STASH_IP>:9999/graphql
- ENABLE_PARTS_EXPANSION=true
- CONFIG_PATH=/config
- REVIEW_NOTES_PATH=/review-notes
volumes:
- ./config:/config
- ./review-notes:/review-notes
Quick Start Windows script (start.bat):
If you want to set this up quickly on Windows with Docker, and be able to refresh it in the future, place this in a .bat file next to your docker-compose.yml:
mkdir config
mkdir review-notes
docker compose up --build -d --pull always
pause
Installation and first run of the Scene Merger plugin
You will need to add my custom source, install the plugin, and run it manually once to merge all existing scenes in your library. After that, the plugin will automatically merge new scenes as they are identified.
Step 1: Add the Source
Go to Settings > Plugins and click the Add source button.
Step 2: Configure the Source
Fill in the details exactly as follows:
- Name: Scene Merger
- Source URL: https://github.com/Zalunda/CommunityScripts/raw/main/index.yml
- Local path: Zalunda
Click Confirm.
Step 3: Install the Plugin
Under the Available Plugins list, expand the new source, check the box next to Scene Merger, and click Install.
Step 4: Run the initial merge
To merge your existing library, go to Settings > Tasks. Scroll down to the Plugin Tasks section, open the Scene Merger tab, and click Run AutoMerge (EXECUTE).
Note: You can choose to start with a “DRY RUN” first, to be sure.
That’s it! Your existing multi-part scenes are now merged, and the plugin will handle future scenes automatically.






