Creating tag types and allowing cross-filtering by those types

Describe the feature you’d like

Currently tags are universal across stash. This creates a problem where people tag scenes, images, galleries, etc. with tags that technically violate certain boundaries, creating a bunch of manual/duplicative data.

For instance, someone in a scene has specific physical features that people tag them by, so now those scenes/images/galleries are tagged with things that technically would have to be repeated across every scene that person is in.

I don’t want to be too prescriptive here, but a nice feature might be:

  • Specify tag types (scene, gallery, performer, image, etc.), and each tag can be used across all types specified for that tag. You could then have a setting that either auto-adds tags into each type if you tag it accordingly or restrict it so it doesn’t show up as a tag unless you specifically state the tag is for a given object type. During the upgrade to this system all tags could be set to all types (essentially the current system) and then uncheck the ones they don’t want them to be tagged as.
  • When you search within each type (scene) you can then join against tags of each other type and those search options can be filtered by tags of those types. This is already kind of a thing in Scene filtering, but this would limit the tags you can pick from tags specified for that type (and work across all types based on their direct relation to other types) Essentially, filter by scenes where performers have x, y, and z (performer-specific) tags, or filter by groups where scenes include x, y and z (scene-specific) tags.

Describe the benefits this would bring to existing users

This would reduce the need for plugins that attempt to remediate this data problem by doing things like auto-assigning tags from performers into each scene they are in.

This would reduce duplicative tags that describe a type (performers for instance) that need to go into every scene. Tags would now be specific to object type (up to the user to decide how they want to do that).

Is there an existing way to achieve this goal?

Right now what I’ve seen people do (myself included) is using either tag hierarchies and/or manually-maintained tagging systems to differentiate between tag’s associated type(s).

For searching it’s the same where you can create your own internal hierarchy/tagging taxonomy, but it requires a lot of effort to maintain. Additionally, if you search via “Performer Tags” in Scene view it presents all tags to you, even if only a handful of tags are being used for performers.

Additional context

I’m not sure if there’s significant performance impacts of these join queries on the backend, which is possibly why this hasn’t been looked at or implemented.

I know there’s been a lot of different ideas around tags. I wanted to suggest an option where it doesn’t re-think or require significant changes to the tagging system but can also augment it in a way that allows for better tagging overall across the different types.

In theory you are right, except for one problem - things change over time. The same performer can have different attributes in different scene (hair color, sudden “augmentations”, tattoos, …).

The tag selection overload for query is IMHO being addressed by the new side bar, that only shows actually used tags within the current selection.

But you are right, there needs to be something layered on top of the existing powerful tag infrastructure to make it usable in a more targeted and structured way besides already knowing whats there and searching for it. I’m exploring something right now with the Fast Tagger Plugin, in an attempt to make tagging more streamlined. I’m already looking into expanding the defined structures into more areas (tag display and query by tag).

Related issue [Feature] Separating tags for higher-level objects · Issue #1253 · stashapp/stash · GitHub