Compares the scenes inside a Stash Group (Movie) against the scene listing on AdultDVDEmpire, so you can see at a glance which scenes you own and which you're still missing.
| Requirement | Notes |
|---|---|
| Stash v0.25+ | Plugin API + patch system |
| Python 3.10+ | Backend scraper |
requests, beautifulsoup4, stashapp-tools |
pip install -r requirements.txt |
-
Install via manager or manually pasting the folder into Stash's plugin directory. Installation documentation found here: https://discourse.stashapp.cc/t/how-to-install-a-plugin/1015
-
Edit
config.jsonwith your settings (see Configuration below). -
In Stash → Settings → Plugins, click Reload Plugins. You should see Stash Group ADVE Movie Checker appear in the list.
-
Open any Group page — a 🎬 Scene Checker button will appear below the Edit/Delete buttons.
All settings live in config.json inside the plugin folder. Open it in any
text editor and fill in the three values:
{
"adve_session_cookie": "ageConfirmed=true; defaults={}; etoken=PASTE_YOUR_ETOKEN_HERE"
}| Key | Description |
|---|---|
adve_session_cookie |
Your AdultDVDEmpire session cookie string. See instructions below. |
The plugin needs a valid session cookie to access ADVE movie pages.
You only need to do this once — the etoken cookie persists until you log out.
-
Open your browser and log into adultdvdempire.com.
-
Open Developer Tools:
- Chrome / Edge: press
F12orCtrl+Shift+I(Mac:Cmd+Option+I) - Firefox: press
F12orCtrl+Shift+I
- Chrome / Edge: press
-
Click the Application tab (Chrome/Edge) or Storage tab (Firefox).
-
In the left sidebar, expand Cookies and click
https://www.adultdvdempire.com. -
You will see a table of cookies. Locate these three:
Cookie name Example value ageConfirmedtruedefaults{}etokena1=abc123...&a2=def456...&a3=789... -
Build the cookie string by combining all three in this format:
ageConfirmed=true; defaults={}; etoken=PASTE_FULL_ETOKEN_VALUE_HEREPaste the full value of
etokenexactly as shown in DevTools — it is a long string containinga1=,a2=, anda3=parts. -
Paste the complete string as the value of
adve_session_cookieinconfig.jsonand save the file. No plugin reload required.
Note: If the scraper ever stops getting through to ADVE, your
etokenmay have expired. Repeat steps 1–7 with a freshly logged-in session.
- Open any Group (movie) page in Stash.
- Click the 🎬 Scene Checker button below the Edit/Delete buttons. The panel expands showing a Check Scenes button.
- The Group must have an
adultdvdempire.comURL in its URL list. Click Check Scenes — the plugin scrapes ADVE and compares the results against scenes already linked to this Group in Stash. - Use the All / Missing / In Library filter buttons to narrow the view.
- Click ✕ to collapse the panel back to button mode. Results are saved to disk and will restore automatically the next time you open the page.
If the Group does not have an adultdvdempire.com URL in its URL list, the
panel shows a warning. Edit the Group, paste the ADVE movie page URL into
the URL field, save, then click Check Scenes.
In Settings → Tasks, run "Scrape ADVE Scenes for All Groups" to pre-cache scene data for every Group that already has an ADVE URL. Note: this task can take awhile, plan accordingly.
Each ADVE scene is matched to a Stash scene using these strategies in order:
- Performer + duration (primary) — all performers listed on ADVE must be present in the Stash scene, AND the duration must be within tolerance (120 sec base + 10 sec per performer, to account for ADVE's rounded whole-minute durations).
- Performer match alone — used when ADVE has no duration listed.
- Duration match alone — used when ADVE has no performers listed.
- Title match (fallback) — normalized exact title comparison. Generic titles like "Scene 1" are skipped to avoid false positives.
- Results are written to
results/group_<id>.jsonafter every run and persist across page navigations and Stash restarts. The 🎬 Scene Checker button shows a completion badge (e.g.2 / 4) without needing to re-run. - ADVE pages are cached in
.cache/for 24 hours. - Click Re-check to force a fresh scrape and overwrite stored results.
Stash_Group_ADVE_Movie_Plugin/
├── Stash_Group_ADVE_Movie_Plugin.yml ← Plugin manifest
├── checker.py ← Backend: scraper + GraphQL + matching
├── config.json ← Your settings (AdultDVDEmpire session cookie)
├── requirements.txt ← Python dependencies
├── panel.js ← Frontend UI injected into Group pages
├── results/ ← Auto-created; persisted result JSON files
└── .cache/ ← Auto-created; cached ADVE HTML (24 hr TTL)
The plugin scrapes AdultDVDEmpire's HTML. If ADVE changes their page markup,
the selectors in checker.py → scrape_adve() may need updating. The key
pattern to check is the scene anchor:
soup.find_all("a", attrs={"name": re.compile(r"^scene_\d+$")})