stashapp / stash-box Goto Github PK
View Code? Open in Web Editor NEWStash App's own OpenSource video indexing and Perceptual Hashing MetaData API
License: MIT License
Stash App's own OpenSource video indexing and Perceptual Hashing MetaData API
License: MIT License
Describe the solution you'd like
I had an idea on the Discord that the StashDB site should have a Changelog section, where you can track bulk changes to the database, and also with site/network additions. Perhaps also error correction too? Thus allowing users to know when to scrape/re-scrape certain network/sites/performers. Example below:-
14/05/2021 - Added PerfectGonzo Network
13/05/2021 - Linked X-Art Performer Aliases to Parent Performers
12/05/2021 - Added PornHub (MadeInCanarias)
12/05/2021 - Split Lucy Heart into multiple performers (Lucy Heart, Veronica Heart)
Something along those lines, open to debate though (particularly the splitting up of merged performers, though I argue this would be useful, people can check the changelog and see "okay, there was an issue with Lucy Heart, let me go to her profile in Stash and re-scrape those scenes")
Is your feature request related to a problem? Please describe.
There are Stashbox guidelines for uploading images, but how many users will review them before adding or modifying content? Most probably won't.
Describe the solution you'd like
Incorporate relevant guidelines into the relevant sections. For instance, when adding an image, include a link or text to the image guidelines. It would be a helpful reminder. It would also be a good idea to include an example of an ideal image.
We may want to include something like for whatever types of shots Stashbox prefers:
This is anal af, but it will produce consistent looking pics.
If we could host Logo's and images for the studios with support for maybe multiple / set one as default (rating based maybe?)
Then the stash clients could pull the image easily when needed.
This would also remove the manual legwork everyone needs to do to make it look nice, sharing the load of these logos would be good.
Also would be a way to share custom logos someone might make in different styles or looks like a shared unified color style.
EDIT:
These uploads should support SVG vector files as they are lossless and scale to any size and is really small... though limited to many different colors.
This way users could trace bad image files from sites and made clean and sharp vectors that scale to any size and need you want!
We're going to want a front end load balancer and reverse proxy so that we can deploy and test the API directly on http and via https. I would almost go as far as to suggest that the API should not operate in plaintext but that's up to @WithoutPants and @InfiniteTF to discuss how that'll work.
Is your feature request related to a problem?
Scenes can be added without any performers attached to them. This leads to a tsunami of new scenes without any performers attached to them.
Describe the solution you'd like
The scene creation wizard should disallow the creation scenes without any performers attached to them. If there are any studios that don't list performers, the democracy may add an exception on a per studio basis requiring a certain amount of votes, but those are fringe nonetheless.
Is your feature request related to a problem? Please describe.
Performer url's are in the database and in the graphql api but are not currently displayed or available to edit.
Describe the solution you'd like
On the performer page display a list of url's associated with the performer.
Update the edit performer pages and have a way to add a list of url's to the performer.
The graphql api will return a list of url's for the performer and will allow you to edit a performer and add a list of url's.
We just need a way of displaying and editing this information.
Is your feature request related to a problem?
Currently, it is not possible to search among the edits, except from using the basic filters. A simple text search would be useful to find edits of interest.
Describe the solution you'd like
Initially a simple free text search field that can search through edits in the title field, performer fields and studio field. In later versions, it would be nice to have more granular filters that we can save.
Describe alternatives you've considered
I've been using the favorite feature very primitively, I mark the studio of interest, look through the edits, then unfavorite the studio again.
Is your feature request related to a problem?
Currently it is not possible to view edits made to scenes belonging to a given studio. This would be a useful feature for moderation.
Describe the solution you'd like
There are three tabs on the studio page right now. 'Scenes', 'Links' and 'Edits'. I'd suggest to rename the 'Edits' tab into 'Studio edits', and add a 'Scene edits' tab that returns a feed with edits to the scenes within that studio.
if the SQLITE Renamer for Stash (rename on update) plugin is active the new Identify-function stops working.
Not sure if its a Problem at the plung in or the Identify-function
Hi guys! Your project is crazy awesome!
I'm new to Go and Gqlgen (an hobby, not a job) and I'm having a hard time with this: 99designs/gqlgen#866.
Basically: how to distinguish presence from nil (undefined vs null) in an Input type.
Gqlgen suggests to use mapstructure
here: https://gqlgen.com/reference/changesets/.
How are you doing? Are you doing it?
Thanks for your amazing work! ❤️
Is your feature request related to a problem?
A lot of ambiguous performers (e.g. Maria) have bogus metadata attached to them, such as birthdate, eye color, images of disambiguated performers and so forth.
Describe the solution you'd like
Make it possible to mark performers as ambiguous. Once they are marked as ambiguous, all metadata fields will become locked, disallowing the addition of nonsensical metadata. Also, in the search results, the match should indicate that the performer is indeed ambiguous and should display the performer as Maria (Ambiguous).
Been trying to install this for the nth time today. I try to follow the instruction, but:
yarn install --frozen-lockfile
gets me only
yarn: error: no such option: --frozen-lockfile
That's the first issue
then when I go to /opt/stash-box and try to run
make generate
everything is fine, but as soon as I try to run
make ui build
I get
root@stashbox:/opt/stash-box# make ui build
cd frontend && yarn build
00h00m00s 0/0: : ERROR: [Errno 2] No such file or directory: 'build'
make: *** [Makefile:112: ui-only] Error 1
which now when I look at it seem like some sort of yarn problem?
To Reproduce
Steps to reproduce the behavior:
Expected behavior
I would expect for the project to be built and, well, the instructions were unclear, so I don't really know what to expect and how to run it afterwards, but I assume the aforementioned errors are not the desired result.
Desktop (please complete the following information):
It might further improve the quality of uploaded pics by including cropperjs directly into the upload image section.
The cropperjs can be made to:
To support user preferences and different use cases for images, we should add image categorization.
Is your feature request related to a problem? Please describe.
This is not related to a problem but is rather a request for a feature that would greatly improve Stash's usability as a database tool. I am requesting a file renamer for the Stash utility.
Describe the solution you'd like
I would like to see a file renamer for Stash, ideally accessible from the scene list, or within the edit screen for individual scenes. This renamer would allow you to select the variables you want to use for renaming (i.e. scene name, performer, year, etc.) and then when you select "rename" it will rename the file in the windows explorer folder where the file is stored. Ideally, this would also create a subfolder with the same name and place the scene file in the subfolder. Think of TinyMediaManager's Rename and Cleanup feature.
Describe alternatives you've considered
We could do this manually, but for someone with a large collection, this would be extremely time-consuming and a rename/cleanup for files would be super helpful.
The current fingerprint submissions system is prone to bad data which involves manual labour to remove. This stems from the fingerprint submissions
field being a simple counter which is incremented whenever a user matches it. Removing bad matches currently requires manually removing the entry.
Fingerprints submissions should be related to the user that submitted them, and a user can only pair a fingerprint hash to a single scene. That is, if they re-submit the same hash to a different scene, then the original user/fingerprint/scene relationship will be removed in favour of the new one. The submissions
field will then be a resolver of a count of total submissions in the database. From what I can tell, the existing submissions
field isn't actually maintained.
Querying for scenes by fingerprint may return multiple candidates, and we should allow for this in the graphql schema and in the client tagger view. Obviously, the best match (ie the one with the highest submission count) should be displayed first, but other candidates should be available in case the first is not the correct match. If a user currently has a scene matched, then they should be able to unmatch it manually, as an alternative to matching it to another scene (in the event that an alternative scene does not exist).
The one-scene-per-hash change will have impacts on the shared test account we currently have.
In order to maintain our existing fingerprint data, we will want to migrate it to link it with a specially created internal user.
I don't think that it's necessary to have a report or down-vote et al function for scene fingerprints. I believe that bad matches will tend toward the zero count, and good matches will inevitably tend upwards. When a user finds a bad match, they can unmatch on there system if necessary, and manually look for an alternative scene and match that as needed.
To reduce useless or bad data, we should consider automating the removal of single count fingerprints that are older than a configurable age. This will reduce storage overhead.
I'm not sure what use duration
will be when moving toward this new mechanism. We should be using the "official" duration for match validation in the client. Submitting clips or compilations from a single scene should also be encouraged, so the duration may not necessarily match.
In scene_fingerprints
:
duration
and submissions
updated_at
user_id uuid
user_id
, scene_id
and created_at
unmatch
boolean flag to FingerprintSubmission
. When true, this will unmatch the scene from the fingerprint for the current user, if present.duration
from Fingerprint
and related objects - make it optional.limit
and offset
to FingerprintQueryInput
to designate the maximum number of matches to return and the offset. This means that a client can get the top match(es) and alternative matches as needed.findSceneByFingerprint
should return QueryScenesResultType
, or some intermediate type to prevent breaking changes. The main purpose is so the client can get the total number of matching scenes for a single fingerprint.findScenesBy[Full]Fingerprints
should return an array of QueryScenesResultType
, or some intermediate type to prevent breaking changes.fingerprints
should probably be deprecated from Scene
(and return an empty list) in favour of a query interface. The number of fingerprints could potentially get quite large.Describe the bug
Whenever a mutation is sent to modify a value to NULL, the column is ignored and the old value is retained. This makes it impossible to set values to Unknown.
Creating performer disambiguation is currently a manual process dependent wholly on the editor. It adds extra layers of work that may or may not be performed. Can we automate this process?
Automatically scraping in new performers, creating one manually, or modifying an existing performer name, adds the possibility of duplicate name collisions -- an unavoidable problem. The solution is manually creating a disambiguation field. However, this presents some points of failure and extra work:
We could create guides/best practices for this, but we're adding complexity, and still relying on an editor to check a guide and implement what he's read, assuming he understood it.
We can avoid all of this by implementing automatic disambiguation creation for every performer that is created or has their records modified.
What information is generally relevant to a user who is querying a performer, and what information generally differentiates them from another performer with the same primary name (aside from an image)?
This is a proposed hierarchy of variables to use for disambiguation:
Primary name (aliases)
--> Svetlana (Sveta, Veronica, Maria Q)
Primary name (b. yyyy-mm-dd, nationality)
--> Svetlana (b. 1999-05-05, RU)
Primary name (birth year-date year, nationality)
--> Svetlana (1999-2022, RU)
Primary name (b. yyyy-mm-dd)
--> Svetlana (b. 1999-05-05)
Primary name (nationality)
--> Svetlana (RU)
Primary name (ethnicity gender)
--> Svetlana (White Female)
White Female
, with maybe a few Black Female
or transgender outliers. Also, ethnicity can sometimes be an arbitrary field and may not be accurate (such as Latin, Mixed, etc).In the future, if an alias + studio association is ever implemented, such as indexxx alias-studio association, we can use a performer's studio as a disambiguation factor, and decide where in the hierarchy it is used
Studios can have multiple logos and sizes: landscape, square, wordmarks, favicon, etc. Some logos also change over time. Please add the ability to upload more than one image per studio.
Bonus if the images can have labels, such as "landscape" for landscape logos and "square" for 1:1 aspect radio images.
Is your feature request related to a problem?
Currently it is not possible to show the pending edits you haven't voted on yet.
Describe the solution you'd like
Add a filter to display only the pending edits you have not voted on yet.
Is your feature request related to a problem?
In the current version, it is possible to submit scenes that have the same title, performers and description as existing scenes in stashbox. It is also possible to submit duplicates of pending scenes. Indeed, someone submitted the same scene as I had submitted a couple of hours before the other person. Ironically, my submission was down voted, because the later submission was accepted first, which led me to be wrongly accused of submitting a duplicate.
Describe the solution you'd like
On the first page of the scene submission wizard, return an error stating that there already exists a scene by the same name. The same should be true for submitting a duplicate draft, perhaps provide a link to the pending submission, so that you can vote it in.
Describe alternatives you've considered
The alternative is to let everyone check their submissions manually which is prone to human error.
Is your feature request related to a problem? Please describe.
Importing markers into stash at the moment is a bit of a hassle, it would be nice to be able to do this automatically from stash-box, this sort of crowd sourcing of metadata seems to be the exact purpose of stash-box
Describe the solution you'd like
share markers with an associated phash/oshash/scene_duration, that could then be imported on scrape from a stash instance
Describe alternatives you've considered
Scraping markers from various sites and creating corresponding markers via stash's graphql interface, this works but doing this via stash-box seems like a better solution and could benefit from crowd sourcing
We should be able to query urls on the site and if not found, it should have an option to request a scrape.
The Scraping system should be automatic with its own work queue for missing scenes. Ofc it should only scrape sites it supports.
Doing something like this, gives the users an alternative to find the scene they want if they found it somewhere else.
Also allows users to easily add scenes and all the metadata without manual input and mistakes which is safer in the end.
Describe the bug
Currently the list of genders is: Unknown, Female, Male, TransFemale, TransMale and intersex.
Non-binary does not exist in an option in stash-box but is an option in stash.
Additional context
Are there other genders we need to consider?
Might be worth asking for suggestions on what we should store
Describe the bug
When sorting by trending, scenes may show up on multiple pages.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
The same scene should not appear on multiple pages.
Screenshots
If applicable, add screenshots to help explain your problem please ensure that your screenshots are SFW or at least appropriately censored.
Desktop (please complete the following information):
Is your feature request related to a problem? Please describe.
Brunette
and blonde
are not gender neutral words. They're words using a feminine form (referring to women and girls distinctly).12 Stashbox incorrectly uses the feminine form of said words to describe male, intersex, and unknown gender performers.Describe the solution you'd like
brunette
to the gender neutral word brown
blonde
to the gender neutral word blond
white
hair (Stashbox already includes grey hair -- a mixture of white and existing hair that hasn't lost pigmentation -- and white hair is the next step in the process of "graying", when all hair has lost pigmentation or is artificially made white)Additional context
This isn't coming from a place of wokeness or anything like that. It's simply a proper grammar thing since Stash uses the same set of words to describe men, women, intersex, etc.
I read it might be acceptable in some English language regions to use the feminine form for males too, but it's also acceptable to use the gender neutral form in those regions. Since it is correct to use the gender neutral form in all instances, I would default to the neutral form.
Is your feature request related to a problem?
It's hard to keep track of comments to your edits right now, you have to manually monitor your edits for comments and down votes.
Describe the solution you'd like
Add a notification system, notify when someone comments on your edit, when someone (down) votes your edit, and optionally when your edit gets accepted.
Describe alternatives you've considered
Manually monitoring the edits, which is tedious.
Right now, images are solely sorted by the image resolution. This is undesirable, the resolution of an image does not determine its quality. Some images may have a high resolution, but are in fact grainy. Also, the primary image may be unflattering or might not be the desired choice as performer card image.
This can be resolved by allowing users to upvote images and ordering them by the number of votes. The images that haven't received any votes remain ordered by resolution.
Is your feature request related to a problem? Please describe.
i have al lot of scenes from different sites with meaningless names (for example only a number) => a real pain to tag.
Describe the solution you'd like
On some studios there are real accurate duration times, if we could search for them it would make matching a lot easier.
here a litte example: site name + title = working
Hello everyone! This is a long post, so hopefully I'm not overstepping my bounds here. I sent a rough pitch on how I thought tags could work to Stash (meaning the original developer) about a year ago. Basically, I shared the list of tags I use within my own personal, local database thinking it would be useful during development. Since work here seems to have become much less theoretical than those early days, I thought it could be worth sharing again.
(Also, my coding experience is extremely limited to the point of non-existence, so bear with me if I don't understand a lot of the more technical language or if I over-explain something.)
The premise I'm starting from is that for the tags contained in StashBox to be as useful and functional as possible, we should have a relatively static master list of possible tags. These tags should have clear definitions so both users and contributors know what everything means. Without a level of internal consistency to these tags, the accuracy and reliability of our data will suffer.
Stash saved and shared the outline/list/dictionary I sent him before. You can find the whole thing here, but because it's so massive to the point of being embarrassing I'll give a brief synopsis as well so nobody feels like they have to scroll through all of it.
Because I have such a large list of tags, the only way to keep it manageable was to group everything together. I'm not sure how everybody feels about how tags should be structured and implemented, so for now it can just be seen as a convenient way of organizing my list so it can be more easily read and understood. I also can provide screenshots of my database in case anyone is curious what this system looks like in practice. I assure you it's much neater than the massive document above would imply.
I have everything organized into three broad sections first, with smaller categories underneath each of them.
People Tags contains tags that describe the appearance of a performer and may be listed on either a performer's individual profile page or to describe the appearance of performers within a particular scene.
Scene Tags contains tags that describe the make-up of a particular scene/movie.
Actions contains tags that describe actions in the scene. I only have two categories for these right now, Acts and Finishers. The first describes most positions and actions while the latter is reserved for finishing acts. (I'm trying to keep my language clean so GH doesn't get mad at me.) This is definitely the least fleshed out aspect of my list and I'm still not sure the best way to organize it. It contains a lot of modifiers with hyphens and just looks really ugly. Parent and sub-tags may help with this, I don't know.
Because I've been actively using this list of tags myself for years now, I already have most commonly tagged aspects included with simple definitions for just about everything already. I've also designed it with a few key directions in mind as well. I'm sharing those thoughts here as a proposal for guiding principles to consider while finalizing our list of tags.
As it stands, there are a lot of adjustments I feel could be made to my list. When considering it as a starting point for StashBox to use, the most glaring weakness is that it's too large. I should be able to cut the larger categories down to what I feel are the most common and most important tags without much trouble, so we can start with a much more manageable size, adding more as needed.
If we decide that this is a worthwhile starting point and that my conception isn't way off base from where everybody else intends to take the tagging system, I thought the Wiki section on GitHub could be a good place to start. We could create a "Tag Dictionary" organized by the "Sections" and "Categories" described above and I could start loading them with the relevant tags and definitions from my list. If I go one category at a time, we can discuss the merits and flaws of each one, offer suggestions or replacements, consider alternatives, etc. either within this issue page or on Discord. This can serve as a reference document both for developers and users.
However people feel about my proposal, I would still be interested in helping flesh out this aspect of the project. Like I said before, I don't really have any coding knowledge so I'm pretty limited in what I can contribute to this project. Let me know what you think or if you have questions. I have the same username on Discord as well. I've been thinking about all of this stuff for a long time now, so I'm interested to hear which ideas people like, which don't make any sense, whether any of it conflicts with current plans, and more importantly what makes the most sense for incorporating into StashBox at this time.
Having users use the shared test account is less than ideal, and I figure that we don't want to open up registration too much.
Propose adding the following user roles:
FINGERPRINT_READ
- allows querying for fingerprints only - plus the minimum operations for the user control panel to work.FINGERPRINT_SUBMIT
- implies FINGERPRINT_READ
, allows for submission of fingerprints.Propose also that configuration should include default roles when a user registers without an invite code.
In practise, I see envision the following:
Is your feature request related to a problem? Please describe.
Currently performer's page in Stash does not reference any external web links (Twitter, Instagram, TheNude, EuroBabeIndexxx, Indexxx, IAFD). This makes it very difficult to positively match performers between Stash and StashBox, requiring error-prone match by name and manual review
Describe the solution you'd like
Add a table to track performers against their external web references, with a constraint that each web reference link must be unique (only point to one performer)
Suggested Performer Handles table would have 2 columns
Performer web link should be normalized using consistent rules (unique for each site)
http
or https
www
.eu
or .com
/
?=
and sub-pages from the end of the link e.g. #bio
#profile
etcDescribe alternatives you've considered
Match by name or alias + birthday. This requires that birthday in StashBox and Stash match perfectly, and StashBox and Stash have common spelling of performer's name or one of the aliases.
Additional context
Here's an example of links for Foxy Di (scraped from Indexxxx):
"http://1passforallsites.com/model?id=980",
"http://babedrop.net/gallery/ddfnetwork/foxy-di/",
"http://egafd.com/actresses/details.php/id/f00253",
"http://fhg.errotica-archives.com/2019-10-01/KATOA/",
"http://nubiles-porn.com/model/profile/2410/foxy-di",
"http://www.18eighteen.com/teen-babes/Foxy-Di/7536",
"http://www.actrice-sexe.com/foxi-di/",
"http://www.amourangels.com/997/z_model_671.html",
"http://www.definefetish.com/models/3c5/foxi-di/",
"http://www.eurobabeindex.com/sbandoindex/foxidi.html",
"http://www.europornstar.com/Nensi-B/",
"http://www.exclusiveteenporn.com/model_247.html",
"http://www.firstanalquest.com/models/foxy-di/",
"http://www.kindgirls.com/gallery/domai/katoa/8317",
"http://www.naughtymag.com/amateur-girls/Foxy-Di/7536",
"http://www.pornteengirl.com/model/angel-c.html",
"http://www.showybeauty.com/997/model_280.html",
"http://www.teenpornstorage.com/3622/model_161.html",
"http://www.trickyoldteacher.com/model?id=980",
"https://ddfnetwork.com/pornstars/foxy-di/4279",
"https://fancentro.com/foxydi",
"https://nubiles.net/model/profile/2410",
"https://onlyfans.com/foxydi69",
"https://petitehdporn.com/model/profile/2410/foxy-di",
"https://teenerotica.xxx/models/268/",
"https://teenmegaworld.net/models/angel-c.html",
"https://wtfpass.com/models/foxi-di/",
"https://www.21naturals.com/en/pornstar/Foxy-Di/42129",
"https://www.21sextury.com/en/pornstar/Foxy-Di/42129",
"https://www.babesnetwork.com/model/3177/foxy-di",
"https://www.clubseventeen.com/girl.php?slug=foxy_b",
"https://www.cumlouder.com/girl/foxy-di/",
"https://www.danejones.com/modelprofile/43265/foxy-di",
"https://www.doghousedigital.com/model/58814/foxy-d",
"https://www.domai.com/model/katoa/latest",
"https://www.eroticbeauty.com/model/katoa/latest",
"https://www.errotica-archives.com/model/katoa/latest",
"https://www.evilangel.com/en/pornstar/Foxy-Di/34713",
"https://www.fakehub.com/modelprofile/43265/foxy-di",
"https://www.femjoy.com/models/medinau",
"https://www.freeones.com/foxy-di/links",
"https://www.goddessnudes.com/model/katoa/latest",
"https://www.instagram.com/foxy.shmoksi/",
"https://www.inthecrack.com/Model/368",
"https://www.karupspc.com/model/foxy-di-2293.html",
"https://www.legalporno.com/model/2852/foxy_d",
"https://www.lesbea.com/modelprofile/43265/foxy-di",
"https://www.metart.com/model/nensi-b/latest",
"https://www.milehighmedia.com/model/58814/foxy-d",
"https://www.mofos.com/model/3177/foxy-di",
"https://www.pornmegaload.com/hd-porn-scenes/Foxy-Di/50952/",
"https://www.realitykings.com/model/3177/foxy-di",
"https://www.roccosiffredi.com/en/pornstar/Foxy-Di/34713",
"https://www.rylskyart.com/model/foxy-di/latest",
"https://www.sexy-models.net/f/foxy-di/",
"https://www.thenude.com/Foxy%20Di_26953.htm",
"https://www.vivthomas.com/model/foxy-di/latest",
"https://www.webyoung.com/en/pornstar/Foxy-Di/29028",
"https://www.wetandpuffy.com/girls/foxy-di/",
"https://www.woodmancastingx.com/girl/foxi-di_5853",
"https://www.x-art.com/models/kate/"
Is your feature request related to a problem? Please describe.
A few fields would be more accurately represented with the capacity to have multiple values. This is related to #210 and expands upon it.
Describe the solution you'd like
Add multi-value support for:
Asian
and Black
to accurately reflect them, instead of falling into one of the other or into Mixed
, which seems like a catch-all for unknown mixed ethnicity.If a search string contains e.g. ham/bacon
this will end up as hambacon
, which makes a match unlikely. Separators like comma, dash, slash, should be replaced with space instead.
Is your feature request related to a problem? Please describe.
Running on Linux, I install binaries in /usr/local/bin.
The running user does not have access to write to this folder, nor should it.
Describe the solution you'd like
I would like to see the config folder be placed in ~/.config/stashbox
Eventually Stashbox is going going to encounter cases of vandalism or a lot of good faith bad edits on the same recurring fields of data. While all edits require approval, the pending edits will still clutter the queue. I think this is where locked fields can be useful.
TMDB defines locked fields as,
Confirmed data is routinely locked by content moderators. Moderators may also lock data to prevent vandalism.
When you stumble upon incorrectly locked data, please use the report button, explain the problem and link us to a proper source if needed.
Locked fields are indicated by a padlock icon next to the field. Unlocked fields are indicated by an open padlock next to the field.
Is your feature request related to a problem?
The autocomplete suggestions that show up when adding performers to a scene don't show their genders. It is currently hard to disambiguate between performers that use the same name but that are of different genders.
Describe the solution you'd like
Prepend the gender symbols to the autocomplete suggestions.
The death date should be similar to birthdate, a fuzzy date field with two database columns to represent approximate dates.
Is your feature request related to a problem? Please describe.
Sometimes we do not have the bra size, only a bust size. The current measurements forms are good, but it will not accept a bust size.
Describe the solution you'd like
Split the current bra size form into two forms:
AA
A
B
C
D
DD/E
DDD/F
DDDD/G
H
I
J
K
L
M
N
O
P
Q
R
DD
value to E
; DDD
to F
; DDDD
to G
to make those cup values consistent through the databaseShould function similarly to measurement fields in that it's hidden for "incompatible" genders.
Shoe size is a static property that should be relatively low effort to add. The only question is whether to pick US or EU sizes.
Currently, only performer names are considered when searching for performers.
The search term should be checked against the performer's aliases too.
Maybe the performer disambiguation should be considered as well, although they might need to be given less weight, compared to the name and aliases.
Need to provide a native data import process which handles mapping to other options. The process should allow for the creation of complete scene data without needing to perform post-import modifications.
This RFC is based on the previous work in the branch at https://github.com/InfiniteTF/stash-box/tree/bulk-import
Here is the basic requirements I think are needed for the mvp import functionality:
Here is how I envision the import process to work:
Add new import_data
table:
user_id
- assuming a single import per user, this plus row
should be sufficient composite keyrow
- index of csv or jsondata
- a jsonb
encoded of the raw row dataIf we need to identify stale imports, then we'll need a separate table to identify pending imports, with a user and date.
submitImport
mutation
data
file upload, a datafile type
, and a list of fieldMapping
objectsImportFieldMappingInput
includes outputField
, optional inputField
, optional fixedValue
, optional list of regex replacementsqueryImportData
query, accepting page size and page. Returns parsed import data (does not translate tag/studio/performers).importMappings
query.
ImportMapping
object, which contains studios
, performers
, tags
fields, which are lists of name/id pairscompleteImport
mutation
ImportMappingInput
object which is basically the same structure as ImportMapping
abortImport
mutation
Import
top-level menu item for allowed usersIs your feature request related to a problem? Please describe.
A lot of performers use a different hair color throughout their career, but only allowing one option limits us to just one hair color. If Jane Doe has brown hair in three scenes, and blond hair in three scenes, her hair color should be defined as both blond and brown.
Describe the solution you'd like
Make the hair color field a multi-value field. That is, let a performer have more than one hair color.
Additional context
I'm not sure if the various
option is applicable here or if it's for performers that have multi-colored hair. Either way, it would be really vague to select various
for every performer that has used different hair colors throughout their content.
Implement the option to amend/update already-submitted edits, prior to their application/rejection.
This will help immensely in resolving conflicts (when they are identified ahead of time), correcting mistakes (typos, missing/incorrect data, switching merge direction, updating merge sources) and generally updating data due to a comment from a fellow user.
Currently the only option is to cancel and recreate the edit.
A preliminary design idea - use the entity forms (PerformerForm
, SceneForm
, TagForm
, StudioForm
).
This is open to suggestions.
old_details
).EditDetails
and passed on to the form component.Added by InfiniteTF:
This RFC covers the user registration and activation process and the user invite system.
Propose to add the following configuration keys:
require_invite
[true
] - if false, allows new users to create accounts without needing an invite keyactivation_expiry
[2 hours] - time in seconds from when an activation event is generated (new user account, reset password requests) before the activation key expiresemail_cooldown
[5 minutes] - time in seconds before a second activation email may be generated - to prevent spammingrequire_invite
is true) a valid invite key.If the user clicks the link after the activation_expiry
period has passed, then the system reports that the activation link is no longer valid.
An invite key may only be used once. When the activation link is sent out, the invite key is considered used. The key may only be used again if the activation expiry has passed and the account was not created. The same key may be used to resend the activation email to the same email address, but only after the email_cooldown
time period has passed.
Invite keys will be associated with the user that generated them. Accounts created by invite keys will be associated with the account that created the invite key. This association will only be viewable by users with the ADMIN
role.
Users may be granted any number of invite tokens, these may be used to generate invite keys. As mentioned above, an invite key may only be used once. A user that generated an unused invite key may rescind it and reuse the token to generate another key.
Two new roles will be created: MANAGE_INVITES
, and INVITE
.
A user with the INVITE
role can generate new invite keys and rescind unused invite keys that they generated. They do not require invite tokens to generate invite keys.
A user with the MANAGE_INVITES
roles may grant and rescind invite tokens for users to generate invite keys, and may rescind any invite keys. Invite keys rescinded in this manner do not refund the invite token.
Token management should be logged, including the user that performed the operation.
newUser
- requires email address and optionally an invite key. Creates a pending user and sends email containing activation key.
activateNewUser
- requires email address, activation code and password to set. Validates the activation code against the email address and creates the new user
generateInviteCode
- use an invite token (if applicable) to generate an invite key. Returns the invite key.
rescindInviteCode
- invalidates an invite key, refunding the invite token if the key was generated by that user.
grantInvite
- increments the invite tokens for a user.
repealInvite
- decrements the invite tokens for a user.
I will also include resetPassword
- which will send an email with an activation key to reset an existing users password, and change changePassword
to optionally accept the activation key to set the password.
There is a significant desire to better organize performer images on stash-box, particularly by allowing images to be categorized by crop, pose, and state of dress.
Stash-Box performer images are currently organized by resolution only, basically serving the highest resolution image first followed by the rest in descending order. More popular performers can have many images and our StashDB guidelines encourage a diverse set for each performer representing various crops, poses, states of dress, and general "looks" from the performer's career. Typically, users will prefer a particular type of performer image for their personal use and are often left navigating stash-box's image carousel one-by-one until they find the "best" image. Currently, the only way to set a default image for a particular performer in stash-box is by making sure the preferred image has a higher resolution then the rest of the set. This is an imperfect work-around that requires maintaining a hard cap on image resolution for each performer rather than a true solution.
The implementation of image categories could help to alleviate these issues. If individual images can be tagged with categories, users could set their own preferred defaults within both stash-box and their personal stash. A convenient system for categorization is already in use in the actress-images repo hosted by Trizkat. Though the collection is exclusively female performers (outside of a small number of AFAB non-binary performers), their system appears to be neutral enough to be suitable for performers of all genders. In their own words, with some light editing:
How much of the performer is visible?
How is the performer positioned in relation to the camera?
What is the performer wearing, if anything?
Which photo set is this image from?
Possible expansions on this system could include a full-length crop for head-to-toe images, more specifics for non-nude states (swimsuit/lingerie/casual/formal), and approximate release dates/years to allow users to sort by date. Many more recent uploads to the actress-images repo represent a slightly expanded 3Q crop with more specific guidelines for the model's positioning within the frame, which may or may not necessitate an additional category of 3Q+ or similar.
Similar to other areas of stash-box, easily visible guidelines on relevant edit pages will greatly aid less experienced editors in conforming to established community standards. In this case, those guidelines would be clear definitions for the newly introduced terms above. This will require an agreed-upon level of standardization for these images to encourage consistency from performer to performer. Questions to consider while developing this standard:
In addition to a more basic implementation of categories for performer images, more advanced features have been suggested:
Is your feature request related to a problem?
Some of the scenes submitted by the democracy use the automatically generated thumbnails by stash, not the official thumbnail.
Describe the solution you'd like
Stash-box should detect that the thumbnail is bogus and remove it from the draft and warn the user that the thumbnail has been removed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.