Skip to content

Add Circumcised and Penis Length fields for performers - #1243

Closed
he69man69 wants to merge 1 commit into
stashapp:masterfrom
he69man69:add-performer-circumcised-penis-length
Closed

Add Circumcised and Penis Length fields for performers#1243
he69man69 wants to merge 1 commit into
stashapp:masterfrom
he69man69:add-performer-circumcised-penis-length

Conversation

@he69man69

@he69man69 he69man69 commented Sep 3, 2026

Copy link
Copy Markdown

Add Circumcised and Penis Length fields for performers

Summary

Stash-box models female-specific body attributes (breast type, cup/band/waist/hip size) on the Performer entity, but has no equivalent for male/transfemale/non-binary/intersex performers. Stash already supports circumcision status and penis length, and this closes that gap so stash-box can store and serve the same data, keeping edit history, voting, and merge-conflict resolution consistent with every other performer attribute.

  • Adds two new nullable Performer fields:

    • Circumcised — enum, CUT / UNCUT.
    • Penis lengthInt, centimeters (matches the existing convention of height/waist/hip being plain Int, not float)
  • Threaded through the full stack: GraphQL schema, Postgres migration, sqlc queries, edit-diff/voting system, merge-conflict UI, performer drafts (for scraper/Stash submissions), and the performer edit form and detail page.

  • Visibility is gender-aware, mirroring how breast attributes are already gated, but as an independent rule so transfemale performers can carry both breast and penis attributes, and transmale performers get neither:

    Gender Breast attributes Penis attributes
    Female
    Male
    Transgender Female
    Transgender Male
    Non-binary / Intersex / unset
  • No search/filter support was added (stored + displayed only, matching the smaller scope of most measurement fields).

  • No backend gender enforcement, matching existing precedent (breast_type has none either).

  • Bumps schemaVersion in internal/database/database.go from 75 to 76 to accomodate the new DB fields.

Screenshots

Screenshot 2026-09-03 at 10 28 35 Screenshot 2026-09-03 at 10 30 01

Known issues in testing

  • Stash app doesn't submit these penis attributes via Draft submissions, so this will have to be handled separately.

Test plan

  • go build, go vet, go test across affected backend packages
  • tsc --noEmit, biome check, full vitest suite (373 tests) on the frontend
  • Manually verified end-to-end against a local stash-box instance connected to a local Stash instance:
    • Created/edited performers of each gender and confirmed field visibility matches the table above
    • Confirmed pending-edit diff view, merge-conflict UI, and performer detail page render the new fields correctly
    • Confirmed performer draft submission from Stash round-trips the new fields once Stash sends them
    • Confirmed values clear correctly when switching a performer's gender to one where a field group no longer applies

Stash-box models female-specific body attributes (breast type,
cup/band/waist/hip size) but has no equivalent for male/transfeminine
performers, even though Stash itself already supports circumcision
status and penis length locally. Adds both as nullable Performer
fields, threaded through the GraphQL schema, migration, sqlc queries,
edit-diff/voting system, merge-conflict UI, performer drafts, and the
performer edit/detail pages, with gender-aware visibility so
transfeminine performers can carry both breast and penis attributes
while transmasculine performers get neither.

Also bumps the hardcoded schemaVersion constant in
internal/database/database.go, which caps how far migrations run and
would otherwise leave the new migration silently unapplied.
@he69man69
he69man69 force-pushed the add-performer-circumcised-penis-length branch from 6837f58 to be205c4 Compare September 3, 2026 08:52
@he69man69

Copy link
Copy Markdown
Author

Closing, two more issues to fix.

@he69man69 he69man69 closed this Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant