@nodaro/prompts 1.15.0 → 1.16.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nodaro/prompts",
3
- "version": "1.15.0",
3
+ "version": "1.16.0",
4
4
  "description": "Nodaro's prompt-engineering layer — person/picker catalogs with prompt hints, identity-lock clauses, entity prompt builders, brand presets, and prompt/reference assembly shared by the Nodaro platform and SDK.",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",
@@ -20,7 +20,7 @@
20
20
  "test": "vitest run"
21
21
  },
22
22
  "dependencies": {
23
- "@nodaro/shared": "^2.20.0"
23
+ "@nodaro/shared": "^2.21.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "tsup": "^8.5.0",
@@ -26,6 +26,7 @@ const DELIBERATELY_GENERIC: ReadonlyMap<string, string> = new Map([
26
26
  ["minimax", "legacy 5s tier, no vendor guide"],
27
27
  ["seedance", "legacy Seedance 1.x, superseded"],
28
28
  ["ltx-2.3-fast", "no vendor prompt guide published"],
29
+ ["ltx-2.3-pro", "no vendor prompt guide published"],
29
30
  ["sora2", "roster utility — no first-party guide via KIE"],
30
31
  ["sora2-pro", "roster utility — no first-party guide via KIE"],
31
32
  ])
@@ -686,30 +686,30 @@
686
686
  "expected": "shot on location, warm color palette, orange and red tones throughout the image with golden highlights, no text overlays"
687
687
  },
688
688
  {
689
- "key": "composition-effects/id:bursting-through-frame",
689
+ "key": "composition-effects/id:glitch-distortion",
690
690
  "note": "single-dim catalog id",
691
691
  "node": {
692
692
  "id": "n1",
693
693
  "type": "composition-effects",
694
694
  "data": {
695
- "compositionEffect": "bursting-through-frame"
695
+ "compositionEffect": "glitch-distortion"
696
696
  }
697
697
  },
698
698
  "ctx": null,
699
- "expected": "the subject bursting forward through a torn paper frame in a 3D paper-tear effect, head and shoulders breaking the plane of the canvas with ragged paper edges curling outward"
699
+ "expected": "the subject distorted by digital glitch artifacts with RGB channel separation, scanline tearing and datamoshed compression bands cutting horizontally across the figure"
700
700
  },
701
701
  {
702
- "key": "composition-effects/id:doubled-mirror",
702
+ "key": "composition-effects/id:none",
703
703
  "note": "single-dim catalog id",
704
704
  "node": {
705
705
  "id": "n1",
706
706
  "type": "composition-effects",
707
707
  "data": {
708
- "compositionEffect": "doubled-mirror"
708
+ "compositionEffect": "none"
709
709
  }
710
710
  },
711
711
  "ctx": null,
712
- "expected": "the subject duplicated in mirror reflections, multiplied identity with two or more echoed versions of the figure stitched along an invisible mirror seam"
712
+ "expected": ""
713
713
  },
714
714
  {
715
715
  "key": "composition-effects/id:prism-flares",
@@ -907,7 +907,7 @@
907
907
  "id": "n1",
908
908
  "type": "framing",
909
909
  "data": {
910
- "shotSize": "big-close-up",
910
+ "shotSize": "ecu-hands",
911
911
  "angle": "worms-eye-angle",
912
912
  "coverage": "selfie-framing",
913
913
  "composition": "contact-sheet",
@@ -915,7 +915,7 @@
915
915
  }
916
916
  },
917
917
  "ctx": null,
918
- "expected": "big close-up, tighter than a standard close-up with just the face from chin to forehead, no headroom, worm's eye view, extreme low angle from ground level looking up, selfie framing, subject holding the camera at arm's length to frame themselves, slightly high angle from above, phone-camera perspective with the subject's face and upper body dominant in frame, arm or phone edge sometimes visible, contact sheet layout, multiple sequential thumbnail frames arranged in rows on a black or dark grey background, frame numbers along the edge, mimicking a 35mm film proof sheet, profile shot from the subject's right side"
918
+ "expected": "extreme close-up tight on the hands, every finger and crease visible, worm's eye view, extreme low angle from ground level looking up, selfie framing, subject holding the camera at arm's length to frame themselves, slightly high angle from above, phone-camera perspective with the subject's face and upper body dominant in frame, arm or phone edge sometimes visible, contact sheet layout, multiple sequential thumbnail frames arranged in rows on a black or dark grey background, frame numbers along the edge, mimicking a 35mm film proof sheet, profile shot from the subject's right side"
919
919
  },
920
920
  {
921
921
  "key": "framing/multi-pick",
@@ -1016,43 +1016,43 @@
1016
1016
  "expected": "shot on location, including a sofa, Three-seater sofa with plush cushioned back and seat, low armrests and upholstery in a neutral tone, no text overlays"
1017
1017
  },
1018
1018
  {
1019
- "key": "held-prop/id:chalk",
1019
+ "key": "held-prop/id:handbag",
1020
1020
  "note": "single-dim catalog id",
1021
1021
  "node": {
1022
1022
  "id": "n1",
1023
1023
  "type": "held-prop",
1024
1024
  "data": {
1025
- "heldProp": "chalk"
1025
+ "heldProp": "handbag"
1026
1026
  }
1027
1027
  },
1028
1028
  "ctx": null,
1029
- "expected": "holding a short stick of white chalk between thumb and forefinger, faint chalk dust drifting from the tip as if mid-stroke"
1029
+ "expected": "carrying a structured designer handbag by the top handles in one hand at hip height, the bag positioned cleanly in frame"
1030
1030
  },
1031
1031
  {
1032
- "key": "held-prop/id:shield",
1032
+ "key": "held-prop/id:smartphone",
1033
1033
  "note": "single-dim catalog id",
1034
1034
  "node": {
1035
1035
  "id": "n1",
1036
1036
  "type": "held-prop",
1037
1037
  "data": {
1038
- "heldProp": "shield"
1038
+ "heldProp": "smartphone"
1039
1039
  }
1040
1040
  },
1041
1041
  "ctx": null,
1042
- "expected": "holding a medieval shield raised across the body with one arm strapped through the back, the front face angled forward in a defensive stance"
1042
+ "expected": "holding a modern smartphone in one hand, screen lightly catching the ambient light, fingers wrapped naturally around the device"
1043
1043
  },
1044
1044
  {
1045
- "key": "held-prop/id:smartphone",
1045
+ "key": "held-prop/id:work-gloves",
1046
1046
  "note": "single-dim catalog id",
1047
1047
  "node": {
1048
1048
  "id": "n1",
1049
1049
  "type": "held-prop",
1050
1050
  "data": {
1051
- "heldProp": "smartphone"
1051
+ "heldProp": "work-gloves"
1052
1052
  }
1053
1053
  },
1054
1054
  "ctx": null,
1055
- "expected": "holding a modern smartphone in one hand, screen lightly catching the ambient light, fingers wrapped naturally around the device"
1055
+ "expected": "holding a worn pair of tan leather work gloves in both hands at waist height, the thick weathered leather clearly visible"
1056
1056
  },
1057
1057
  {
1058
1058
  "key": "held-prop/multi-pick",
@@ -1760,7 +1760,7 @@
1760
1760
  "type": "crusader",
1761
1761
  "age": "age-early-20s",
1762
1762
  "ethnicity": "norwegian",
1763
- "regionalAesthetic": "ginza-office",
1763
+ "regionalAesthetic": "shibuya-streetwear",
1764
1764
  "frame": "frame-average",
1765
1765
  "bodyMass": "mass-full",
1766
1766
  "bust": "bust-full",
@@ -1793,7 +1793,7 @@
1793
1793
  }
1794
1794
  },
1795
1795
  "ctx": null,
1796
- "expected": "a Crusader knight — chainmail hauberk under a white surcoat with a red cross emblem, conical helm, longsword and kite shield, devout warrior bearing, in their early 20s, around 21 years old, of Norwegian descent, a Ginza Tokyo office aesthetic — buttoned-up Japanese corporate-elegant vibe, full-figured, full bust, pear-shaped silhouette, a heart-shaped face with a wide forehead and pointed chin, a pointed chin with a narrow jawline, high, defined cheekbones, a lean face with low facial fat and subtle hollowing beneath the cheekbones, double-eyelid eyes with a clearly defined upper crease, droopy eyes with the upper lids sitting low for a soft, sleepy gaze, upturned eyes with the outer corners lifted, positive canthal tilt, close-set eyes set close together, eyes set close beneath the brow with little brow-to-eye distance, hunter eyes, a small button nose with a rounded tip, a slightly upturned nose tip, full plump lips, a wide mouth, with lips pursed, pressed and pushed forward, long straight hair, gray hair, bold defined dark full eyebrows, tan skin, with visible swimwear tan lines on the skin, rare violet eyes with a deep purple iris, gazing off-camera with a contemplative expression, a goatee, with a small face tattoo near the eye or cheekbone"
1796
+ "expected": "a Crusader knight — chainmail hauberk under a white surcoat with a red cross emblem, conical helm, longsword and kite shield, devout warrior bearing, in their early 20s, around 21 years old, of Norwegian descent, a Shibuya streetwear aesthetic — Tokyo street-fashion vibe, layered post-modern mood, full-figured, full bust, pear-shaped silhouette, a heart-shaped face with a wide forehead and pointed chin, a pointed chin with a narrow jawline, high, defined cheekbones, a lean face with low facial fat and subtle hollowing beneath the cheekbones, double-eyelid eyes with a clearly defined upper crease, droopy eyes with the upper lids sitting low for a soft, sleepy gaze, upturned eyes with the outer corners lifted, positive canthal tilt, close-set eyes set close together, eyes set close beneath the brow with little brow-to-eye distance, hunter eyes, a small button nose with a rounded tip, a slightly upturned nose tip, full plump lips, a wide mouth, with lips pursed, pressed and pushed forward, long straight hair, gray hair, bold defined dark full eyebrows, tan skin, with visible swimwear tan lines on the skin, rare violet eyes with a deep purple iris, gazing off-camera with a contemplative expression, a goatee, with a small face tattoo near the eye or cheekbone"
1797
1797
  },
1798
1798
  {
1799
1799
  "key": "person/one-dimension",
@@ -1823,6 +1823,241 @@
1823
1823
  "ctx": null,
1824
1824
  "expected": "shot on location, a man, no text overlays"
1825
1825
  },
1826
+ {
1827
+ "key": "person/w1b:bust-very-full",
1828
+ "note": "W1-b reworded hint — bust-very-full",
1829
+ "node": {
1830
+ "id": "n1",
1831
+ "type": "person",
1832
+ "data": {
1833
+ "bust": "bust-very-full"
1834
+ }
1835
+ },
1836
+ "ctx": null,
1837
+ "expected": "a fuller bust"
1838
+ },
1839
+ {
1840
+ "key": "person/w1b:eye-state-half-lidded",
1841
+ "note": "W1-b reworded hint — eye-state-half-lidded",
1842
+ "node": {
1843
+ "id": "n1",
1844
+ "type": "person",
1845
+ "data": {
1846
+ "eyeState": [
1847
+ "eye-state-half-lidded"
1848
+ ]
1849
+ }
1850
+ },
1851
+ "ctx": null,
1852
+ "expected": "with drowsy, partly closed eyes, the lids sitting low over the iris"
1853
+ },
1854
+ {
1855
+ "key": "person/w1b:eye-state-staring-camera",
1856
+ "note": "W1-b reworded hint — eye-state-staring-camera",
1857
+ "node": {
1858
+ "id": "n1",
1859
+ "type": "person",
1860
+ "data": {
1861
+ "eyeState": [
1862
+ "eye-state-staring-camera"
1863
+ ]
1864
+ }
1865
+ },
1866
+ "ctx": null,
1867
+ "expected": "looking directly into the camera"
1868
+ },
1869
+ {
1870
+ "key": "person/w1b:feature-bare-shoulders",
1871
+ "note": "W1-b reworded hint — feature-bare-shoulders",
1872
+ "node": {
1873
+ "id": "n1",
1874
+ "type": "person",
1875
+ "data": {
1876
+ "distinctiveFeature": [
1877
+ "feature-bare-shoulders"
1878
+ ]
1879
+ }
1880
+ },
1881
+ "ctx": null,
1882
+ "expected": "with the shoulders uncovered"
1883
+ },
1884
+ {
1885
+ "key": "person/w1b:feature-collarbone-visible",
1886
+ "note": "W1-b reworded hint — feature-collarbone-visible",
1887
+ "node": {
1888
+ "id": "n1",
1889
+ "type": "person",
1890
+ "data": {
1891
+ "distinctiveFeature": [
1892
+ "feature-collarbone-visible"
1893
+ ]
1894
+ }
1895
+ },
1896
+ "ctx": null,
1897
+ "expected": "with an open neckline that leaves the collarbones uncovered"
1898
+ },
1899
+ {
1900
+ "key": "person/w1b:feature-midriff-visible",
1901
+ "note": "W1-b reworded hint — feature-midriff-visible",
1902
+ "node": {
1903
+ "id": "n1",
1904
+ "type": "person",
1905
+ "data": {
1906
+ "distinctiveFeature": [
1907
+ "feature-midriff-visible"
1908
+ ]
1909
+ }
1910
+ },
1911
+ "ctx": null,
1912
+ "expected": "with a cropped hemline"
1913
+ },
1914
+ {
1915
+ "key": "person/w1b:lip-state-bitten",
1916
+ "note": "W1-b reworded hint — lip-state-bitten",
1917
+ "node": {
1918
+ "id": "n1",
1919
+ "type": "person",
1920
+ "data": {
1921
+ "lipState": [
1922
+ "lip-state-bitten"
1923
+ ]
1924
+ }
1925
+ },
1926
+ "ctx": null,
1927
+ "expected": "lightly biting the lower lip"
1928
+ },
1929
+ {
1930
+ "key": "person/w1b:lip-state-glossy",
1931
+ "note": "W1-b reworded hint — lip-state-glossy",
1932
+ "node": {
1933
+ "id": "n1",
1934
+ "type": "person",
1935
+ "data": {
1936
+ "lipState": [
1937
+ "lip-state-glossy"
1938
+ ]
1939
+ }
1940
+ },
1941
+ "ctx": null,
1942
+ "expected": "with a glossy lip finish"
1943
+ },
1944
+ {
1945
+ "key": "person/w1b:lip-state-parted",
1946
+ "note": "W1-b reworded hint — lip-state-parted",
1947
+ "node": {
1948
+ "id": "n1",
1949
+ "type": "person",
1950
+ "data": {
1951
+ "lipState": [
1952
+ "lip-state-parted"
1953
+ ]
1954
+ }
1955
+ },
1956
+ "ctx": null,
1957
+ "expected": "with lips relaxed and slightly open, as if mid-sentence"
1958
+ },
1959
+ {
1960
+ "key": "person/w1b:midriff+navel-fold",
1961
+ "note": "W1-b reworded hard-coded midriff+navel fold clause",
1962
+ "node": {
1963
+ "id": "n1",
1964
+ "type": "person",
1965
+ "data": {
1966
+ "distinctiveFeature": [
1967
+ "feature-midriff-visible",
1968
+ "feature-navel-visible"
1969
+ ]
1970
+ }
1971
+ },
1972
+ "ctx": null,
1973
+ "expected": "with a cropped hemline and the navel showing"
1974
+ },
1975
+ {
1976
+ "key": "person/w1b:silhouette-hourglass",
1977
+ "note": "W1-b reworded hint — silhouette-hourglass",
1978
+ "node": {
1979
+ "id": "n1",
1980
+ "type": "person",
1981
+ "data": {
1982
+ "silhouette": "silhouette-hourglass"
1983
+ }
1984
+ },
1985
+ "ctx": null,
1986
+ "expected": "an hourglass figure"
1987
+ },
1988
+ {
1989
+ "key": "person/w1b:texture-baby-soft",
1990
+ "note": "W1-b reworded hint — texture-baby-soft",
1991
+ "node": {
1992
+ "id": "n1",
1993
+ "type": "person",
1994
+ "data": {
1995
+ "skinTexture": [
1996
+ "texture-baby-soft"
1997
+ ]
1998
+ }
1999
+ },
2000
+ "ctx": null,
2001
+ "expected": "with soft, fine-pored skin"
2002
+ },
2003
+ {
2004
+ "key": "person/w1b:texture-dewy",
2005
+ "note": "W1-b reworded hint — texture-dewy",
2006
+ "node": {
2007
+ "id": "n1",
2008
+ "type": "person",
2009
+ "data": {
2010
+ "skinTexture": [
2011
+ "texture-dewy"
2012
+ ]
2013
+ }
2014
+ },
2015
+ "ctx": null,
2016
+ "expected": "with dewy, luminous skin"
2017
+ },
2018
+ {
2019
+ "key": "person/w1b:texture-glistening",
2020
+ "note": "W1-b reworded hint — texture-glistening",
2021
+ "node": {
2022
+ "id": "n1",
2023
+ "type": "person",
2024
+ "data": {
2025
+ "skinTexture": [
2026
+ "texture-glistening"
2027
+ ]
2028
+ }
2029
+ },
2030
+ "ctx": null,
2031
+ "expected": "with a light glistening sheen on the skin"
2032
+ },
2033
+ {
2034
+ "key": "person/w1b:texture-shower-fresh-wet",
2035
+ "note": "W1-b reworded hint — texture-shower-fresh-wet",
2036
+ "node": {
2037
+ "id": "n1",
2038
+ "type": "person",
2039
+ "data": {
2040
+ "skinTexture": [
2041
+ "texture-shower-fresh-wet"
2042
+ ]
2043
+ }
2044
+ },
2045
+ "ctx": null,
2046
+ "expected": "with fresh, water-dappled skin as if just out of the shower"
2047
+ },
2048
+ {
2049
+ "key": "person/w1b:waist-defined",
2050
+ "note": "W1-b reworded hint — waist-defined",
2051
+ "node": {
2052
+ "id": "n1",
2053
+ "type": "person",
2054
+ "data": {
2055
+ "waist": "waist-defined"
2056
+ }
2057
+ },
2058
+ "ctx": null,
2059
+ "expected": "a defined waistline"
2060
+ },
1826
2061
  {
1827
2062
  "key": "photo-genre/id:fashion-editorial",
1828
2063
  "note": "single-dim catalog id",
@@ -1985,6 +2220,19 @@
1985
2220
  "ctx": null,
1986
2221
  "expected": "shot on location, standing upright in a relaxed natural posture, no text overlays"
1987
2222
  },
2223
+ {
2224
+ "key": "pose/w1b:biting-lip",
2225
+ "note": "W1-b reworded pose twin of lip-state-bitten",
2226
+ "node": {
2227
+ "id": "n1",
2228
+ "type": "pose",
2229
+ "data": {
2230
+ "pose": "biting-lip"
2231
+ }
2232
+ },
2233
+ "ctx": null,
2234
+ "expected": "lightly biting the lower lip, a subtle playful expression"
2235
+ },
1988
2236
  {
1989
2237
  "key": "post-process-effects/id:film-burn",
1990
2238
  "note": "single-dim catalog id",
@@ -2134,17 +2382,17 @@
2134
2382
  "expected": "set in a cozy coffee shop interior with warm pendant lights, exposed brick walls and steam drifting over espresso machines"
2135
2383
  },
2136
2384
  {
2137
- "key": "setting/id:neon-alley",
2385
+ "key": "setting/id:park",
2138
2386
  "note": "single-dim catalog id",
2139
2387
  "node": {
2140
2388
  "id": "n1",
2141
2389
  "type": "setting",
2142
2390
  "data": {
2143
- "setting": "neon-alley"
2391
+ "setting": "park"
2144
2392
  }
2145
2393
  },
2146
2394
  "ctx": null,
2147
- "expected": "set in a rain-soaked neon-lit alley in a Tokyo-style nightlife district with glowing kanji signs, steam vents and reflective puddles"
2395
+ "expected": "set in a leafy urban park with winding footpaths, wooden benches, tall shade trees, people lounging on grass and sunlight filtering through leaves"
2148
2396
  },
2149
2397
  {
2150
2398
  "key": "setting/id:wasteland",
@@ -2214,30 +2462,30 @@
2214
2462
  "expected": "3D rendered style, modern CGI aesthetic with clean shading, subtle ambient occlusion and crisp materials"
2215
2463
  },
2216
2464
  {
2217
- "key": "style/id:isometric",
2465
+ "key": "style/id:early-color-photo",
2218
2466
  "note": "single-dim catalog id",
2219
2467
  "node": {
2220
2468
  "id": "n1",
2221
2469
  "type": "style",
2222
2470
  "data": {
2223
- "style": "isometric"
2471
+ "style": "early-color-photo"
2224
2472
  }
2225
2473
  },
2226
2474
  "ctx": null,
2227
- "expected": "isometric style, 3/4 axonometric projection with clean geometric forms, bright saturated flat colors and uniform lighting like a tile-based game or architectural diagram"
2475
+ "expected": "rendered as an early-1900s color photograph in the Prokudin-Gorsky / autochrome tradition — soft three-colour-separation registration, muted dye-toned palette, fine grain and a gentle antique warmth"
2228
2476
  },
2229
2477
  {
2230
- "key": "style/id:manga",
2478
+ "key": "style/id:isometric",
2231
2479
  "note": "single-dim catalog id",
2232
2480
  "node": {
2233
2481
  "id": "n1",
2234
2482
  "type": "style",
2235
2483
  "data": {
2236
- "style": "manga"
2484
+ "style": "isometric"
2237
2485
  }
2238
2486
  },
2239
2487
  "ctx": null,
2240
- "expected": "rendered as inked manga panel art, crisp black ink on white with confident line weight variation, screen-tone dot patterns for shading, dramatic speed lines and the distinctly Japanese black-and-white comic aesthetic — separate from full-color anime"
2488
+ "expected": "isometric style, 3/4 axonometric projection with clean geometric forms, bright saturated flat colors and uniform lighting like a tile-based game or architectural diagram"
2241
2489
  },
2242
2490
  {
2243
2491
  "key": "style/pre-post",
@@ -2299,7 +2547,7 @@
2299
2547
  "jewelry": "jewelry-body-chain",
2300
2548
  "nails": "nails-french",
2301
2549
  "facePaint": "face-paint-warpaint",
2302
- "outfit": "outfit-pharaoh",
2550
+ "outfit": "outfit-caftan",
2303
2551
  "top": "top-bandeau",
2304
2552
  "bottom": "bottom-bike-shorts",
2305
2553
  "outerwear": "outerwear-fur-coat",
@@ -2310,7 +2558,7 @@
2310
2558
  }
2311
2559
  },
2312
2560
  "ctx": null,
2313
- "expected": "with dewy makeup, glowing fresh skin and minimal coverage, in thin neat sisterlocks, with a rooted look — visible darker roots blending into lighter lengths, with hair flowing freely, strands cascading and rippling with subtle movement, wearing wraparound sport sunglasses, wearing a wide-brim Western cowboy hat with a creased crown, wearing a thin metallic body chain draped across the torso, with classic French tip manicure, with warrior war paint streaked across the face, wearing ancient Egyptian pharaoh regalia — a broad beaded usekh collar, a jeweled falcon pectoral, and a pleated linen shendyt kilt with golden arm cuffs, wearing a strapless bandeau top wrapped across the chest, in fitted lycra bike shorts ending mid-thigh, wearing a plush fur coat with a deep textured pile, with bunched knit leg warmers stacked over the calves, in woven jute-sole espadrilles with a canvas upper, a casual summer shoe, wearing glossy latex with a high-shine liquid look clinging to the body, the outfit composed of multiple stacked layers, each piece visible at the edges"
2561
+ "expected": "with dewy makeup, glowing fresh skin and minimal coverage, in thin neat sisterlocks, with a rooted look — visible darker roots blending into lighter lengths, with hair flowing freely, strands cascading and rippling with subtle movement, wearing wraparound sport sunglasses, wearing a wide-brim Western cowboy hat with a creased crown, wearing a thin metallic body chain draped across the torso, with classic French tip manicure, with warrior war paint streaked across the face, dressed in a long flowing caftan robe, a full-length garment worn across the Middle East and North Africa, wearing a strapless bandeau top wrapped across the chest, in fitted lycra bike shorts ending mid-thigh, wearing a plush fur coat with a deep textured pile, with bunched knit leg warmers stacked over the calves, in woven jute-sole espadrilles with a canvas upper, a casual summer shoe, wearing glossy latex with a high-shine liquid look clinging to the body, the outfit composed of multiple stacked layers, each piece visible at the edges"
2314
2562
  },
2315
2563
  {
2316
2564
  "key": "styling/mid-of-each",
@@ -2328,7 +2576,7 @@
2328
2576
  "jewelry": "jewelry-choker-leather",
2329
2577
  "nails": "nails-dark",
2330
2578
  "facePaint": "face-paint-tribal",
2331
- "outfit": "outfit-pajamas",
2579
+ "outfit": "outfit-bathrobe",
2332
2580
  "top": "top-camisole",
2333
2581
  "bottom": "bottom-shorts",
2334
2582
  "outerwear": "outerwear-puffer",
@@ -2339,7 +2587,7 @@
2339
2587
  }
2340
2588
  },
2341
2589
  "ctx": null,
2342
- "expected": "with bold lips, a strong red or dark lipstick as the focal point, side-swept across the face with strands falling over one eye, with sombré — a subtle, soft ombré gradient, with hair full of volume, blown out and bouncy with body and lift at the roots, wearing round wire-frame glasses, John Lennon style, wearing a striped pharaonic nemes headdress with a golden uraeus cobra at the brow, wearing a black leather choker fitted close around the throat, with dark black nail polish, with tribal-inspired face markings, in a soft cotton pajama set — a button-up top and matching pants, wearing a thin satin camisole with delicate spaghetti straps, in casual mid-thigh shorts, wearing a quilted puffer jacket with horizontal baffles and a stand-up collar, with lace-topped thigh-high stockings cinched mid-thigh, in polished leather penny loafers, wearing warm woven wool with a soft matte surface and visible fibers, the top neatly tucked into the bottom"
2590
+ "expected": "with bold lips, a strong red or dark lipstick as the focal point, side-swept across the face with strands falling over one eye, with sombré — a subtle, soft ombré gradient, with hair full of volume, blown out and bouncy with body and lift at the roots, wearing round wire-frame glasses, John Lennon style, wearing a striped pharaonic nemes headdress with a golden uraeus cobra at the brow, wearing a black leather choker fitted close around the throat, with dark black nail polish, with tribal-inspired face markings, wrapped in a plush terrycloth bathrobe tied at the waist, wearing a thin satin camisole with delicate spaghetti straps, in casual mid-thigh shorts, wearing a quilted puffer jacket with horizontal baffles and a stand-up collar, with lace-topped thigh-high stockings cinched mid-thigh, in polished leather penny loafers, wearing warm woven wool with a soft matte surface and visible fibers, the top neatly tucked into the bottom"
2343
2591
  },
2344
2592
  {
2345
2593
  "key": "styling/one-dimension",
@@ -2369,6 +2617,36 @@
2369
2617
  "ctx": null,
2370
2618
  "expected": "shot on location, with natural, subtle no-makeup makeup, no text overlays"
2371
2619
  },
2620
+ {
2621
+ "key": "styling/w1b:state-fitted",
2622
+ "note": "W1-b reworded hint — state-fitted",
2623
+ "node": {
2624
+ "id": "n1",
2625
+ "type": "styling",
2626
+ "data": {
2627
+ "wardrobeState": [
2628
+ "state-fitted"
2629
+ ]
2630
+ }
2631
+ },
2632
+ "ctx": null,
2633
+ "expected": "tailored, close-fitting clothing"
2634
+ },
2635
+ {
2636
+ "key": "styling/w1b:state-wet",
2637
+ "note": "W1-b reworded hint — state-wet",
2638
+ "node": {
2639
+ "id": "n1",
2640
+ "type": "styling",
2641
+ "data": {
2642
+ "wardrobeState": [
2643
+ "state-wet"
2644
+ ]
2645
+ }
2646
+ },
2647
+ "ctx": null,
2648
+ "expected": "the clothing soaked through and dripping"
2649
+ },
2372
2650
  {
2373
2651
  "key": "temporal/first-of-each",
2374
2652
  "note": "multi-dim: first-of-each across 4 dimensions",
@@ -2511,17 +2789,17 @@
2511
2789
  "expected": "the first and second scenes blend as a translucent double exposure where both images coexist semi-transparently on the frame, the first image then gradually fades out leaving the second image fully resolved"
2512
2790
  },
2513
2791
  {
2514
- "key": "transition/id:wireframe-morph",
2792
+ "key": "transition/id:dream-ripple",
2515
2793
  "note": "single-dim catalog id",
2516
2794
  "node": {
2517
2795
  "id": "n1",
2518
2796
  "type": "transition",
2519
2797
  "data": {
2520
- "transition": "wireframe-morph"
2798
+ "transition": "dream-ripple"
2521
2799
  }
2522
2800
  },
2523
2801
  "ctx": null,
2524
- "expected": "the first subject's surface peels away to reveal a glowing geometric wireframe of polygons and edges, the wireframe flexes and re-tessellates into the topology of the new subject, then the new surface skins over the wireframe"
2802
+ "expected": "a circular ripple radiates outward across the frame as if the image were the surface of water, and where the ripple passes the first scene is replaced by the second scene"
2525
2803
  },
2526
2804
  {
2527
2805
  "key": "transition/multi-pick",
@@ -21,9 +21,9 @@ describe("Layer 1 — the collectors drop adultOnly entries for a minor", () =>
21
21
  const joined = hints.join(", ")
22
22
  expect(joined).toContain("a young child around 5 years old")
23
23
  expect(joined).toContain("slim")
24
- expect(joined).not.toMatch(/bust|midriff|lips slightly parted|soft breath/i)
24
+ expect(joined).not.toMatch(/bust|midriff|cropped hemline|slightly open|mid-sentence/i)
25
25
  // eye-state-staring-camera and texture-baby-soft are NOT flagged — they stay.
26
- expect(joined).toContain("staring directly at the camera with unbroken eye contact")
26
+ expect(joined).toContain("looking directly into the camera")
27
27
  })
28
28
 
29
29
  it("compact mode drops the same ids", () => {
@@ -34,13 +34,13 @@ describe("Layer 1 — the collectors drop adultOnly entries for a minor", () =>
34
34
  it("styling on the flat subject bag drops flagged garments when the bag says minor", () => {
35
35
  const hints = buildStylingHints({ age: "age-child", wardrobeState: ["state-fitted"], top: "top-crop-top", outfit: "outfit-bikini" } as never)
36
36
  const joined = hints.join(", ")
37
- expect(joined).not.toMatch(/hugging the contours|bikini/i)
37
+ expect(joined).not.toMatch(/close-fitting|bikini/i)
38
38
  expect(joined).toMatch(/cropped top/i) // top-crop-top is deliberately NOT flagged
39
39
  })
40
40
 
41
41
  it("styling with no age signal on the bag is untouched (separate-node consumers; Layer 2 covers them)", () => {
42
42
  const hints = buildStylingHints({ wardrobeState: ["state-fitted"] } as never)
43
- expect(hints.join(", ")).toMatch(/hugging the contours/i)
43
+ expect(hints.join(", ")).toMatch(/close-fitting/i)
44
44
  })
45
45
 
46
46
  it("adults are byte-identical to before: every flagged entry still emits for age-30s", () => {
@@ -18,7 +18,7 @@ describe("buildPersonHints — body proportion axes", () => {
18
18
  silhouette: "silhouette-hourglass",
19
19
  })
20
20
  expect(hints.join(", ")).toBe(
21
- "slim, lean build, full bust, defined waist, hourglass silhouette",
21
+ "slim, lean build, full bust, a defined waistline, an hourglass figure",
22
22
  )
23
23
  })
24
24
 
@@ -56,7 +56,7 @@ describe("buildPersonHints — body proportion axes", () => {
56
56
  })
57
57
 
58
58
  it("Bust:Very Full emits the distinct very-full token", () => {
59
- expect(buildPersonHints({ bust: "bust-very-full" })).toEqual(["very full bust"])
59
+ expect(buildPersonHints({ bust: "bust-very-full" })).toEqual(["a fuller bust"])
60
60
  })
61
61
 
62
62
  it("ignores stored values for the retired Build / Body Proportions keys (no migration)", () => {