TagStudioDev / TagStudio

A User-Focused Photo & File Management System
https://docs.tagstud.io/
GNU General Public License v3.0
5.14k stars 372 forks source link

[Feature Request]: Remove Redundant Tags. #559

Open NeedsLoomis opened 1 day ago

NeedsLoomis commented 1 day ago

Checklist

Description

Currently, we can add a "Creature" tag to a file that already has a "Dog(Creature)" tag, which presents us with a meta challenge where we must organize our organizational system. Do we:

A) Embrace redundancy and include every valid tag. This is annoying because you'll have to dig into every tag's hierarchy to find and add the parents. Some will be missed making a mess and there can be quite the list of tags on a single file.

B) Only include the lowest level child tag we need. Clean, but difficult because there's no good way to keep in your head every possible parent and child when choosing tags, so some will be missed making a mess.

C) Some (arbitrary?) mix of both. Deal with an inconsistent organizational system.

Solution

One suggestion would be to change parent tags act as required tags. Have them be auto added if they don't already exist on the file. Basically switching from inheritance to composition. A Dog comes with a Critter tag, instead of a Dog tag is a Critter tag. You could then remove the () from the tags.

Alternatives

Perhaps don't allow adding parent tags if a child tag is present, maybe by filtering parents already on the object on the list of available tags, and removing parents already on the object when a child is added.

A simpler alternative would be to not allow adding parents at all. If your file is a shape, it HAS to be a circle, square, or some new tag. Clean, but limiting, and there would need to be a solution to orphaning tags when adding children to them.

Note

All of these, especially the alternatives, would greatly benefit from a UI update like https://github.com/TagStudioDev/TagStudio/issues/431

The-Stolas commented 18 hours ago

I agree, that the system would greatly benefit from either "parents as folders" functionality or a "child comes with a parent, but child isn't the parent" proposal that you described. The second one is particularly helpful for color organization, because the current system doesn't really work with it. In my library character tags are blue and fandoms are purple. But I cannot add "child-parent" to this structure, because it would just make all of them purple.

Perhaps if the second option is implemented, you can have the "Trim parents" feature as a manual option, which can scan and delete the repeating parents from each file in the library until a single instance of parent remains. I think a trimming system that requires a manual run is better, because it's a lot more clear to the user.