@nodaro/prompts 1.2.1 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +18 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/person-exposure-hints.test.ts +61 -0
- package/src/person.ts +13 -2
- package/src/styling.ts +19 -0
package/dist/index.cjs
CHANGED
|
@@ -2535,8 +2535,8 @@ var PEOPLE = [
|
|
|
2535
2535
|
{ id: "feature-nostril-piercing", label: "Nostril Piercing", dimension: "distinctive-features", description: "Single nostril stud or ring", promptHint: "with a single nostril piercing, a small stud or ring at the nostril" },
|
|
2536
2536
|
{ id: "feature-bare-shoulders", label: "Bare Shoulders", dimension: "distinctive-features", description: "Bare shoulders exposed", promptHint: "with bare shoulders exposed, the line of the collarbone and shoulder muscles uncovered" },
|
|
2537
2537
|
{ id: "feature-collarbone-visible", label: "Collarbone Visible", dimension: "distinctive-features", description: "Prominent collarbone catching light", promptHint: "with a prominent collarbone clearly defined and catching the light" },
|
|
2538
|
-
{ id: "feature-midriff-visible", label: "Midriff Visible", dimension: "distinctive-features", description: "Exposed midriff between top and bottom", promptHint: "
|
|
2539
|
-
{ id: "feature-navel-visible", label: "Navel Visible", dimension: "distinctive-features", description: "Visible navel on bare stomach", promptHint: "with
|
|
2538
|
+
{ id: "feature-midriff-visible", label: "Midriff Visible", dimension: "distinctive-features", description: "Exposed midriff between top and bottom", promptHint: "wearing a cropped style with the midriff visible" },
|
|
2539
|
+
{ id: "feature-navel-visible", label: "Navel Visible", dimension: "distinctive-features", description: "Visible navel on bare stomach", promptHint: "with the navel visible" },
|
|
2540
2540
|
{ id: "feature-elongated-neck", label: "Elongated Neck", dimension: "distinctive-features", description: "Long swan-like neck", promptHint: "with an elongated, swan-like neck, long and gracefully extended" },
|
|
2541
2541
|
{ id: "feature-under-eye-circles", label: "Under-Eye Circles", dimension: "distinctive-features", description: "Subtle dark circles under the eyes (distinct from puffy eye-bags)", promptHint: "with subtle dark circles under the eyes" },
|
|
2542
2542
|
{ id: "feature-fangs", label: "Fangs", dimension: "distinctive-features", description: "Visible fangs (vampire / character archetype)", promptHint: "with visible fangs at the canines, character / vampire archetype" },
|
|
@@ -2841,7 +2841,13 @@ function buildAgeHint(ageId, customAge) {
|
|
|
2841
2841
|
function emitIndependentHints(value) {
|
|
2842
2842
|
const ids = normalizePickIds(value);
|
|
2843
2843
|
const out = [];
|
|
2844
|
+
const midriff = ids.includes("feature-midriff-visible");
|
|
2845
|
+
const navel = ids.includes("feature-navel-visible");
|
|
2844
2846
|
for (const id of ids) {
|
|
2847
|
+
if (midriff && navel && (id === "feature-midriff-visible" || id === "feature-navel-visible")) {
|
|
2848
|
+
if (id === "feature-midriff-visible") out.push("wearing a cropped style, midriff and navel visible");
|
|
2849
|
+
continue;
|
|
2850
|
+
}
|
|
2845
2851
|
const hint = getPersonPromptHint(id);
|
|
2846
2852
|
if (hint) out.push(hint);
|
|
2847
2853
|
}
|
|
@@ -3206,6 +3212,7 @@ var STYLINGS = [
|
|
|
3206
3212
|
{ id: "headwear-bandana", label: "Bandana", dimension: "headwear", description: "Bandana tied around head", promptHint: "wearing a bandana tied around the head" },
|
|
3207
3213
|
{ id: "headwear-hood", label: "Hood", dimension: "headwear", description: "Hooded sweatshirt up", promptHint: "with a hood pulled up over the head" },
|
|
3208
3214
|
{ id: "headwear-crown", label: "Crown", dimension: "headwear", description: "Royal or decorative crown", promptHint: "wearing a crown atop the head" },
|
|
3215
|
+
{ id: "headwear-nemes", label: "Nemes Headdress", dimension: "headwear", description: "Striped pharaonic nemes with uraeus", promptHint: "wearing a striped pharaonic nemes headdress with a golden uraeus cobra at the brow" },
|
|
3209
3216
|
{ id: "headwear-helmet", label: "Helmet", dimension: "headwear", description: "Protective helmet", promptHint: "wearing a helmet" },
|
|
3210
3217
|
{ id: "headwear-veil", label: "Veil", dimension: "headwear", description: "Veil draped over face/hair", promptHint: "wearing a veil draped over the head" },
|
|
3211
3218
|
{ id: "headwear-bucket-hat", label: "Bucket Hat", dimension: "headwear", description: "Soft-brimmed casual bucket hat", promptHint: "wearing a soft-brimmed casual bucket hat" },
|
|
@@ -3312,6 +3319,7 @@ var STYLINGS = [
|
|
|
3312
3319
|
{ id: "face-paint-dramatic", label: "Dramatic Face Paint", dimension: "face-paint", description: "Bold artistic face paint", promptHint: "with dramatic, artistic face paint covering portions of the face" },
|
|
3313
3320
|
{ id: "face-paint-costume", label: "Costume Paint", dimension: "face-paint", description: "Cosplay / theatrical paint", promptHint: "with theatrical costume face paint" },
|
|
3314
3321
|
{ id: "face-paint-tribal", label: "Tribal Markings", dimension: "face-paint", description: "Tribal-inspired face markings", promptHint: "with tribal-inspired face markings" },
|
|
3322
|
+
{ id: "face-paint-flag", label: "Flag Face Paint", dimension: "face-paint", description: "National flag painted on cheeks, sports-fan", promptHint: "with a national flag painted on the cheeks, sports-fan face paint" },
|
|
3315
3323
|
{ id: "face-paint-warpaint", label: "War Paint", dimension: "face-paint", description: "Warrior war paint streaks", promptHint: "with warrior war paint streaked across the face" },
|
|
3316
3324
|
// -------------------- Fabric (clothing material) --------------------
|
|
3317
3325
|
// Clothing-specific fabrics, phrased as "wearing X". Overlaps in vocabulary
|
|
@@ -3340,12 +3348,14 @@ var STYLINGS = [
|
|
|
3340
3348
|
{ id: "outfit-evening-gown", label: "Evening Gown", dimension: "outfit", description: "Floor-length formal gown", promptHint: "dressed in a floor-length evening gown with a fitted bodice and a flowing skirt" },
|
|
3341
3349
|
{ id: "outfit-wedding-dress", label: "Wedding Dress", dimension: "outfit", description: "White wedding gown", promptHint: "dressed in a white wedding gown with intricate lace detailing and a sweeping train" },
|
|
3342
3350
|
{ id: "outfit-cocktail-dress", label: "Cocktail Dress", dimension: "outfit", description: "Knee-length cocktail dress", promptHint: "dressed in a sleek knee-length cocktail dress" },
|
|
3351
|
+
{ id: "outfit-sundress", label: "Sundress / Maxi", dimension: "outfit", description: "Flowy halter-neck sundress / patterned maxi", promptHint: "dressed in a flowy halter-neck sundress with a patterned maxi-length skirt" },
|
|
3343
3352
|
{ id: "outfit-lab-coat", label: "Lab Coat", dimension: "outfit", description: "White medical lab coat", promptHint: "wearing a crisp white lab coat layered over the rest of the clothing" },
|
|
3344
3353
|
{ id: "outfit-scrubs", label: "Medical Scrubs", dimension: "outfit", description: "Solid-color medical scrubs", promptHint: "dressed in solid-color medical scrubs \u2014 loose-fit top and matching drawstring pants" },
|
|
3345
3354
|
{ id: "outfit-military", label: "Military Fatigues", dimension: "outfit", description: "Olive-drab military fatigues", promptHint: "dressed in olive-drab military fatigues with utility pockets and a sturdy belt" },
|
|
3346
3355
|
{ id: "outfit-lifeguard", label: "Lifeguard Outfit", dimension: "outfit", description: "Red lifeguard top and shorts", promptHint: "dressed in a bright red lifeguard outfit \u2014 a fitted top and matching shorts" },
|
|
3347
3356
|
{ id: "outfit-athleisure", label: "Athleisure Set", dimension: "outfit", description: "Matching athleisure top and bottom", promptHint: "dressed in a matching athleisure set \u2014 a fitted top and leggings in the same tone" },
|
|
3348
3357
|
{ id: "outfit-tracksuit", label: "Tracksuit", dimension: "outfit", description: "Two-piece zip-front tracksuit", promptHint: "dressed in a two-piece tracksuit \u2014 a zip-front jacket and matching joggers" },
|
|
3358
|
+
{ id: "outfit-soccer-jersey", label: "Soccer Jersey", dimension: "outfit", description: "National-team football jersey with crest", promptHint: "wearing a national-team soccer jersey \u2014 team colors and trim with the team crest on the chest" },
|
|
3349
3359
|
{ id: "outfit-bikini", label: "Bikini", dimension: "outfit", description: "Two-piece swimsuit", promptHint: "in a two-piece bikini" },
|
|
3350
3360
|
{ id: "outfit-one-piece-swim", label: "One-Piece Swimsuit", dimension: "outfit", description: "Fitted one-piece swimsuit", promptHint: "in a fitted one-piece swimsuit" },
|
|
3351
3361
|
{ id: "outfit-lingerie", label: "Lingerie Set", dimension: "outfit", description: "Matching lingerie set", promptHint: "in a matching lingerie set" },
|
|
@@ -3365,6 +3375,7 @@ var STYLINGS = [
|
|
|
3365
3375
|
{ id: "outfit-pirate", label: "Pirate", dimension: "outfit", description: "Pirate costume: tricorn hat, sash, frilly shirt, boots", promptHint: "wearing a pirate costume \u2014 a tricorn hat, a frilly shirt with a sash at the waist, and tall leather boots" },
|
|
3366
3376
|
{ id: "outfit-fairy", label: "Fairy", dimension: "outfit", description: "Fantasy fairy: gauzy wings, flower crown, ethereal dress", promptHint: "wearing a fantasy fairy costume \u2014 gauzy translucent wings, a flower crown, and an ethereal flowing dress" },
|
|
3367
3377
|
{ id: "outfit-mermaid", label: "Mermaid", dimension: "outfit", description: "Fantasy mermaid: scaled tail/skirt, shell top, flowing hair", promptHint: "wearing a fantasy mermaid costume \u2014 a scaled tail or fitted scaled skirt, a shell top, and long flowing hair" },
|
|
3378
|
+
{ id: "outfit-pharaoh", label: "Pharaoh Regalia", dimension: "outfit", description: "Ancient Egyptian royalty: usekh collar, pectoral, pleated kilt", promptHint: "wearing ancient Egyptian pharaoh regalia \u2014 a broad beaded usekh collar, a jeweled falcon pectoral, and a pleated linen shendyt kilt with golden arm cuffs" },
|
|
3368
3379
|
// -------------------- Top (upper-body garment) --------------------
|
|
3369
3380
|
{ id: "top-tshirt", label: "T-Shirt", dimension: "top", description: "Plain crewneck t-shirt", promptHint: "wearing a fitted plain crewneck t-shirt with short sleeves" },
|
|
3370
3381
|
{ id: "top-tank", label: "Tank Top", dimension: "top", description: "Scoop-neck tank top", promptHint: "wearing a fitted scoop-neck tank top with thin shoulder straps" },
|
|
@@ -3471,6 +3482,8 @@ var STYLINGS = [
|
|
|
3471
3482
|
{ id: "state-tucked-in", label: "Tucked In", dimension: "wardrobe-state", description: "Top tucked into bottom", promptHint: "the top neatly tucked into the bottom" },
|
|
3472
3483
|
{ id: "state-half-tucked", label: "Half-Tucked", dimension: "wardrobe-state", description: "Front-tucked, back loose", promptHint: "the top half-tucked \u2014 front neatly tucked in, back hanging loose" },
|
|
3473
3484
|
{ id: "state-off-shoulder", label: "Off-Shoulder", dimension: "wardrobe-state", description: "Slipped off one shoulder", promptHint: "the top slipped off one shoulder, baring the skin and collarbone" },
|
|
3485
|
+
{ id: "state-halter-neck", label: "Halter Neck", dimension: "wardrobe-state", description: "Straps tied behind the neck", promptHint: "the top cut as a halter \u2014 straps tied behind the neck, shoulders and upper back bare" },
|
|
3486
|
+
{ id: "state-plunging-neck", label: "Plunging Neckline", dimension: "wardrobe-state", description: "Deep plunging V neckline", promptHint: "the neckline cut in a deep plunging V" },
|
|
3474
3487
|
{ id: "state-unbuttoned", label: "Unbuttoned", dimension: "wardrobe-state", description: "Open / unbuttoned", promptHint: "the outerwear hanging open and unbuttoned, falling loose at the sides" },
|
|
3475
3488
|
{ id: "state-rolled-sleeves", label: "Rolled Sleeves", dimension: "wardrobe-state", description: "Sleeves rolled up forearm", promptHint: "the sleeves rolled up to the forearm" },
|
|
3476
3489
|
{ id: "state-layered", label: "Layered", dimension: "wardrobe-state", description: "Multiple stacked layers", promptHint: "the outfit composed of multiple stacked layers, each piece visible at the edges" }
|
|
@@ -3563,9 +3576,12 @@ function buildStylingHints(data) {
|
|
|
3563
3576
|
const hints = [];
|
|
3564
3577
|
const pre = typeof data.preText === "string" ? data.preText.trim() : "";
|
|
3565
3578
|
if (pre) hints.push(pre);
|
|
3579
|
+
const lipStateRaw = data.lipState;
|
|
3580
|
+
const boldRedAlready = Array.isArray(lipStateRaw) ? lipStateRaw.includes("lip-state-bold-red") : lipStateRaw === "lip-state-bold-red";
|
|
3566
3581
|
for (const dimension of STYLING_DIMENSION_ORDER) {
|
|
3567
3582
|
const field = STYLING_FIELD_BY_DIMENSION[dimension];
|
|
3568
3583
|
const raw = data[field];
|
|
3584
|
+
if (dimension === "makeup" && boldRedAlready && raw === "makeup-bold-lips") continue;
|
|
3569
3585
|
if (typeof raw === "string" && raw.length > 0) {
|
|
3570
3586
|
const hint = getStylingPromptHint(raw);
|
|
3571
3587
|
if (hint) hints.push(hint);
|