Skip to content

Upstream Changes

Stash Sense detects metadata changes on Stash-Box endpoints and presents per-field merge controls to keep your local Stash library in sync. This covers performers, studios, and scenes.

Prerequisites

  • At least one Stash-Box endpoint configured in Stash's Settings > Metadata Providers
  • Performers, studios, or scenes in your library linked to Stash-Box IDs

How It Works

3-Way Diff Engine

For each field, the diff engine compares three states:

  • Upstream — Current value on the Stash-Box endpoint
  • Local — Current value in your Stash library
  • Snapshot — Last-seen upstream value (stored locally by Stash Sense)

This three-way comparison distinguishes intentional local differences from actual upstream changes. If you've deliberately set a different name locally, it won't keep suggesting the upstream name on every sync cycle.

Change Detection

A field is flagged only when the upstream value has changed since the last snapshot and the new upstream value differs from your local value. Fields where upstream hasn't changed, or where your local value already matches upstream, are skipped.


Performer Sync

Detects field changes for performers linked to Stash-Box endpoints.

Per-field merge controls:

Field type Options
Name fields Keep local / Accept upstream / Demote to alias / Add as alias / Custom
Aliases Union checkboxes (pick which aliases to keep)
Simple fields Keep local / Accept upstream / Custom

Studio Sync

Detects changes for studios linked to Stash-Box endpoints.

Tracked fields:

  • Name — Studio display name
  • URL — Studio website
  • Parent studio — Hierarchical studio relationships (resolved via Stash-Box IDs, not name matching)

Scene Sync

Detects metadata changes for scenes linked to Stash-Box endpoints.

Tracked field categories:

Category Fields
Core metadata Title, details, date, director, code, URLs
Studio assignment Studio linked to the scene
Performer lineup Added/removed performers, alias changes
Tags Tag set additions and removals

Performer lineup changes show which performers were added or removed upstream, including alias detection when an upstream performer's credited name differs from the local alias.


Dismissal

When you review an upstream change and decide not to apply it:

  • Soft dismiss — Hides the recommendation for now. If the upstream value changes again in a future sync, the recommendation reappears.
  • Permanent dismiss — Skips this field/entity entirely in future syncs. Use this when your local value is intentionally different.

Dismiss All

The Dismiss All button lets you dismiss all currently visible upstream change recommendations at once. This is useful after reviewing a batch and deciding to skip the remaining items. Dismiss All applies a soft dismiss — if upstream changes again, items will reappear.


Endpoint Enable/Disable Toggle

Each Stash-Box endpoint can be individually enabled or disabled for upstream sync analysis. Disabled endpoints are skipped during analysis runs but their configuration is preserved.

Use this to:

  • Temporarily pause sync from a noisy endpoint
  • Focus on changes from a single endpoint at a time
  • Disable endpoints you only use for scene tagging, not upstream sync

Toggle endpoints in the plugin's Settings tab under the Stash-Box Endpoints section.


Merge Conflict Improvements

When the same field has been changed both locally and upstream since the last snapshot, an inline comparison panel shows:

  • The snapshot value (what the field was when last synced)
  • The local value (what you changed it to)
  • The upstream value (what Stash-Box changed it to)

This side-by-side view makes it easy to understand the conflict and decide which value to keep.


Running Upstream Sync

Upstream analysis runs as a background job in the operation queue. It can be:

  • Triggered manually from the Operations tab
  • Scheduled to run automatically at a configurable interval
  • Run incrementally — only entities modified since the last watermark are checked, keeping sync fast after the initial scan