Apply review fixes: V3 registration, compatibility rules, vocabulary cleanup

- Export V3 comfy_entrypoint only when comfy_api V3 symbols exist, else V1
  mappings; narrow the V3 import guard so real import errors surface
- Reject age_min > age_max with an input-named ValueError
- Validate data file structure at load with path and field in errors
- Sync JS sex filter lists with bundled data; test fails on drift
- Filter incompatible hair length/style and build/chest/shoulders pairs;
  user-fixed or allow-listed values win when nothing compatible remains
- Join bust as "<size> <shape> bust"
- Vocabulary: fix malformed phrases (softly built build, hair worn buzz
  cut), remove duplicate and conflicting entries, rename Maori to Maori
  with macron, add skin tones, body types, hair styles, clothing,
  footwear, accessories, female facial hair and male makeup options
- Bump version to 1.4.0
This commit is contained in:
BRADSEC
2026-10-31 13:13:15 +10:00
parent 1ce4dc851f
commit 205681e121
37 changed files with 502 additions and 278 deletions
+10 -10
View File
@@ -15,18 +15,10 @@
"label": "petite",
"description": "petite build"
},
{
"label": "slight",
"description": "slight build"
},
{
"label": "average",
"description": "average build"
},
{
"label": "medium build",
"description": "medium build"
},
{
"label": "athletic",
"description": "athletic build"
@@ -65,7 +57,7 @@
},
{
"label": "softly built",
"description": "softly built build"
"description": "soft build"
},
{
"label": "heavyset",
@@ -74,5 +66,13 @@
{
"label": "stocky",
"description": "stocky build"
},
{
"label": "broad build",
"description": "broad build"
},
{
"label": "soft midsection",
"description": "soft-bellied build"
}
]
]
+1 -2
View File
@@ -2,6 +2,5 @@
{ "label": "round", "description": "round" },
{ "label": "teardrop", "description": "teardrop" },
{ "label": "wide-set", "description": "wide-set" },
{ "label": "close-set", "description": "close-set" },
{ "label": "natural", "description": "natural" }
{ "label": "close-set", "description": "close-set" }
]
+2 -2
View File
@@ -1,8 +1,8 @@
[
{ "label": "petite", "description": "petite" },
{ "label": "petite", "description": "small" },
{ "label": "small", "description": "small" },
{ "label": "average", "description": "average" },
{ "label": "full", "description": "full" },
{ "label": "large", "description": "large" },
{ "label": "extra large", "description": "extra large" }
{ "label": "extra large", "description": "very large" }
]
+4 -1
View File
@@ -32,5 +32,8 @@
{ "label": "business casual", "description": "business-casual attire" },
{ "label": "formal wear", "description": "formal attire" },
{ "label": "loungewear", "description": "loungewear" },
{ "label": "beachwear", "description": "beachwear" }
{ "label": "beachwear", "description": "beachwear" },
{"label": "linen shirt", "description": "a loose linen shirt"},
{"label": "overalls", "description": "denim overalls"},
{"label": "raincoat", "description": "a hooded raincoat"}
]
+1 -21
View File
@@ -7,14 +7,6 @@
"label": "scar through eyebrow",
"description": "a faint scar through one eyebrow"
},
{
"label": "deep set eyes",
"description": "deep-set eyes"
},
{
"label": "wide eyes",
"description": "wide, expressive eyes"
},
{
"label": "cleft chin",
"description": "a softly cleft chin"
@@ -27,10 +19,6 @@
"label": "gap toothed smile",
"description": "a gap-toothed smile"
},
{
"label": "freckles",
"description": "light freckles across the cheeks"
},
{
"label": "beauty mark",
"description": "a beauty mark above the lip"
@@ -38,13 +26,5 @@
{
"label": "birthmark",
"description": "a small birthmark"
},
{
"label": "laugh lines",
"description": "laugh lines"
},
{
"label": "arched brows",
"description": "finely arched brows"
}
]
]
+9 -1
View File
@@ -2,5 +2,13 @@
{
"label": "clean shaven",
"description": ""
},
{
"label": "light facial hair",
"description": "fine facial hair above the upper lip"
},
{
"label": "chin hair",
"description": "a few visible chin hairs"
}
]
]
+1 -2
View File
@@ -24,7 +24,6 @@
{ "label": "hiking boots", "description": "hiking boots" },
{ "label": "work boots", "description": "work boots" },
{ "label": "ankle boots", "description": "ankle boots" },
{ "label": "formal shoes", "description": "formal shoes" },
{ "label": "tactical boots", "description": "tactical boots" },
{ "label": "hiking shoes", "description": "hiking shoes" },
{ "label": "high heels", "description": "high heels" },
@@ -36,5 +35,5 @@
{ "label": "ballet flats", "description": "ballet flats" },
{ "label": "mary janes", "description": "mary janes" },
{ "label": "knee-high boots", "description": "knee-high boots" },
{ "label": "high boots", "description": "high boots" }
{"label": "rubber rain boots", "description": "rubber rain boots"}
]
+1 -13
View File
@@ -59,10 +59,6 @@
"label": "white",
"description": "white"
},
{
"label": "black",
"description": "black"
},
{
"label": "brown",
"description": "brown"
@@ -91,20 +87,12 @@
"label": "sandy",
"description": "sandy blonde"
},
{
"label": "red",
"description": "red"
},
{
"label": "dark red",
"description": "dark red"
},
{
"label": "grey",
"description": "grey"
},
{
"label": "dark grey",
"description": "dark grey"
}
]
]
+14 -18
View File
@@ -1,7 +1,7 @@
[
{
"label": "cropped short",
"description": "cropped short"
"description": "in a short crop"
},
{
"label": "pixie",
@@ -13,7 +13,7 @@
},
{
"label": "chin length bob",
"description": "chin-length bob"
"description": "in a chin-length bob"
},
{
"label": "jaw length bob",
@@ -57,7 +57,7 @@
},
{
"label": "high ponytail",
"description": "high ponytail"
"description": "in a high ponytail"
},
{
"label": "low ponytail",
@@ -81,7 +81,7 @@
},
{
"label": "curtain bangs",
"description": "curtain bangs"
"description": "with curtain bangs"
},
{
"label": "space buns",
@@ -89,20 +89,12 @@
},
{
"label": "twist out",
"description": "twist out"
"description": "in a twist-out"
},
{
"label": "straight",
"description": "straight"
},
{
"label": "curly",
"description": "curly"
},
{
"label": "wavy",
"description": "wavy"
},
{
"label": "mohawk",
"description": "mohawk"
@@ -111,10 +103,6 @@
"label": "faux hawk",
"description": "faux hawk"
},
{
"label": "dreadlocks",
"description": "dreadlocks"
},
{
"label": "afro",
"description": "afro"
@@ -154,5 +142,13 @@
{
"label": "mullet",
"description": "mullet"
},
{
"label": "two strand twists",
"description": "in two-strand twists"
},
{
"label": "bantu knots",
"description": "in Bantu knots"
}
]
]
+1 -9
View File
@@ -7,10 +7,6 @@
"label": "natural makeup",
"description": "natural makeup"
},
{
"label": "soft makeup",
"description": "softly applied makeup"
},
{
"label": "minimal makeup",
"description": "minimal makeup"
@@ -19,10 +15,6 @@
"label": "bold makeup",
"description": "bold makeup"
},
{
"label": "glam makeup",
"description": "glamorous makeup"
},
{
"label": "smokey eye",
"description": "a smokey eye"
@@ -39,4 +31,4 @@
"label": "bold lipstick",
"description": "bold lipstick"
}
]
]
+1 -2
View File
@@ -9,6 +9,5 @@
{ "label": "defined cupids bow", "description": "defined cupid's bow" },
{ "label": "heart shaped lips", "description": "heart-shaped lips" },
{ "label": "rosebud lips", "description": "rosebud lips" },
{ "label": "prominent lower lip", "description": "prominent lower lip" },
{ "label": "wide set lips", "description": "wide-set lips" }
{ "label": "prominent lower lip", "description": "prominent lower lip" }
]
-3
View File
@@ -4,12 +4,9 @@
{ "label": "button nose", "description": "button nose" },
{ "label": "broad nose", "description": "broad nose" },
{ "label": "aquiline nose", "description": "aquiline nose" },
{ "label": "snub nose", "description": "snub nose" },
{ "label": "narrow nose", "description": "narrow nose" },
{ "label": "wide nose", "description": "wide nose" },
{ "label": "crooked nose", "description": "crooked nose" },
{ "label": "flat nose", "description": "flat nose" },
{ "label": "roman nose", "description": "Roman nose" },
{ "label": "rounded nose tip", "description": "rounded nose tip" },
{ "label": "high nose bridge", "description": "high nose bridge" },
{ "label": "low nose bridge", "description": "low nose bridge" }
+1 -1
View File
@@ -4,5 +4,5 @@
{ "label": "broad", "description": "broad shoulders" },
{ "label": "sloping", "description": "sloping shoulders" },
{ "label": "square", "description": "square shoulders" },
{ "label": "soft", "description": "soft shoulders" }
{ "label": "soft", "description": "rounded shoulders" }
]
+11 -11
View File
@@ -35,10 +35,6 @@
"label": "stocky",
"description": "stocky build"
},
{
"label": "broad shouldered",
"description": "broad-shouldered build"
},
{
"label": "tall lean",
"description": "tall and lean build"
@@ -55,20 +51,24 @@
"label": "heavyset",
"description": "heavyset build"
},
{
"label": "barrel chested",
"description": "barrel-chested build"
},
{
"label": "compact",
"description": "compact build"
},
{
"label": "softly built",
"description": "softly built build"
"description": "soft build"
},
{
"label": "dad bod",
"description": "dad bod build"
"description": "soft-bellied build"
},
{
"label": "broad build",
"description": "broad build"
},
{
"label": "soft midsection",
"description": "soft-bellied build"
}
]
]
+4 -1
View File
@@ -30,5 +30,8 @@
{ "label": "business casual", "description": "business-casual attire" },
{ "label": "formal wear", "description": "formal attire" },
{ "label": "loungewear", "description": "loungewear" },
{ "label": "beachwear", "description": "beachwear" }
{ "label": "beachwear", "description": "beachwear" },
{"label": "linen shirt", "description": "a loose linen shirt"},
{"label": "overalls", "description": "denim overalls"},
{"label": "raincoat", "description": "a hooded raincoat"}
]
+1 -17
View File
@@ -7,10 +7,6 @@
"label": "scar through eyebrow",
"description": "a scar through one eyebrow"
},
{
"label": "deep set eyes",
"description": "deep-set eyes"
},
{
"label": "high cheekbones",
"description": "high cheekbones"
@@ -23,10 +19,6 @@
"label": "strong jaw",
"description": "a strong, defined jaw"
},
{
"label": "laugh lines",
"description": "laugh lines"
},
{
"label": "gap toothed smile",
"description": "a gap-toothed smile"
@@ -35,10 +27,6 @@
"label": "dimples",
"description": "dimples"
},
{
"label": "freckles",
"description": "light freckles"
},
{
"label": "mole on cheek",
"description": "a mole on one cheek"
@@ -46,9 +34,5 @@
{
"label": "birthmark on jaw",
"description": "a birthmark on the jaw"
},
{
"label": "weathered skin",
"description": "weathered, sun-aged skin"
}
]
]
+2 -2
View File
@@ -24,7 +24,7 @@
{ "label": "hiking boots", "description": "hiking boots" },
{ "label": "work boots", "description": "work boots" },
{ "label": "ankle boots", "description": "ankle boots" },
{ "label": "formal shoes", "description": "formal shoes" },
{ "label": "tactical boots", "description": "tactical boots" },
{ "label": "hiking shoes", "description": "hiking shoes" }
{ "label": "hiking shoes", "description": "hiking shoes" },
{"label": "rubber rain boots", "description": "rubber rain boots"}
]
+2 -10
View File
@@ -25,7 +25,7 @@
},
{
"label": "warm honey",
"description": "warm honey"
"description": "honey blonde"
},
{
"label": "golden blonde",
@@ -51,10 +51,6 @@
"label": "white",
"description": "white"
},
{
"label": "black",
"description": "black"
},
{
"label": "brown",
"description": "brown"
@@ -91,12 +87,8 @@
"label": "dark red",
"description": "dark red"
},
{
"label": "grey",
"description": "grey"
},
{
"label": "dark grey",
"description": "dark grey"
}
]
]
+14 -14
View File
@@ -1,16 +1,12 @@
[
{
"label": "buzz cut",
"description": "buzz cut"
"description": "in a buzz cut"
},
{
"label": "crew cut",
"description": "crew cut"
},
{
"label": "cropped short",
"description": "cropped short"
},
{
"label": "textured crop",
"description": "textured crop"
@@ -37,7 +33,7 @@
},
{
"label": "messy medium",
"description": "messy medium"
"description": "in a tousled medium cut"
},
{
"label": "curly medium",
@@ -53,7 +49,7 @@
},
{
"label": "locs long",
"description": "long locs"
"description": "in long locs"
},
{
"label": "cornrows",
@@ -61,7 +57,7 @@
},
{
"label": "bun",
"description": "bun"
"description": "in a bun"
},
{
"label": "low ponytail",
@@ -73,7 +69,7 @@
},
{
"label": "taper fade",
"description": "taper fade"
"description": "in a taper fade"
},
{
"label": "skin fade",
@@ -99,10 +95,6 @@
"label": "faux hawk",
"description": "faux hawk"
},
{
"label": "dreadlocks",
"description": "dreadlocks"
},
{
"label": "afro",
"description": "afro"
@@ -122,5 +114,13 @@
{
"label": "mullet",
"description": "mullet"
},
{
"label": "two strand twists",
"description": "in two-strand twists"
},
{
"label": "bantu knots",
"description": "in Bantu knots"
}
]
]
+13 -1
View File
@@ -2,5 +2,17 @@
{
"label": "none",
"description": ""
},
{
"label": "subtle concealer",
"description": "subtle concealer"
},
{
"label": "eyeliner",
"description": "black eyeliner"
},
{
"label": "red lipstick",
"description": "red lipstick"
}
]
]
+1 -2
View File
@@ -6,6 +6,5 @@
{ "label": "downturned mouth", "description": "downturned mouth" },
{ "label": "upturned mouth", "description": "naturally upturned mouth" },
{ "label": "defined cupids bow", "description": "defined cupid's bow" },
{ "label": "prominent lower lip", "description": "prominent lower lip" },
{ "label": "wide set lips", "description": "wide-set lips" }
{ "label": "prominent lower lip", "description": "prominent lower lip" }
]
-2
View File
@@ -5,8 +5,6 @@
{ "label": "rounded nose tip", "description": "rounded nose tip" },
{ "label": "curved nose bridge", "description": "curved nose bridge" },
{ "label": "snub nose", "description": "snub nose" },
{ "label": "roman nose", "description": "Roman nose" },
{ "label": "wide nose", "description": "wide nose" },
{ "label": "flat nose", "description": "flat nose" },
{ "label": "narrow nose", "description": "narrow nose" },
{ "label": "upturned nose", "description": "slightly upturned nose" },
+9 -1
View File
@@ -53,7 +53,7 @@
},
{
"label": "small ear piercings",
"description": "small ear piercings"
"description": "small stud earrings in both ears"
},
{
"label": "nose ring",
@@ -98,5 +98,13 @@
{
"label": "bindi",
"description": "a bindi"
},
{
"label": "hearing aids",
"description": "small hearing aids"
},
{
"label": "head wrap",
"description": "a cloth head wrap"
}
]
+6 -3
View File
@@ -1,5 +1,5 @@
[
{ "label": "porcelain", "description": "porcelain" },
{ "label": "porcelain", "description": "very light neutral" },
{ "label": "fair", "description": "fair" },
{ "label": "light", "description": "light" },
{ "label": "light medium", "description": "light medium" },
@@ -12,6 +12,9 @@
{ "label": "golden brown", "description": "golden brown" },
{ "label": "medium brown", "description": "medium brown" },
{ "label": "deep brown", "description": "deep brown" },
{ "label": "deep", "description": "deep" },
{ "label": "ebony", "description": "ebony" }
{ "label": "deep", "description": "very deep brown" },
{ "label": "ebony", "description": "very deep neutral brown" },
{"label": "light brown", "description": "light brown"},
{"label": "neutral medium brown", "description": "neutral medium brown"},
{"label": "rich dark brown", "description": "rich dark brown"}
]
+1 -9
View File
@@ -11,14 +11,6 @@
"label": "warm smile",
"description": "a warm smile"
},
{
"label": "slight smile",
"description": "a slight smile"
},
{
"label": "gentle smile",
"description": "a gentle smile"
},
{
"label": "serious",
"description": "a serious expression"
@@ -37,7 +29,7 @@
},
{
"label": "confident",
"description": "a confident expression"
"description": "a direct, relaxed gaze"
},
{
"label": "relaxed",
+5 -5
View File
@@ -35,16 +35,16 @@
"label": "downturned",
"description": "downturned"
},
{
"label": "heavy-lidded",
"description": "heavy-lidded"
},
{
"label": "narrow",
"description": "narrow"
},
{
"label": "large",
"description": "large, expressive"
"description": "large"
},
{
"label": "prominent",
"description": "prominent"
}
]
-4
View File
@@ -23,10 +23,6 @@
"label": "bushy",
"description": "bushy eyebrows"
},
{
"label": "full natural",
"description": "full natural brows"
},
{
"label": "sparse",
"description": "sparse brows"
+4 -4
View File
@@ -17,7 +17,7 @@
},
{
"label": "hazel",
"description": "hazel eyes with brown and green flecks"
"description": "hazel eyes"
},
{
"label": "hazel green",
@@ -33,7 +33,7 @@
},
{
"label": "blue",
"description": "natural blue eyes"
"description": "blue eyes"
},
{
"label": "light blue",
@@ -57,7 +57,7 @@
},
{
"label": "green",
"description": "muted natural green eyes"
"description": "muted green eyes"
},
{
"label": "light green",
@@ -77,7 +77,7 @@
},
{
"label": "grey",
"description": "natural grey eyes"
"description": "grey eyes"
},
{
"label": "pale grey",
+4 -13
View File
@@ -1,22 +1,13 @@
[
"a faint dusting of freckles across the nose",
"a thin scar through one eyebrow",
"deep dimples when smiling",
"a prominent, straight nose",
"dimples in both cheeks",
"unusually high cheekbones",
"a strong, defined jaw",
"sun-darkened laugh lines at the corners of the eyes",
"a wide, gap-toothed smile",
"a button nose and full cheeks",
"a sharp aquiline nose",
"heavy, expressive eyebrows",
"a small gap between the front teeth",
"a softly cleft chin",
"very full lips",
"thin, precise lips",
"deep-set eyes beneath a strong brow",
"a broad, flat nose",
"small, neat ears",
"a long neck that gave them an elegant bearing",
"a slightly crooked nose, as if once broken",
"a long neck",
"a birthmark at the jaw"
]
]
+1 -1
View File
@@ -62,6 +62,6 @@
{ "label": "Cuban", "descriptor": "Cuban", "from": "from Cuba" },
{ "label": "Venezuelan", "descriptor": "Venezuelan", "from": "from Venezuela" },
{ "label": "Chilean", "descriptor": "Chilean", "from": "from Chile" },
{ "label": "Maori", "descriptor": "Maori", "from": "from New Zealand" },
{"label": "Māori", "descriptor": "Māori"},
{ "label": "Samoan", "descriptor": "Samoan", "from": "from Samoa" }
]
+9 -13
View File
@@ -7,18 +7,6 @@
"label": "clear",
"description": "clear skin"
},
{
"label": "dewy",
"description": "dewy skin"
},
{
"label": "glowing",
"description": "glowing skin"
},
{
"label": "matte",
"description": "matte skin"
},
{
"label": "oily",
"description": "an oily sheen"
@@ -53,7 +41,7 @@
},
{
"label": "ruddy",
"description": "a ruddy complexion"
"description": "redness across the cheeks"
},
{
"label": "fine lines",
@@ -74,5 +62,13 @@
{
"label": "leathery",
"description": "leathery, sun-aged skin"
},
{
"label": "visible pores",
"description": "natural visible pores"
},
{
"label": "under-eye lines",
"description": "fine lines under the eyes"
}
]