JavStashLinker

:placard: 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.
:link: Repository https://github.com/k6cc/stash-jav-tools/tree/main/JavStashLinker
:information_source: Source URL https://k6cc.github.io/stash-plugins/plugins/main/index.yml
:open_book: 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/graphql as 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 requests is 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

  1. Go to Releases and download the latest JavStashLinker-vX.Y.Z.zip
  2. Unzip into your Stash plugins directory (files go directly in the JavStashLinker folder):
    • Windows: %USERPROFILE%\.stash\plugins\JavStashLinker\
    • Linux/macOS: ~/.stash/plugins/JavStashLinker/
  3. 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.

1 Like