| Summary | Batch-link your local performers to JAVStash: dual-engine matching (scene reverse lookup + name/alias search), fingerprint completion for single-performer scenes, and an evidence-graded manual search. Writes stash_id + aliases + URLs and backfills empty profile fields and images β append-only, never overwrites. Python + UI plugin. | |
| Repository | https://github.com/k6cc/stash-jav-tools/tree/main/JavStashLinker | |
| Source URL | https://k6cc.github.io/stash-plugins/plugins/main/index.yml | |
| Install | How to install a plugin? |
Hi stashers,
If you use JAVStash as one of your metadata providers, you probably have plenty of scenes that carry JAVStash scene IDs while the performers inside them were scraped from somewhere else. Those performers have no JAVStash stash_id, so later scrapes keep missing them or spawning duplicates. This plugin backfills the missing links and writes the JAVStash stash_id onto each matched performer, along with aliases, URLs and empty profile fields β merged in append-only fashion, existing data is never overwritten.
Performers that already have a JAVStash stash_id are skipped, so the whole thing is safely re-runnable.
Works great paired with Performer Merge (once performers carry JAVStash stash_ids, duplicate detection gets hard evidence) and Studio Tools.
What it does
Engine A β scene reverse lookup
From every local scene that has a JAVStash scene ID, pulls the performer list from JAVStash and matches:
| Priority | Method | Confidence |
|---|---|---|
| 1 | StashDB stash_id exact | High |
| 2 | Single-performer scene (both sides have exactly one unmatched performer) | High |
| 3 | Name/alias cross-match (NFC-normalized, exact) | Medium |
| 4 | Manual selection from dropdown | β |
Engine B β name search
For performers Engine A canβt reach: searches JAVStash by main name + all aliases and grades every candidate by evidence (rules below). Options: alias search (default on) also searches aliases; fuzzy matching (default off) grades by name similarity alone β a manual fallback when evidence matching is too strict.
Manual search tab
For performers no scene scan can reach at all:
- Lists every local performer without a JAVStash link, filterable by name/alias
- Per-performer search with the same evidence grading, stops at the first high-confidence hit
- Complete single-performer: one-click batch completion via scene fingerprints (phash/oshash) β matched scenes with a unique performer are applied through the standard path
- JAVStash candidate names link to their pages for verification
Confidence rules (shared by search and Engine B):
| Signal | Confidence |
|---|---|
| StashDB UUID equal | High |
| URL intersection β₯ 2 | High |
| Exact name hits β₯ 3 votes | High |
| Name hit + full birthday equal | High |
| Name hit + birth year only | Medium |
| Similarity 0.7β0.9 | Medium |
| JAVStash performer deleted | capped at Medium |
Results & apply
Matches land in Auto-matched (high), Review (medium) and Unmatched (manual pick) tabs. The same JAVStash performer hit by multiple locals is flagged as a conflict and skipped by Apply All. Applying writes:
- JAVStash stash_id (endpoint-tagged)
- JAVStash name + aliases appended
- URLs merged as deduped union
- Empty profile fields backfilled (gender, birth/death dates, country, ethnicity, hair/eye color, height, measurements, career span, tattoos/piercings) β never overwritten
- Image backfilled when the local performer has none
- StashDB / ThePornDB links in the JAVStash profile converted to stash_ids instead of dumped into urls
Batch tasks (Settings β Tasks)
- Batch Scan: Engine A + Engine B (safest fixed options), results to
match_results.json - Apply High-Confidence Matches: applies the high-confidence results of the last scan, same rules as the UI
Notes
- Requires the JAVStash API key β add
https://javstash.org/graphqlas a stash-box endpoint in Settings β Metadata Providers; panel and batch tasks read it from there - All JAVStash API access is rate-limited
- Python 3.6+ with
requestsis only needed for the batch tasks; the interactive panel works without - Mobile-friendly: navbar button mirrors into the mobile drawer, panel usable down to 480px
Screenshots
Install
Option 1: Download Release
- Go to Releases and download the latest
JavStashLinker-vX.Y.Z.zip - Unzip into your Stash plugins directory (files go directly in the
JavStashLinkerfolder):- Windows:
%USERPROFILE%\.stash\plugins\JavStashLinker\ - Linux/macOS:
~/.stash/plugins/JavStashLinker/
- Windows:
- Stash β Settings β Plugins β Reload plugins
Option 2: Add plugin source
In Stash β Settings β Plugins β Available Plugins β Add Source, add:
https://k6cc.github.io/stash-plugins/plugins/main/index.yml
Then install JavStashLinker from the list. Same unified source that carries Studio Tools, Performer Merge, Tag Merge, sceneGallerySync, Scene Translate, and Binge (cn).
Companion plugins
| Plugin | Synergy |
|---|---|
| Performer Merge | Duplicate detection gets hard evidence from JAVStash stash_ids |
| Studio Tools | Studio-side twin: merge studios + metadata refresh from StashDB / ThePornDB / JAVStash |
| Tag Merge | Tag-side cleanup of the same family |
| Binge (fork) | Linked performers show up cleanly across Feed and profiles |
| Scene Translate | After linking, scrape and translate details |
License: MIT. Feedback and bug reports welcome β if a match went wrong, tell me the performer names on both sides and which signal fired.
AI Development Statement
From project setup, fault debugging and architecture refactoring to the writing and polishing of all Markdownβformatted documents, artificial intelligence runs through the entire development workflow of this project, and the whole project is developed with the help of AI.



