stashapp / stash

An organizer for your porn, written in Go. Documentation: https://docs.stashapp.cc
https://stashapp.cc/
GNU Affero General Public License v3.0
8.76k stars 778 forks source link

[Feature] Similar Performers #3505

Open SpedNSFW opened 1 year ago

SpedNSFW commented 1 year ago

Is your feature request related to a problem? Please describe. Sometimes I forget performers' names but know they have much in common with a performer whose name I remember. Sometimes I just want to find a performer in my library that is similar to another.

Describe the solution you'd like I'd love to see another tab on a performer's page that lists similar performers. Only two metrics should be considered: the performer page details (gender, age, ethnicity, height, etc.), and the type of content they have (can use scene/gallery tags for this). Adding any neural network to Stash isn't the best idea so it should just be a scoring system; for every detail they have in common, add a point.

For the points, a user could set weightings in their settings (or somewhere), for example, gender should be weighted pretty high, I imagine, but details such as ethnicity or hair colour may differ in importance from person to person.

For their content, look at tags. For example, how many scenes has performer A done with the "lesbian" tag and is it similar to the amount performer B has? Tag counts are extremely easy to get in SQL (unsure about GraphQL):

SELECT t.name, COUNT(t.name)
FROM performers p
JOIN performers_scenes ps
    ON p.id = ps.performer_id
JOIN scenes s
    ON s.id = ps.scene_id
JOIN scenes_tags st
    ON s.id = st.scene_id
JOIN tags t
    ON t.id = st.tag_id
WHERE p.name = 'Adria Rae' -- using Adria Rae as an example
GROUP BY t.name
ORDER BY COUNT(t.name) DESC;

An alternative approach to simply comparing tag counts is to compare what percentage of their content uses that tag. For example, Performer A could have 50 "lesbian" tags, while Performer B only has 10, but they could make up the same percentage of their content for both.

Additional context For those of us with large libraries with many performers, it might be best to save comparisons to the database and only periodically update the scores. Obviously, any comparison of images is out of the question. That would require either a neural network or image recognition, and neither of them belongs in Stash in my opinion (at least with how Stash currently is).

sleetx commented 1 year ago

A tag-based recommendation tool is an interesting idea and one I brought up previously (although for scenes) #3074

Obviously, any comparison of images is out of the question. That would require either a neural network or image recognition, and neither of them belongs in Stash in my opinion (at least with how Stash currently is).

There is a facial recognition userscript under development, compatible with the Stash project: https://github.com/cc1234475/visage

ghost commented 1 year ago

Maybe if similarity was voted on stash-box and imported to stash but I don't like the proposed solution, seems too simplistic and the results will probably be far from useful. I think better wait until AI can be integrated in the project for this.

github-userx commented 1 year ago

A tag-based recommendation tool is an interesting idea and one I brought up previously (although for scenes) #3074

Obviously, any comparison of images is out of the question. That would require either a neural network or image recognition, and neither of them belongs in Stash in my opinion (at least with how Stash currently is).

There is a facial recognition userscript under development, compatible with the Stash project: https://github.com/cc1234475/visage

Thank You for mentioning this userscript. Im not sure if I’ll be smart enough to get it to run (docker stuff etc). But maybe this is exactly what I’ve been looking for.

Basically I want my hundreds of amateur porn videos be searchable with face recognition: sometimes I see a video posted on reddit and I know I have saved a (higher quality) copy of it years ago and is somewhere in my archives but I don’t remember the name or anything else. In that case searching for similar faces in all the videos I’ve stored would be very helpful.

Or sometimes all we have is a short screenshot, thumbnail of a Video and i‘d like to find The video of it in my archive.

When it comes to just photos, I’ve heard that nowadays even DigiKam the opensource photo manager application for Linux has added a feature for face recognition: https://www.omgubuntu.co.uk/2020/07/digikams-improved-face-detection-for-photos-even-works-on-animals

And there are others like https://github.com/photoprism/photoprism

the only thing that might come close to what I’m looking for but haven’t tried it yet is this (sadly closed-source software): https://facemri.com/

As far as I know, the the developer of the VideoHubApp plans to add face recognition sometime in the future (https://videohubapp.com).

DogmaDragon commented 1 year ago

There is an userscript with similar fuctionality. https://docs.stashapp.cc/add-ons/userscripts/#performer-suggestions

SpedNSFW commented 1 year ago

There is an userscript with similar fuctionality. docs.stashapp.cc/add-ons/userscripts/#performer-suggestions

Just gave that a look and went through a bunch of performers and I'll just say, this is very bad. In one instance, one of the performers had a single tag in common. Nothing else was similar. One was a white American woman in her twenties, the other was a black Dutch man in his thirties.

What I've proposed factors in more than just tags and would result in more accurate results.

SpedNSFW commented 1 year ago

Then make an issue to improve that userscript, if enough people use it, it can be merged into the main project but for now don't make it an issue in the main project.

With no disrespect, no. You don't get to determine what gets merged and what doesn't. I'm not saying I do either, before anyone jumps to that conclusion.

chasemeridian commented 4 months ago

One way this could work is to run some kind of regression on how correlative two performers' opposite gender scene partners are. I did this with the performers in my own collection (much smaller dataset, I know) by pulling from an online database how many times each person had been in a scene with various actors/actresses. In practice, the performers I would consider to be most similar by and large ended up working with the same co-stars. Might give some funky data for performers with fewer scenes, but for the mainstream ones it seems to be a workable approach.

Example: Performer A Performer A - 1.00 Performer D - 0.91 Performer C - 0.89 Performer F - 0.84 Performer R - 0.80 Performer L - 0.77 Performer V - 0.73