Devlog

Under the hood of EthnicErotic

EthnicErotic is a catalog of the world's peoples with a phenotype layer measured by a vision model against controlled vocabularies, an erotic pose catalog built from keypoint geometry, a comparison layer for text-to-image generators, and a reader feedback loop that decides which portraits the site shows. This log explains how each part works.

This is a running log of what we build on EthnicErotic and how it works. The site is a reference catalog of the world's peoples, and it runs on pipelines: candidates harvested from open knowledge bases, profiles written from encyclopedic sources in many languages, features measured by a vision model against controlled vocabularies, positions stored as keypoint geometry, and portraits judged by readers.

Start with the systems, which lay out the machinery: what each one does, the stages it runs in order, and a figure that measures it. The dated log follows, newest first, recording each build with the technical detail behind it.

Jump to the logRSS feed

peoples pages in the catalog
4,076
positions in the Erotic Pose Catalog, including 30 group arrangements
219
phenotype dimensions across 22 controlled vocabularies and 853 terms
196
structured observations measured from 2,681 portraits of 39 peoples
28,756
notable people linked to their peoples in the open dataset
24,406
reader verdicts published as open data
1,421
museum-attested artworks indexed across 13 traditions
87
text-to-image generators compared on the same peoples
5

The systems

How it works

Seven systems carry the site, from the pipeline that authors new peoples to the loop that lets readers replace a portrait. Each card lists its stages in order and one figure that measures it.

  1. Catalog authoring engine

    New peoples enter the catalog as candidates harvested from Wikidata and leave as full profile pages. Each candidate is screened against a written rubric that separates peoples from governments, census categories and list pages. A language model then writes the profile in US English from the best available Wikipedia language edition, from French to Russian to Indonesian. Before a page publishes, it is matched to its own Wikipedia article, one article to one page. Pages publish in waves ordered by documentation depth, so the best-documented peoples go first.

    1. Harvest from Wikidata
    2. Screen against the rubric
    3. Author the profile
    4. Match to its Wikipedia article
    5. Publish in waves
    5 wavesin two weeks took the catalog from 1,710 to 4,076 peoples pages
    Browse the world atlas
  2. Phenotype vision engine

    Twenty-two controlled vocabularies define 196 dimensions of the face and body, each anchored to a published scale such as the Fitzpatrick skin types, and the analysis prompt, data schema, aggregation and documentation are all generated from those vocabulary files. A vision model reads real reference photographs against the dimensions a photograph can show, and a deterministic aggregator with no language model in the loop turns the readings into per-people distributions with sample sizes. A test-retest reliability study, scored with Cohen's kappa, is written back into the head and neck vocabulary files it measured.

    1. Gather reference photographs
    2. Read against 22 vocabularies
    3. Aggregate per people
    4. Test for reliability
    5. Publish trait pages
    73 of 84rankable head and neck dimensions reliably repeatable under test-retest
    Explore the Phenotype Atlas
  3. Portrait pipeline

    Portraits live in per-people galleries rather than as a single picture. Each portrait prompt is built on one of four style registers, traditional, modern diaspora, modern urban or mixed, so heritage peoples appear in traditional dress and modern diaspora identities in contemporary clothes. A language model drafts the prompt from that people's homeland, phenotype profile and register, and each render from the pipeline records how it was made. Every render joins the gallery as a candidate, and readers' votes choose which portrait leads the page.

    1. Assign a style register
    2. Draft a per-people prompt
    3. Render gallery candidates
    4. Record how each was made
    5. Readers choose the cover
    4style registers, from traditional to modern urban, shape each portrait prompt
    See the Aboriginal Australian gallery
  4. Pose engine

    Each of the 219 positions is structured data: a 17-point keypoint template for every participant, composed deterministically from shared base-posture skeletons and a placement transform. The site draws every figure straight from those keypoints as a shaded articulated mannequin, with no image generation, and layers separate vocabularies of actions, camera moves and context on top. Positions link to their sources in historical manuals, from the Kama Sutra to the Perfumed Garden, and to museum-attested art, and a crosswalk maps them to outside vocabularies.

    1. Author the position record
    2. Compose keypoint template
    3. Draw articulated figure
    4. Layer actions and context
    5. Link history, art and outside vocabularies
    61 of 104positions in the v2.0 catalog with no precise match in any other machine-readable vocabulary
    Open the Pose Catalog
  5. Generator comparison layer

    The people is held constant and the generator varies: five text-to-image generators draw the same people from the same prompt, and the same vision model that built the real-photo baselines reads every render. Wherever a people has a real-photo baseline, renders are scored against it, and readers vote blind on pairs, with generator names hidden until the vote. Nothing ranks peoples, and when a generator misses a people, the miss is recorded as that generator's result.

    1. Hold the people constant
    2. Render on five generators
    3. Measure every render
    4. Score against real photos
    5. Blind pair vote
    200test renders across ten peoples and five generators
    Compare the generators
  6. Reader feedback loop

    Under the catalog's portraits sits a one-tap question: does this look right? No account is needed to answer it. A "Looks off" tap opens reason chips for skin tone, face, hair or setting, an inline deck deals up to five portraits without leaving the page, and verdicts are published as open data with the surface each was cast on. When a majority of readers say a portrait looks off, new candidates are rendered, the flagged portrait is replaced, and the page says so.

    1. One-tap verdict
    2. Reason chips
    3. Inline judging deck
    4. Publish as open data
    5. Replace flagged portraits
    20portraits replaced on readers' votes in a single day
    Judge a portrait
  7. Open research

    The catalog's foundations are published as open research. Two datasets on Hugging Face carry the peoples, the vocabularies, notable people, image observations, reader verdicts, generator comparisons and the pose catalog under CC BY 4.0, and both pipelines are public under Apache 2.0 with methodology papers. Each pipeline has a concept DOI on Zenodo, so the work can be cited and rebuilt.

    1. Export open datasets
    2. Publish pipeline code
    3. Write methodology papers
    4. Archive under DOIs
    1,779peoples in the open phenotype dataset
    Read the methodology

The log

Every build, newest first

Showing every entry

September 2026

August 2026

July 2026

June 2026

May 2026

March 2026

December 2025

Open research

The data and code, in the open