@nodaro/prompts 1.19.0 → 1.21.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.
Files changed (55) hide show
  1. package/dist/index.cjs +11175 -1797
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +280 -41
  4. package/dist/index.d.ts +280 -41
  5. package/dist/index.js +10049 -686
  6. package/dist/index.js.map +1 -1
  7. package/package.json +2 -2
  8. package/src/__tests__/adult-only-ratchet.test.ts +26 -1
  9. package/src/__tests__/character-motion-audit.test.ts +77 -0
  10. package/src/__tests__/character-motion-docs-example.test.ts +26 -0
  11. package/src/__tests__/character-motion-exit-visibility.test.ts +183 -0
  12. package/src/__tests__/character-motion-partner-referent.test.ts +225 -0
  13. package/src/__tests__/character-motion-timing-catalogs.test.ts +76 -0
  14. package/src/__tests__/character-motion.test.ts +214 -0
  15. package/src/__tests__/fixtures/parameter-hint-golden.json +136 -0
  16. package/src/__tests__/frame-delivery.test.ts +93 -0
  17. package/src/__tests__/graph-composed-unwired-identity.test.ts +166 -0
  18. package/src/__tests__/parameter-hint-mode.test.ts +28 -0
  19. package/src/__tests__/parameter-prompt-hint.test.ts +165 -0
  20. package/src/__tests__/parameter-registry-sync.test.ts +2 -0
  21. package/src/__tests__/picker-analyzer-registry.test.ts +1 -1
  22. package/src/__tests__/transition-timing-catalogs.test.ts +1 -1
  23. package/src/__tests__/video-reference-features.test.ts +10 -1
  24. package/src/age-floor.ts +1 -1
  25. package/src/character-motion/animals-pets.ts +116 -0
  26. package/src/character-motion/athletic-stunts.ts +159 -0
  27. package/src/character-motion/camera-interaction.ts +96 -0
  28. package/src/character-motion/combat-weapons.ts +147 -0
  29. package/src/character-motion/dance.ts +125 -0
  30. package/src/character-motion/entrances-exits.ts +92 -0
  31. package/src/character-motion/evasive-falls.ts +92 -0
  32. package/src/character-motion/everyday-actions.ts +237 -0
  33. package/src/character-motion/face-expression.ts +129 -0
  34. package/src/character-motion/gestures.ts +215 -0
  35. package/src/character-motion/head-gestures.ts +70 -0
  36. package/src/character-motion/idle-ambient.ts +89 -0
  37. package/src/character-motion/posture-shifts.ts +120 -0
  38. package/src/character-motion/runway.ts +77 -0
  39. package/src/character-motion/stage-performance.ts +96 -0
  40. package/src/character-motion/turns-looks.ts +90 -0
  41. package/src/character-motion/two-person.ts +245 -0
  42. package/src/character-motion/types.ts +45 -0
  43. package/src/character-motion/unnatural-horror.ts +57 -0
  44. package/src/character-motion/vehicles-mounts.ts +105 -0
  45. package/src/character-motion/walks-runs.ts +97 -0
  46. package/src/character-motion-diagnostics.ts +49 -0
  47. package/src/character-motion.ts +362 -0
  48. package/src/frame-delivery.ts +106 -0
  49. package/src/index.ts +5 -0
  50. package/src/parameter-prompt-hint.ts +71 -0
  51. package/src/picker-analyzer-registry.ts +9 -5
  52. package/src/picker-catalogs.ts +33 -1
  53. package/src/picker-wiring.ts +2 -0
  54. package/src/prompt-wizard-categories.ts +0 -2
  55. package/src/provider-prompt-doctrine.ts +1 -1
@@ -0,0 +1,237 @@
1
+ import type { CharacterMotion } from "./types.js"
2
+
3
+ /** everyday-actions — authored motion fragments. Stable ids survive copy revisions. */
4
+ export const EVERYDAY_ACTIONS_MOTIONS: ReadonlyArray<CharacterMotion> = [
5
+ { "id": "take-a-sip", "label": "Take a sip", "category": "everyday-actions", "description": "Lifts a cup to the lips, sips, lowers it",
6
+ "promptHint": "the subject lifts a cup from waist height to the lips with one hand, tips it and sips, then lowers it back down and swallows", "term": "takes a sip from a cup" },
7
+ { "id": "drink-from-bottle", "label": "Drink from bottle", "category": "everyday-actions", "description": "Tips a bottle up, head back, drinks",
8
+ "promptHint": "the subject raises a bottle to the mouth, tilts the head back as the bottle tips up and drinks, then lowers it and wipes the mouth with the back of the hand", "term": "drinks from a bottle" },
9
+ { "id": "cradle-mug-and-sip", "label": "Sip from a cradled mug", "category": "everyday-actions", "description": "Holds a mug in both hands, takes a sip and lowers it.",
10
+ "promptHint": "the subject holds a mug in both hands, raises it to the lips for a sip and lowers it to chest height", "term": "sips from a mug held in both hands",
11
+ "requires": ["mug"], "aliases": ["Cradle Mug and Sip"], "handsAfter": "occupied" },
12
+ { "id": "take-a-bite", "label": "Take a bite", "category": "everyday-actions", "description": "Bites into food, lowers it, chews and swallows",
13
+ "promptHint": "the subject raises a piece of food to the mouth, bites into it, lowers the hand and chews with the jaw working, then swallows", "term": "takes a bite and chews" },
14
+ { "id": "put-on-jacket", "label": "Put on jacket", "category": "everyday-actions", "description": "Threads both arms in, settles the collar",
15
+ "promptHint": "the subject slides one arm into a jacket sleeve, swings the jacket around the back, threads the other arm through, then tugs the collar and shoulders into place", "term": "shrugs on a jacket" },
16
+ { "id": "take-off-jacket", "label": "Take off jacket", "category": "everyday-actions", "description": "Shrugs the jacket off one shoulder at a time",
17
+ "promptHint": "the subject unfastens the jacket, shrugs it off one shoulder then the other, pulls both arms free and lets it hang from one hand", "term": "shrugs off a jacket" },
18
+ { "id": "put-on-sunglasses", "label": "Put on sunglasses", "category": "everyday-actions", "description": "Unfolds sunglasses and settles them on",
19
+ "promptHint": "the subject unfolds a pair of sunglasses with one hand, raises them to the face and settles them onto the nose, then lets the hand drop", "term": "puts on sunglasses" },
20
+ { "id": "take-off-sunglasses", "label": "Take off sunglasses", "category": "everyday-actions", "description": "Pulls sunglasses off and folds them",
21
+ "promptHint": "the subject reaches up with one hand, pinches the sunglasses by the frame and pulls them off the face, folding them as the hand lowers", "term": "takes off sunglasses" },
22
+ { "id": "put-on-glasses", "label": "Put on glasses", "category": "everyday-actions", "description": "Hooks eyeglasses over the ears, pushes them up",
23
+ "promptHint": "the subject unfolds a pair of eyeglasses, raises them to the face with one hand and hooks the arms over the ears, then pushes them up the nose with one finger", "term": "puts on eyeglasses" },
24
+ { "id": "take-off-glasses", "label": "Take off glasses", "category": "everyday-actions", "description": "Lifts eyeglasses off the face and folds them",
25
+ "promptHint": "the subject reaches up with one hand, pinches the eyeglasses by one arm and lifts them off the face, folds them and lowers the hand", "term": "takes off eyeglasses" },
26
+ { "id": "put-on-hat", "label": "Put on hat", "category": "everyday-actions", "description": "Settles a hat on and adjusts the brim",
27
+ "promptHint": "the subject lifts a hat with both hands, settles it onto the head, then adjusts the brim with one hand until it sits straight", "term": "puts on a hat" },
28
+ { "id": "take-off-hat", "label": "Take off hat", "category": "everyday-actions", "description": "Lifts the hat clear and lowers it to the chest",
29
+ "promptHint": "the subject grips the hat by the crown or brim, lifts it clear of the head and lowers it to chest height as the hair settles", "term": "takes off a hat" },
30
+ { "id": "pull-up-hood", "label": "Pull up hood", "category": "everyday-actions", "description": "Pulls the hood up and forward over the head",
31
+ "promptHint": "the subject reaches back with both hands, grabs the edge of the hood and pulls it up and forward over the head, then tugs the front edges down", "term": "pulls the hood up" },
32
+ { "id": "wrap-scarf", "label": "Wrap scarf", "category": "everyday-actions", "description": "Loops a scarf around the neck, tucks the ends",
33
+ "promptHint": "the subject drapes a scarf around the back of the neck, wraps one end across the front and around, then tucks both tails into the coat collar", "term": "wraps a scarf around the neck" },
34
+ { "id": "loosen-tie", "label": "Loosen tie", "category": "everyday-actions", "description": "Tugs the knot down and pops the top button",
35
+ "promptHint": "the subject hooks one finger into the tie knot, tugs it down and to the side, then pops the top shirt button open and lets the arm drop", "term": "loosens the tie" },
36
+ { "id": "open-door", "label": "Open a door", "category": "everyday-actions", "description": "Turns the handle and swings the door open.",
37
+ "promptHint": "the subject reaches for the door handle, turns it and swings the door open while remaining at the threshold", "term": "opens a door",
38
+ "requires": ["door"], "handsAfter": "occupied", "aliases": ["Open Door"] },
39
+ { "id": "close-door", "label": "Close door", "category": "everyday-actions", "description": "Turns back and swings the door shut",
40
+ "promptHint": "the subject turns back to the open door, swings it closed and holds the handle until it clicks shut", "term": "turns back and shuts the door" },
41
+ { "id": "knock-on-door", "label": "Knock on door", "category": "everyday-actions", "description": "Raps the knuckles on a door and waits",
42
+ "promptHint": "the subject raises one hand in a loose fist and raps the knuckles against a door two or three times, then drops the hand and waits", "term": "knocks on a door" },
43
+ { "id": "pound-on-door", "label": "Pound on door", "category": "everyday-actions", "description": "Hammers a fist on the door with body weight",
44
+ "promptHint": "the subject hammers the heel of a fist against a door with the whole arm, leaning the body weight into each blow, then slaps the palm flat against it", "term": "pounds on the door with a fist" },
45
+ { "id": "rattle-locked-door-handle", "label": "Rattle locked door handle", "category": "everyday-actions", "description": "Jerks the handle, shoulders the door, steps back",
46
+ "promptHint": "the subject grabs a door handle, jerks it up and down and shoves one shoulder against the door, then steps back from it", "term": "rattles a locked door handle" },
47
+ { "id": "unlock-door-with-keys", "label": "Unlock door with keys", "category": "everyday-actions", "description": "Selects a key, turns the lock, pushes in",
48
+ "promptHint": "the subject fishes keys from a pocket, selects one, slides it into the lock, turns it and pushes the door open", "term": "unlocks a door with keys" },
49
+ { "id": "press-palm-to-window", "label": "Press palm to window", "category": "everyday-actions", "description": "Presses a palm flat to the glass, head tilts",
50
+ "promptHint": "the subject steps up to a window, raises one hand and presses the palm flat against the glass, holding it there as the head tilts forward", "term": "presses a palm to the window" },
51
+ { "id": "draw-back-curtains", "label": "Draw back curtains", "category": "everyday-actions", "description": "Pulls the curtains apart to the sides",
52
+ "promptHint": "the subject grasps the edges of a pair of curtains with both hands and draws them apart to the sides, then lets go and stands facing the window", "term": "draws the curtains open" },
53
+ { "id": "pull-back-shower-curtain", "label": "Pull back shower curtain", "category": "everyday-actions", "description": "Yanks the shower curtain aside in one sweep",
54
+ "promptHint": "the subject grips the edge of a shower curtain with one hand and yanks it aside in a single sweep, the other arm held back at the side", "term": "pulls back the shower curtain" },
55
+ { "id": "wipe-steam-off-mirror", "label": "Wipe steam off mirror", "category": "everyday-actions", "description": "Clears a patch of fogged mirror with the palm",
56
+ "promptHint": "the subject raises one hand and wipes the palm across a fogged mirror in a broad arc, clearing a patch, then leans in to look at the reflection", "term": "wipes steam off the mirror" },
57
+ { "id": "check-reflection-in-mirror", "label": "Check reflection in mirror", "category": "everyday-actions", "description": "Leans into the mirror, turns the head, adjusts",
58
+ "promptHint": "the subject steps up to a mirror, leans in toward the reflection, turns the head from side to side, then smooths the hair with one hand and straightens up", "term": "checks reflection in a mirror" },
59
+ { "id": "pick-up-object", "label": "Pick up object", "category": "everyday-actions", "description": "Bends down, grasps an object, straightens up",
60
+ "promptHint": "the subject bends at the knees and waist, reaches down with one hand to grasp an object, then straightens up lifting it to waist height", "term": "bends down and picks up an object" },
61
+ { "id": "put-down-object", "label": "Put down object", "category": "everyday-actions", "description": "Sets an object on a surface and lets go",
62
+ "promptHint": "the subject lowers an object held in one hand onto a nearby surface, sets it down with care, releases the grip and withdraws the hand", "term": "sets an object down" },
63
+ { "id": "drop-object", "label": "Drop object", "category": "everyday-actions", "description": "Lets an object slip from the hand, watches it fall",
64
+ "promptHint": "the subject opens the hand and lets an object slip free, the eyes following it down until it hits the floor", "term": "drops an object" },
65
+ { "id": "fumble-and-catch", "label": "Fumble and catch", "category": "everyday-actions", "description": "Juggles a slipping object, clutches it to the chest",
66
+ "promptHint": "the subject lets an object slip from the grip, juggles it between both hands as it bounces, then clutches it to the chest with both arms", "term": "fumbles and catches an object" },
67
+ { "id": "throw-object-across-room", "label": "Throw object across room", "category": "everyday-actions", "description": "Snatches an object and hurls it, full follow-through",
68
+ "promptHint": "the subject snatches up an object, cocks the arm back and hurls it across the room, the torso twisting through the throw and the arm following through", "term": "hurls an object across the room" },
69
+ { "id": "sweep-desk-clear", "label": "Sweep desk clear", "category": "everyday-actions", "description": "Sweeps a forearm across the desk, everything falls",
70
+ "promptHint": "the subject plants one hand on the desk edge and sweeps the other forearm across the surface, sending everything on it tumbling off the far side", "term": "sweeps everything off the desk" },
71
+ { "id": "carry-heavy-box", "label": "Carry heavy box", "category": "everyday-actions", "description": "Squats, lifts a big box to the chest, walks",
72
+ "promptHint": "the subject squats beside a large box, wraps both arms under it and drives up through the legs to lift it against the chest, then walks forward leaning back against the weight", "term": "lifts and carries a heavy box" },
73
+ { "id": "reach-for-high-shelf", "label": "Reach for high shelf", "category": "everyday-actions", "description": "Rises on tiptoes, stretches up, grabs an item",
74
+ "promptHint": "the subject rises onto the toes and stretches one arm straight up toward a high shelf, fingertips straining for an item, then grasps it and settles back onto the heels", "term": "reaches up on tiptoes for a shelf" },
75
+ { "id": "open-box", "label": "Open box", "category": "everyday-actions", "description": "Lifts the lid off and looks inside",
76
+ "promptHint": "the subject grips the lid of a box with both hands, lifts it off and sets it aside, then leans forward to look inside", "term": "opens a box and looks inside" },
77
+ { "id": "unwrap-gift", "label": "Unwrap gift", "category": "everyday-actions", "description": "Pulls the ribbon, tears the paper, lifts the lid",
78
+ "promptHint": "the subject tugs the ribbon loose on a wrapped gift, tears the paper away with both hands, and lifts the lid to reveal what is inside", "term": "unwraps a gift" },
79
+ { "id": "pull-item-from-bag", "label": "Pull item from bag", "category": "everyday-actions", "description": "Reaches into a bag and draws out an item",
80
+ "promptHint": "the subject opens a bag, reaches inside with one hand, draws out an item and raises it to chest height to look it over", "term": "pulls an item from a bag" },
81
+ { "id": "open-letter", "label": "Open letter", "category": "everyday-actions", "description": "Tears an envelope open and reads the letter",
82
+ "promptHint": "the subject tears open an envelope, slides out a folded letter, unfolds it with both hands and reads, eyes tracking across the lines", "term": "opens and reads a letter" },
83
+ { "id": "tear-paper-in-half", "label": "Tear paper in half", "category": "everyday-actions", "description": "Tears one sheet into two pieces and holds them.",
84
+ "promptHint": "the subject grips a sheet of paper with both hands, tears it once down the middle and holds one half in each hand", "term": "tears a sheet of paper into two halves",
85
+ "requires": ["sheet of paper"], "needsFreeHands": true, "handsAfter": "occupied" },
86
+ { "id": "pull-phone-from-pocket", "label": "Pull phone from pocket", "category": "everyday-actions", "description": "Draws a phone out and looks down at the screen",
87
+ "promptHint": "the subject reaches into a pocket, draws out a phone, turns it face up in the hand and lowers the gaze to the screen", "term": "pulls a phone from a pocket" },
88
+ { "id": "answer-phone", "label": "Answer phone", "category": "everyday-actions", "description": "Pulls out a ringing phone and raises it to the ear",
89
+ "promptHint": "the subject pulls a ringing phone from a pocket, glances at the screen, swipes to answer and raises it to the ear, beginning to speak", "term": "answers a phone call" },
90
+ { "id": "hang-up-phone", "label": "Hang up phone", "category": "everyday-actions", "description": "Lowers the phone, ends the call, pockets it",
91
+ "promptHint": "the subject lowers the phone from the ear, taps the screen to end the call, then slides it back into a pocket", "term": "hangs up the phone" },
92
+ { "id": "look-up-from-phone", "label": "Look up from phone", "category": "everyday-actions", "description": "Glances at the phone, then lifts the head",
93
+ "promptHint": "the subject glances down at a phone held in one hand, thumbs the screen, then lifts the head and looks up and ahead", "term": "checks phone and looks up" },
94
+ { "id": "scroll-on-phone", "label": "Scroll on phone", "category": "everyday-actions", "description": "Thumb flicks the screen in repeated scrolls",
95
+ "promptHint": "the subject flicks the thumb upward across the screen of a phone held in one hand at chest height, scrolling again and again, eyes tracking the feed", "term": "scrolls on phone with thumb" },
96
+ { "id": "take-a-selfie", "label": "Take a selfie", "category": "everyday-actions", "description": "Arm out, poses, taps, lowers to review",
97
+ "promptHint": "the subject raises a phone at arm's length with the screen turned toward the face, tilts the head and poses, taps the screen, then lowers the phone to review the shot", "term": "takes a selfie" },
98
+ { "id": "take-a-photo", "label": "Take a photo", "category": "everyday-actions", "description": "Raises a phone, frames, presses the shutter",
99
+ "promptHint": "the subject raises a phone to eye level with both hands, frames a shot ahead, holds still and taps the shutter, then lowers it", "term": "takes a photo" },
100
+ { "id": "tap-to-pay", "label": "Tap to pay", "category": "everyday-actions", "description": "Touches the held card or phone to a payment terminal.",
101
+ "promptHint": "the subject extends the card or phone already held in one hand toward the payment terminal, touches it to the reader and draws it back", "term": "taps card or phone on a payment reader",
102
+ "requires": ["card or phone", "payment reader"], "aliases": ["contactless payment", "NFC"] },
103
+ { "id": "type-on-laptop", "label": "Type on laptop", "category": "everyday-actions", "description": "Opens the lid and types, eyes on keys and screen",
104
+ "promptHint": "the subject opens a laptop lid, places both hands on the keyboard and types, fingers moving across the keys and eyes shifting between the keys and the screen", "term": "opens laptop and types" },
105
+ { "id": "write-in-notebook", "label": "Write in notebook", "category": "everyday-actions", "description": "Opens a notebook, uncaps a pen, writes a line",
106
+ "promptHint": "the subject flips a notebook open, uncaps a pen and writes a line across the page with the hand moving in the direction of the established script, then pauses to reread it", "term": "writes a line in a notebook",
107
+ "requires": ["notebook", "pen"] },
108
+ { "id": "write-on-whiteboard", "label": "Write on whiteboard", "category": "everyday-actions", "description": "Writes a line across a whiteboard, turns to the room",
109
+ "promptHint": "the subject uncaps a marker, reaches up to a whiteboard and writes across it in a line following the established script, then steps aside and turns to face the room", "term": "writes on a whiteboard",
110
+ "requires": ["whiteboard", "marker"] },
111
+ { "id": "sign-document", "label": "Sign document", "category": "everyday-actions", "description": "Leans over a page and signs with a flourish",
112
+ "promptHint": "the subject picks up a pen, leans over a document and signs along the line with a flourish, then sets the pen down and straightens up", "term": "signs a document" },
113
+ { "id": "turn-a-page", "label": "Turn a page", "category": "everyday-actions", "description": "Sweeps a page across and smooths it flat",
114
+ "promptHint": "the subject pinches the corner of a page with the fingertips, lifts and sweeps it across following the established book binding, then smooths it flat with the palm", "term": "turns a page",
115
+ "requires": ["open book"], "needsFreeHands": true },
116
+ { "id": "tie-shoelaces", "label": "Tie shoelaces", "category": "everyday-actions", "description": "Crouches, loops and knots the laces, stands",
117
+ "promptHint": "the subject crouches or props one foot up, pulls the laces taut, loops and knots them with both hands, then stands back up", "term": "ties shoelaces" },
118
+ { "id": "kick-off-shoes", "label": "Kick off shoes", "category": "everyday-actions", "description": "Steps out of each shoe heel-first",
119
+ "promptHint": "the subject presses the heel of one shoe down with the toe of the other, steps out of it, then repeats with the second foot and nudges both shoes aside", "term": "kicks off shoes" },
120
+ { "id": "sling-bag-over-shoulder", "label": "Sling bag over shoulder", "category": "everyday-actions", "description": "Swings a bag strap up over one shoulder",
121
+ "promptHint": "the subject picks up a bag by the strap, swings it up and over one shoulder, and settles the strap in place with a tug", "term": "slings a bag over one shoulder" },
122
+ { "id": "put-on-headphones", "label": "Put on headphones", "category": "everyday-actions", "description": "Settles the cups over both ears",
123
+ "promptHint": "the subject lifts a pair of headphones from around the neck, settles the cups over both ears, and adjusts the band with both hands", "term": "puts on headphones" },
124
+ { "id": "open-umbrella", "label": "Open umbrella", "category": "everyday-actions", "description": "Pushes the canopy open and rests it on a shoulder",
125
+ "promptHint": "the subject raises a closed umbrella, presses the release and pushes the canopy open overhead, then settles the handle against one shoulder", "term": "opens an umbrella" },
126
+ { "id": "snap-on-medical-gloves", "label": "Snap on medical gloves", "category": "everyday-actions", "description": "Pulls each glove on and snaps the cuff at the wrist",
127
+ "promptHint": "the subject pulls a disposable glove over one hand, tugs the cuff and lets it snap against the wrist, then repeats with the other hand and flexes both", "term": "snaps on medical gloves" },
128
+ { "id": "brush-hair", "label": "Brush hair", "category": "everyday-actions", "description": "Long brush strokes from crown to ends",
129
+ "promptHint": "the subject draws a hairbrush from the crown down through the hair in long strokes, the free hand smoothing each section as it falls", "term": "brushes hair in long strokes" },
130
+ { "id": "tie-hair-up", "label": "Tie hair up", "category": "everyday-actions", "description": "Gathers the hair back and loops a tie around it",
131
+ "promptHint": "the subject gathers the hair back with both hands, holds it in one fist at the back of the head and loops a hair tie around it, then drops both hands", "term": "ties hair up in a ponytail" },
132
+ { "id": "let-hair-down", "label": "Let hair down", "category": "everyday-actions", "description": "Pulls the hair tie free and shakes hair loose",
133
+ "promptHint": "the subject reaches back with one hand, pulls the hair tie free and shakes the head once so the hair falls loose around the shoulders", "term": "pulls the hair tie and shakes hair loose" },
134
+ { "id": "apply-lipstick", "label": "Apply lipstick", "category": "everyday-actions", "description": "Glides lipstick across the lips and presses them",
135
+ "promptHint": "the subject uncaps a lipstick, holds the mouth still and glides the color across the upper lip then the lower, then presses the lips together", "term": "applies lipstick" },
136
+ { "id": "apply-skincare", "label": "Apply skincare", "category": "everyday-actions", "description": "Dabs cream on the cheeks and rubs it in",
137
+ "promptHint": "the subject dabs cream from the fingertips onto both cheeks, then rubs it in with upward circles of the fingers until it disappears into the skin", "term": "rubs cream into the cheeks" },
138
+ { "id": "spray-perfume-on-wrist", "label": "Spray perfume on wrist", "category": "everyday-actions", "description": "Sprays the wrist, presses both wrists together",
139
+ "promptHint": "the subject raises a perfume bottle, sprays once onto the inside of the opposite wrist, then presses both wrists together and rubs them", "term": "sprays perfume on the wrist" },
140
+ { "id": "lift-and-sniff", "label": "Lift and sniff", "category": "everyday-actions", "description": "Raises an item to the nose and inhales",
141
+ "promptHint": "the subject raises an item in one hand to just under the nose, closes the eyes and inhales through the nose, then lowers it and opens the eyes", "term": "lifts to the nose and sniffs" },
142
+ { "id": "brush-teeth", "label": "Brush teeth", "category": "everyday-actions", "description": "Scrubs the teeth, leans forward and spits",
143
+ "promptHint": "the subject raises a toothbrush to the mouth and scrubs it back and forth across the teeth, the free hand resting on the sink edge, then leans forward and spits", "term": "brushes teeth" },
144
+ { "id": "splash-water-on-face", "label": "Splash water on face", "category": "everyday-actions", "description": "Cups water in both hands and splashes the face",
145
+ "promptHint": "the subject bends over a sink, cups water in both hands and splashes it up onto the face, then straightens up and drags both palms down the cheeks", "term": "splashes water on the face" },
146
+ { "id": "light-cigarette", "label": "Light cigarette", "category": "everyday-actions", "description": "Cups a lighter, lights up, draws and exhales",
147
+ "promptHint": "the subject places a cigarette between the lips, cups one hand around a lighter, flicks it and touches the flame to the tip, then draws in and exhales", "term": "lights a cigarette" },
148
+ { "id": "pour-a-drink", "label": "Pour a drink", "category": "everyday-actions", "description": "Tilts a bottle over a glass and pours",
149
+ "promptHint": "the subject lifts a bottle by the neck, tilts it over a glass and pours until the glass is part full, then rights the bottle and sets it down", "term": "pours a drink into a glass" },
150
+ { "id": "raise-glass-to-toast", "label": "Raise glass to toast", "category": "everyday-actions", "description": "Lifts a glass forward in a toast, then sips",
151
+ "promptHint": "the subject lifts a glass from the table to shoulder height, extends it forward in a toast with a small nod, then draws it back for a sip", "term": "raises a glass in a toast" },
152
+ { "id": "pop-and-spray-champagne", "label": "Pop and spray champagne", "category": "everyday-actions", "description": "Shakes the bottle, pops the cork, sprays foam",
153
+ "promptHint": "the subject shakes a champagne bottle with both hands, thumbs the cork out so it pops free, then aims the neck and sprays the foam in a wide arc", "term": "pops and sprays champagne" },
154
+ { "id": "do-a-spit-take", "label": "Do a spit take", "category": "everyday-actions", "description": "Freezes mid-sip and sprays the drink out",
155
+ "promptHint": "the subject takes a mouthful from a cup, freezes mid-swallow with the eyes widening, then sprays the drink out of the mouth in a burst and coughs, wiping the chin", "term": "does a spit take" },
156
+ { "id": "blow-out-candle", "label": "Blow out candle", "category": "everyday-actions", "description": "Leans in, draws a breath, blows out the flame",
157
+ "promptHint": "the subject leans toward a candle, draws in a breath with the cheeks filling, and blows out the flame, then straightens up", "term": "blows out a candle" },
158
+ { "id": "cut-cake", "label": "Cut cake", "category": "everyday-actions", "description": "Presses a knife through a cake, lifts a slice",
159
+ "promptHint": "the subject grips a knife in one hand, presses it down through a cake from the center outward, then lifts a slice onto a plate with the flat of the blade", "term": "cuts a slice of cake" },
160
+ { "id": "toss-bouquet", "label": "Toss bouquet", "category": "everyday-actions", "description": "Turns away and tosses the bouquet over a shoulder",
161
+ "promptHint": "the subject turns away, holds a bouquet in both hands at chest height, then swings it up and over one shoulder in an underhand toss and looks back", "term": "tosses the bouquet over the shoulder" },
162
+ { "id": "lick-ice-cream", "label": "Lick ice cream", "category": "everyday-actions", "description": "Licks the ice cream without biting it.",
163
+ "promptHint": "the subject raises an ice cream toward the mouth, licks its surface and draws it slightly away", "term": "licks an ice cream",
164
+ "requires": ["ice cream"] },
165
+ { "id": "stir-a-pot", "label": "Stir a pot", "category": "everyday-actions", "description": "Stirs in circles, then lifts the spoon to taste",
166
+ "promptHint": "the subject stirs a pot in circles with a spoon in one hand while the other hand steadies the pot handle, then lifts the spoon to the lips to taste", "term": "stirs a pot on the stove" },
167
+ { "id": "taste-from-spoon", "label": "Taste from spoon", "category": "everyday-actions", "description": "Tastes a spoonful without prescribing an opinion.",
168
+ "promptHint": "the subject raises a spoon to the mouth, tastes the food and lowers the spoon without adding an approval or rejection gesture", "term": "tastes a spoonful of food",
169
+ "requires": ["spoon with food"] },
170
+ { "id": "chop-vegetables", "label": "Chop vegetables", "category": "everyday-actions", "description": "Rocks a knife through vegetables on a board",
171
+ "promptHint": "the subject steadies a vegetable on a cutting board with curled fingertips and rocks a knife through it in even strokes, sweeping the pieces aside", "term": "chops vegetables on a board" },
172
+ { "id": "toss-food-in-pan", "label": "Toss food in pan", "category": "everyday-actions", "description": "Flicks the pan so the food flips and lands back",
173
+ "promptHint": "the subject grips a pan handle with one hand and jerks it forward and up so the food flips into the air, then catches it back in the pan", "term": "tosses food in a pan" },
174
+ { "id": "sprinkle-salt-flourish", "label": "Sprinkle salt flourish", "category": "everyday-actions", "description": "Arm raised high, salt trickles from the fingertips",
175
+ "promptHint": "the subject pinches salt between the fingertips, raises the arm high with the wrist cocked back, then lets the grains trickle down from the fingertips over the dish", "term": "sprinkles salt with a flourish" },
176
+ { "id": "open-fridge", "label": "Open fridge", "category": "everyday-actions", "description": "Opens the fridge door and holds it open.",
177
+ "promptHint": "the subject grips the fridge handle, pulls the door open and holds it there", "term": "opens the fridge door",
178
+ "requires": ["fridge"], "handsAfter": "occupied" },
179
+ { "id": "water-plants", "label": "Water plants", "category": "everyday-actions", "description": "Tips a watering can over each plant",
180
+ "promptHint": "the subject lifts a watering can with one hand, tips the spout over a plant and pours in a steady stream, then moves on to the next pot", "term": "waters plants with a watering can" },
181
+ { "id": "cradle-and-rock-baby", "label": "Cradle and rock baby", "category": "everyday-actions", "description": "Supports the baby’s head and body while gently rocking.",
182
+ "promptHint": "the subject cradles the counterpart against the chest with head and body supported by both arms, gently shifting weight from side to side", "term": "cradles and rocks the counterpart, head/body supported",
183
+ "counterpart": "a baby", "requires": ["baby"], "handsAfter": "occupied", "fixedPace": true },
184
+ { "id": "slap-alarm-clock", "label": "Slap alarm clock", "category": "everyday-actions", "description": "Flings an arm out and slaps the alarm off",
185
+ "promptHint": "the subject flings one arm out from under the covers and slaps the palm down on an alarm clock, then drags the arm back and buries the face in the pillow", "term": "slaps the alarm clock" },
186
+ { "id": "pull-covers-over-head", "label": "Pull covers over head", "category": "everyday-actions", "description": "Yanks the covers up over the head and curls up",
187
+ "promptHint": "the subject grabs the edge of the bed covers with both hands and yanks them up over the head, curling onto one side underneath them", "term": "pulls the covers over the head" },
188
+ { "id": "put-on-seatbelt", "label": "Put on seatbelt", "category": "everyday-actions", "description": "Pulls the belt across and clicks the buckle",
189
+ "promptHint": "the subject reaches over one shoulder to grab the seatbelt, pulls it across the chest and clicks the buckle in at the hip, then settles back", "term": "buckles a seatbelt" },
190
+ { "id": "grab-keys-and-leave", "label": "Grab keys & leave", "category": "everyday-actions", "description": "Scoops keys in passing and walks out",
191
+ "promptHint": "the subject scoops keys off a surface in passing, pockets them, and walks out through a doorway without breaking stride", "term": "grabs keys and heads out" },
192
+ { "id": "flip-a-coin", "label": "Flip a coin", "category": "everyday-actions", "description": "Flicks a coin up, catches it, slaps it on the hand",
193
+ "promptHint": "the subject balances a coin on the thumb, flicks it spinning into the air, catches it and slaps it onto the back of the other hand, then lifts the hand to look", "term": "flips a coin" },
194
+ { "id": "shuffle-cards", "label": "Shuffle cards", "category": "everyday-actions", "description": "Splits the deck, riffles the halves, squares it",
195
+ "promptHint": "the subject splits a deck of cards in two, bends the halves and riffles them together with the thumbs, then squares the deck with both hands", "term": "shuffles a deck of cards" },
196
+ { "id": "sweep-flashlight", "label": "Sweep flashlight", "category": "everyday-actions", "description": "Sweeps a flashlight in an arc, head following",
197
+ "promptHint": "the subject raises a flashlight to shoulder height and sweeps it in an arc from one side to the other, the head turning to follow it", "term": "sweeps a flashlight from side to side" },
198
+ { "id": "set-object-down", "label": "Set object down", "category": "everyday-actions", "description": "Set object down.",
199
+ "term": "places the counterpart on a surface and releases", "promptHint": "the subject lowers the counterpart onto the nearby supporting surface, releases it and draws both hands away",
200
+ "counterpart": "the held object", "requires": ["held object", "supporting surface"], "handsAfter": "free" },
201
+ { "id": "hold-object-still", "label": "Hold object still", "category": "everyday-actions", "description": "Hold object still.",
202
+ "term": "holds the counterpart still", "promptHint": "the subject keeps the counterpart steady in both hands without changing its orientation",
203
+ "counterpart": "the held object", "requires": ["held object"], "handsAfter": "occupied" },
204
+ { "id": "wash-hands", "label": "Wash hands", "category": "everyday-actions", "description": "Wash hands.",
205
+ "term": "washes both hands under running water", "promptHint": "the subject rubs both hands together under running water and rinses them",
206
+ "requires": ["sink", "running water"] },
207
+ { "id": "wipe-table", "label": "Wipe table", "category": "everyday-actions", "description": "Wipe table.",
208
+ "term": "wipes a table with a cloth", "promptHint": "the subject moves a cloth across the table in overlapping strokes",
209
+ "requires": ["table", "cloth"] },
210
+ { "id": "sweep-floor", "label": "Sweep floor", "category": "everyday-actions", "description": "Sweep floor.",
211
+ "term": "sweeps the floor with a broom", "promptHint": "the subject draws a broom across the floor in repeated short strokes",
212
+ "requires": ["floor", "broom"] },
213
+ { "id": "read-book-continuously", "label": "Read book", "category": "everyday-actions", "description": "Read book.",
214
+ "term": "reads an open book without turning pages", "promptHint": "the subject holds an open book and follows its text with small eye movements, preserving the established reading direction",
215
+ "requires": ["open book"] },
216
+ { "id": "listen-attentively", "label": "Listen attentively", "category": "everyday-actions", "description": "Listen attentively.",
217
+ "term": "listens with occasional small nods", "promptHint": "the subject holds an attentive gaze toward the speaker and makes occasional small nods",
218
+ "requires": ["speaker"] },
219
+ { "id": "type-continuously", "label": "Type continuously", "category": "everyday-actions", "description": "Type continuously.",
220
+ "term": "types continuously on a keyboard", "promptHint": "the subject types on the keyboard with alternating finger movements while keeping the gaze on the screen",
221
+ "requires": ["keyboard", "screen"] },
222
+ { "id": "send-phone-message", "label": "Send phone message", "category": "everyday-actions", "description": "Send phone message.",
223
+ "term": "types a phone message and taps send", "promptHint": "the subject types on the phone with both thumbs, pauses and taps the send control",
224
+ "requires": ["phone"] },
225
+ { "id": "move-computer-mouse", "label": "Use computer mouse", "category": "everyday-actions", "description": "Use computer mouse.",
226
+ "term": "moves and clicks a computer mouse", "promptHint": "the subject moves the mouse across the desk and clicks once with the index finger",
227
+ "requires": ["mouse", "desk"] },
228
+ { "id": "sort-documents", "label": "Sort documents", "category": "everyday-actions", "description": "Sort documents.",
229
+ "term": "sorts documents into two piles", "promptHint": "the subject lifts one document at a time and places it into one of two piles",
230
+ "requires": ["documents", "table"] },
231
+ { "id": "serve-plate", "label": "Serve plate", "category": "everyday-actions", "description": "Serve plate.",
232
+ "term": "places a plate on a table", "promptHint": "the subject carries a plate level in both hands, lowers it onto the table and releases it",
233
+ "requires": ["plate", "table"] },
234
+ { "id": "tighten-screw", "label": "Tighten screw", "category": "everyday-actions", "description": "Tighten screw.",
235
+ "term": "turns a screwdriver to tighten a screw", "promptHint": "the subject seats a screwdriver in the screw head and turns it repeatedly to tighten the screw",
236
+ "requires": ["screwdriver", "screw"] },
237
+ ]
@@ -0,0 +1,129 @@
1
+ import type { CharacterMotion } from "./types.js"
2
+
3
+ /** face-expression — authored motion fragments. Stable ids survive copy revisions. */
4
+ export const FACE_EXPRESSION_MOTIONS: ReadonlyArray<CharacterMotion> = [
5
+ { "id": "break-into-smile", "label": "Break into smile", "category": "face-expression", "description": "Neutral face lifts into a full warm smile",
6
+ "promptHint": "the subject breaks into a smile, the corners of the mouth lifting from a neutral line into a full warm smile as the cheeks rise and the eyes crinkle at the outer corners", "term": "breaks into a warm smile" },
7
+ { "id": "let-smile-creep-in", "label": "Creeping smile", "category": "face-expression", "description": "A smile dawns one corner at a time",
8
+ "promptHint": "the subject lets a smile creep in, one corner of the mouth twitching up first, the other side catching up until the whole face has eased into a knowing smile", "term": "lets a smile creep in" },
9
+ { "id": "widen-into-grin", "label": "Grin widens", "category": "face-expression", "description": "Small smile opens into a broad toothy grin",
10
+ "promptHint": "the subject widens a small closed-lip smile into a broad grin, the lips parting to show teeth, cheeks bunching upward and the eyes narrowing with delight", "term": "widens smile into a toothy grin" },
11
+ { "id": "let-smile-fade", "label": "Smile fades", "category": "face-expression", "description": "Smile drains away to a flat still face",
12
+ "promptHint": "the subject lets the smile fade, the corners of the mouth dropping back to a flat line as the brightness leaves the eyes and the face goes still and guarded", "term": "lets the smile fade" },
13
+ { "id": "force-a-smile", "label": "Forced smile", "category": "face-expression", "description": "Stiff polite smile that never reaches the eyes",
14
+ "promptHint": "the subject forces a smile, the mouth stretching wide and tight while the eyes stay flat and unmoving, the expression holding stiffly for a beat before dropping away", "term": "forces a stiff smile" },
15
+ { "id": "smirk-knowingly", "label": "Smirk", "category": "face-expression", "description": "One corner of the mouth curls up, eyes narrow",
16
+ "promptHint": "the subject smirks, one corner of the mouth curling upward while the other side stays put, the eyes narrowing knowingly and the head tilting a fraction to that side", "term": "smirks, one corner of the mouth curling" },
17
+ { "id": "burst-out-laughing", "label": "Burst out laughing", "category": "face-expression", "description": "Sudden full laugh, head back, shoulders shaking",
18
+ "promptHint": "the subject bursts out laughing, the head tipping back and the mouth opening wide, shoulders shaking with each breath before the laugh settles into a lingering grin", "term": "bursts out laughing" },
19
+ { "id": "giggle-lightly", "label": "Giggle", "category": "face-expression", "description": "Light bubbling laugh, shoulders bobbing",
20
+ "promptHint": "the subject giggles, the shoulders bobbing in short bursts and the lips pressing together then breaking open in quick light laughs, the gaze darting away and back", "term": "giggles, shoulders bobbing" },
21
+ { "id": "chuckle-quietly", "label": "Chuckle", "category": "face-expression", "description": "Single quiet laugh through the nose, head dips",
22
+ "promptHint": "the subject chuckles quietly, a single exhale through the nose as the head dips once and the mouth pulls into a lopsided smile before the face settles again", "term": "chuckles quietly, head dipping once" },
23
+ { "id": "tears-well-up", "label": "Tears well up", "category": "face-expression", "description": "Eyes glisten and fill, a single tear spills",
24
+ "promptHint": "the subject fights back tears, the eyes glistening and welling up as the chin trembles and the lips press together, until a single tear spills over and tracks down one cheek", "term": "wells up, a single tear spilling" },
25
+ { "id": "break-down-sobbing", "label": "Break down sobbing", "category": "face-expression", "description": "Face crumples into heaving sobs",
26
+ "promptHint": "the subject breaks down sobbing, the face crumpling and the mouth pulling downward, shoulders heaving with each ragged breath as the head bows and tears stream", "term": "breaks down sobbing" },
27
+ { "id": "gasp-in-shock", "label": "Gasp", "category": "face-expression", "description": "Sharp intake of breath, mouth and eyes fly open",
28
+ "promptHint": "the subject gasps, the mouth dropping open and the eyes flying wide as the chest lifts on a sharp intake of breath, the whole body freezing for a beat before it releases", "term": "gasps, mouth and eyes flying open" },
29
+ { "id": "drop-jaw-in-astonishment", "label": "Jaw drop", "category": "face-expression", "description": "Jaw falls slack in open-mouthed astonishment",
30
+ "promptHint": "the subject gapes in astonishment, the jaw dropping open and the mouth going slack as the eyes widen and the brows lift, the head pulling back a fraction and freezing there", "term": "gapes, jaw dropping in astonishment" },
31
+ { "id": "register-dawning-realization", "label": "Register realization", "category": "face-expression", "description": "Eyes widen slightly as understanding appears.",
32
+ "promptHint": "the subject pauses, the eyes widening slightly and the eyebrows lifting as understanding appears, without prescribing a later emotional decision", "term": "registers realization with widening eyes",
33
+ "aliases": ["Dawning Realization"] },
34
+ { "id": "startle-then-relax", "label": "Surprise to relief", "category": "face-expression", "description": "Jolt of surprise melting into relieved release",
35
+ "promptHint": "the subject startles in surprise, the eyes widening and the mouth opening, before the shoulders drop and the breath leaves in a relieved laugh as the whole face softens", "term": "startles, relaxing into relief" },
36
+ { "id": "wink-one-eye", "label": "Wink", "category": "face-expression", "description": "One eye closes in a quick squeeze and reopens",
37
+ "promptHint": "the subject winks, one eye closing in a quick deliberate squeeze while the other stays open, the mouth tugging up on the same side before the eye opens again", "term": "gives a quick wink" },
38
+ { "id": "roll-eyes-exasperated", "label": "Eye roll", "category": "face-expression", "description": "Gaze sweeps up and over in exasperation",
39
+ "promptHint": "the subject rolls the eyes, the gaze sweeping upward and across to one side with a small tilt of the head and a huff of breath, then settling back forward unimpressed", "term": "rolls eyes in exasperation" },
40
+ { "id": "give-slow-blink", "label": "Slow blink", "category": "face-expression", "description": "Lids lower fully, hold a beat, then lift",
41
+ "promptHint": "the subject gives a long deliberate blink, the lids lowering until fully closed and resting there for a beat, then lifting again with the gaze settling back where it was", "term": "gives a slow deliberate blink",
42
+ "fixedPace": true },
43
+ { "id": "let-eyes-drift-closed", "label": "Eyes drift closed", "category": "face-expression", "description": "Lids lower until shut, face settles into rest",
44
+ "promptHint": "the subject lets both eyes drift closed, the lids lowering until fully shut as the face goes still and the brow smooths, the head settling as if into rest", "term": "lets the eyes drift closed" },
45
+ { "id": "flutter-eyes-open", "label": "Eyes flutter open", "category": "face-expression", "description": "Closed eyes flicker open and find focus",
46
+ "promptHint": "the subject flutters the eyes open from closed, the lids flickering a few times before lifting fully, the gaze unfocused at first and then sharpening onto a point ahead", "term": "flutters eyes open and focuses" },
47
+ { "id": "stare-blankly-snap-back", "label": "Blank stare & refocus", "category": "face-expression", "description": "Vacant unfocused stare, then a jolt back to alert",
48
+ "promptHint": "the subject stares blankly into the middle distance, the eyes unfocused and the face slack, then blinks and snaps back to attention as focus returns sharply to the eyes", "term": "stares blankly, snaps back to focus" },
49
+ { "id": "nod-in-agreement", "label": "Nod", "category": "face-expression", "description": "Chin dips and lifts in one or two clear beats",
50
+ "promptHint": "the subject nods, the chin dipping down and lifting back up in one or two clear beats while the eyes hold steady in agreement, the head settling level again", "term": "nods in agreement" },
51
+ { "id": "shake-head-no", "label": "Shake head no", "category": "face-expression", "description": "Head swings side to side, mouth tightening",
52
+ "promptHint": "the subject shakes the head no, turning it side to side in two or three short swings while the mouth tightens, then bringing it back to center and holding", "term": "shakes head no" },
53
+ { "id": "raise-one-eyebrow", "label": "Raise an eyebrow", "category": "face-expression", "description": "One brow arches high in skeptical doubt",
54
+ "promptHint": "the subject raises one eyebrow, the brow arching high on that side while the other stays level, the head tilting slightly and the mouth pulling into a skeptical line", "term": "raises one skeptical eyebrow" },
55
+ { "id": "narrow-eyes-suspiciously", "label": "Narrow eyes", "category": "face-expression", "description": "Lids lower to a squint of suspicion",
56
+ "promptHint": "the subject narrows the eyes in suspicion, the lids lowering to a squint and the head tilting a fraction as the mouth tightens, holding the appraising look", "term": "narrows eyes in suspicion" },
57
+ { "id": "frown-in-displeasure", "label": "Frown", "category": "face-expression", "description": "Brows draw together, mouth corners pull down",
58
+ "promptHint": "the subject frowns, the brows drawing together and lowering while the corners of the mouth pull downward, the whole face settling into troubled displeasure", "term": "frowns in displeasure" },
59
+ { "id": "scowl-in-anger", "label": "Scowl", "category": "face-expression", "description": "Brows knit hard, nose wrinkles, jaw sets",
60
+ "promptHint": "the subject scowls, the brows knitting hard and low, the nose wrinkling and the upper lip lifting slightly as the jaw sets forward in open anger", "term": "scowls in open anger" },
61
+ { "id": "fix-hard-glare", "label": "Glare", "category": "face-expression", "description": "Eyes lock on one point in a hard hostile stare",
62
+ "promptHint": "the subject fixes a hard glare, the eyes narrowing and locking onto one point as the head lowers a fraction, the brow flat and the jaw clenched, holding without blinking", "term": "glares hard without blinking" },
63
+ { "id": "clench-jaw-tight", "label": "Clench jaw", "category": "face-expression", "description": "Jaw muscles bunch, lips press, nostrils flare",
64
+ "promptHint": "the subject clenches the jaw, the muscles bunching at the hinge as the lips press tight and the nostrils flare, the breath held and the eyes hardening in restrained anger", "term": "clenches jaw, nostrils flaring" },
65
+ { "id": "grimace-in-pain", "label": "Grimace", "category": "face-expression", "description": "Lips bare teeth, nose scrunches, eyes squeeze",
66
+ "promptHint": "the subject grimaces, the lips pulling back to bare the teeth as the nose scrunches and the eyes squeeze half-shut in a flash of pain, before the face relaxes again", "term": "grimaces, baring teeth" },
67
+ { "id": "wince-and-recover", "label": "Wince", "category": "face-expression", "description": "Whole face flinches tight, then eases open",
68
+ "promptHint": "the subject winces, the whole face flinching tight for an instant with the eyes squeezing shut and the head pulling back a fraction, then the features easing open again", "term": "winces and recovers" },
69
+ { "id": "scream-mouth-wide", "label": "Scream", "category": "face-expression", "description": "Mouth stretches wide, eyes wide, neck strains",
70
+ "promptHint": "the subject screams, the mouth stretching wide open and the eyes going wide under raised brows, the cords of the neck standing out as the head thrusts forward with the force of it", "term": "screams, mouth wide open" },
71
+ { "id": "swallow-hard", "label": "Swallow hard", "category": "face-expression", "description": "Throat works in a nervous gulp",
72
+ "promptHint": "the subject swallows hard, the throat visibly working as the lips press together and the eyes hold steady with unease, the chin dipping slightly on the gulp", "term": "swallows hard, throat working" },
73
+ { "id": "sigh-heavily", "label": "Sigh", "category": "face-expression", "description": "Deep breath in, shoulders drop as it leaves",
74
+ "promptHint": "the subject sighs heavily, the chest rising on a deep breath, then the shoulders dropping and the eyes closing briefly as the breath leaves, the face settling into resignation", "term": "sighs heavily, shoulders dropping" },
75
+ { "id": "yawn-wide", "label": "Yawn", "category": "face-expression", "description": "Mouth stretches wide, eyes squeeze, head tips back",
76
+ "promptHint": "the subject yawns, the mouth stretching wide open as the eyes squeeze shut and the head tips back, then the jaw closing and the face relaxing on the exhale", "term": "yawns wide, head tipping back" },
77
+ { "id": "sneeze-and-recover", "label": "Sneeze", "category": "face-expression", "description": "Face scrunches, head jerks forward, then relaxes",
78
+ "promptHint": "the subject sneezes, the face scrunching and the eyes clamping shut as the head jerks forward on the burst, then the features relaxing and the head lifting back up", "term": "sneezes, head jerking forward" },
79
+ { "id": "blow-out-cheeks", "label": "Blow out cheeks", "category": "face-expression", "description": "Cheeks puff full, then a long deflating exhale",
80
+ "promptHint": "the subject blows out the cheeks, puffing them full of air, then releases the breath in a long exhale as the cheeks deflate and the shoulders sag", "term": "puffs out cheeks and exhales" },
81
+ { "id": "purse-lips-thoughtfully", "label": "Purse lips", "category": "face-expression", "description": "Lips press into a tight pucker, eyes narrow",
82
+ "promptHint": "the subject purses the lips, pressing them together and pushing them forward into a tight pucker while the eyes narrow in thought, before the mouth relaxes again", "term": "purses lips in thought" },
83
+ { "id": "pout-sulkily", "label": "Pout", "category": "face-expression", "description": "Lower lip pushes out, chin dips in a sulk",
84
+ "promptHint": "the subject pouts, the lower lip pushing out and the brows lowering as the chin dips, the shoulders drawing in and the sulky look holding for a beat", "term": "pouts sulkily" },
85
+ { "id": "chew-lip-nervously", "label": "Chew lip nervously", "category": "face-expression", "description": "Teeth worry the lower lip, eyes flick about",
86
+ "promptHint": "the subject chews the lower lip nervously, the teeth working at it while the eyes flick side to side, then releases it with a swallow and a small exhale", "term": "chews lower lip nervously" },
87
+ { "id": "soften-into-tenderness", "label": "Soften into tenderness", "category": "face-expression", "description": "Hard set of the face melts into warmth",
88
+ "promptHint": "the subject softens, the hard set of the jaw and brow releasing as the eyes warm and the mouth eases into a tender half-smile, the head tilting gently to one side", "term": "softens into tenderness" },
89
+ { "id": "bite-lip-teasingly", "label": "Bite lip", "category": "face-expression", "description": "Catches the lower lip, holds, releases with a smile",
90
+ "promptHint": "the subject catches the lower lip between the teeth and holds it for a beat as the gaze lifts, then releases it with a small teasing smile", "term": "bites lower lip and releases",
91
+ "adultOnly": true },
92
+ { "id": "lick-lips-suggestively", "label": "Lick lips", "category": "face-expression", "description": "Tongue traces the lower lip end to end",
93
+ "promptHint": "the subject runs the tongue across the lips, tracing the lower lip from one corner to the other, then closes the mouth with a faint suggestive smile", "term": "licks lips suggestively",
94
+ "adultOnly": true },
95
+ { "id": "smolder-heavy-lidded", "label": "Smolder", "category": "face-expression", "description": "Gaze goes heavy-lidded, lips part, chin dips",
96
+ "promptHint": "the subject lets the gaze go heavy-lidded, the chin dipping and the lips parting slightly as the eyes lock forward, holding the smoldering look without blinking", "term": "smolders with a heavy-lidded gaze",
97
+ "adultOnly": true },
98
+ { "id": "break-into-blush", "label": "Show a subtle blush", "category": "face-expression", "description": "Shows a complexion-appropriate flush with a shy change in gaze.",
99
+ "promptHint": "the subject glances downward with a shy expression as a subtle flush appropriate to the existing complexion appears, preserving the established skin tone", "term": "shows a subtle complexion-appropriate blush and glances down",
100
+ "aliases": ["Blush"] },
101
+ { "id": "cringe-and-recoil", "label": "Cringe", "category": "face-expression", "description": "Face scrunches tight, shoulders hitch up, head pulls back",
102
+ "promptHint": "the subject cringes, the face scrunching tight with the eyes squeezing half-shut and the teeth baring in a pained grin as the shoulders hitch up toward the ears and the head pulls back", "term": "cringes, face scrunching, shoulders up" },
103
+ { "id": "cough-into-fist", "label": "Cough", "category": "face-expression", "description": "Two or three sharp hacks into a raised fist",
104
+ "promptHint": "the subject coughs into a raised fist, the head dipping forward on two or three sharp hacks with the eyes squeezing shut, before the fist lowers and the face clears", "term": "coughs into a fist" },
105
+ { "id": "laugh-nervously", "label": "Nervous laugh", "category": "face-expression", "description": "Short breathy laugh that stalls, eyes flick away",
106
+ "promptHint": "the subject laughs nervously, a short breathy laugh that stalls and restarts as the eyes flick away and back, the smile stretched too wide and the shoulders hunching", "term": "laughs nervously, eyes flicking away" },
107
+ { "id": "furrow-brow-in-confusion", "label": "Furrow brow", "category": "face-expression", "description": "Brows draw together, crease forms, mouth slackens",
108
+ "promptHint": "the subject furrows the brow in confusion, the eyebrows drawing together and down until a crease forms between them, the eyes narrowing and the mouth going slack in puzzlement", "term": "furrows brow in confusion" },
109
+ { "id": "wrinkle-nose-in-disgust", "label": "Wrinkle nose", "category": "face-expression", "description": "Nostrils pinch, upper lip curls, head pulls back",
110
+ "promptHint": "the subject wrinkles the nose in disgust, the nostrils pinching upward and the upper lip curling as the eyes squint and the head pulls back a fraction", "term": "wrinkles nose in disgust" },
111
+ { "id": "pant-out-of-breath", "label": "Pant", "category": "face-expression", "description": "Mouth open, chest heaving in rapid shallow breaths",
112
+ "promptHint": "the subject pants out of breath, the mouth hanging open and the chest heaving in rapid shallow breaths as the shoulders rise and fall and the head droops, before the breathing steadies", "term": "pants, out of breath" },
113
+ { "id": "stifle-a-laugh", "label": "Stifle a laugh", "category": "face-expression", "description": "Hand claps over the mouth, shoulders shake anyway",
114
+ "promptHint": "the subject stifles a laugh behind a hand, the palm clapping over the mouth as the shoulders shake and the eyes crinkle, the cheeks bulging against the pressure until the laugh leaks out through the nose", "term": "stifles a laugh behind a hand" },
115
+ { "id": "pucker-and-whistle", "label": "Whistle", "category": "face-expression", "description": "Lips draw into a tight O and hold a note",
116
+ "promptHint": "the subject puckers the lips and whistles, the mouth drawing into a tight round O and the cheeks hollowing as the brows lift, holding the note before the lips relax", "term": "puckers and whistles" },
117
+ { "id": "stick-out-tongue", "label": "Stick out tongue", "category": "face-expression", "description": "Tongue pushes out past the lips, eyes squint playfully",
118
+ "promptHint": "the subject sticks out the tongue, the mouth opening and the tongue pushing out past the lips as the eyes squint playfully, holding it for a beat before pulling it back in", "term": "sticks out the tongue playfully" },
119
+ { "id": "widen-eyes-in-dread", "label": "Widen eyes in dread", "category": "face-expression", "description": "Eyes open wide, mouth stays shut, breath catches",
120
+ "promptHint": "the subject widens the eyes in dread, the lids lifting until white shows above the iris while the mouth stays closed and the breath catches, the whole body going still", "term": "widens eyes in dread, mouth closed" },
121
+ { "id": "dart-eyes-nervously", "label": "Darting eyes", "category": "face-expression", "description": "Gaze flicks side to side while the head stays still",
122
+ "promptHint": "the subject darts the eyes nervously, the gaze flicking from side to side and back to center in quick jumps while the head stays still and the lips press together", "term": "darts eyes nervously, head still" },
123
+ { "id": "waggle-eyebrows", "label": "Waggle eyebrows", "category": "face-expression", "description": "Both brows bounce up and down, playful grin spreads",
124
+ "promptHint": "the subject waggles both eyebrows, the brows bouncing up and down together two or three times in quick succession while a playful grin spreads and the chin tips forward", "term": "waggles both eyebrows" },
125
+ { "id": "blow-bubblegum-bubble", "label": "Bubblegum bubble", "category": "face-expression", "description": "Pink bubble swells from the lips and pops flat",
126
+ "promptHint": "the subject blows a bubblegum bubble, the lips pushing forward as a pink bubble swells from the mouth until it pops flat against the lips, the tongue pulling the gum back in with a bored chew", "term": "blows a bubblegum bubble and pops it" },
127
+ { "id": "laugh-maniacally", "label": "Maniacal laugh", "category": "face-expression", "description": "Head thrown back in a wild unhinged laugh, eyes wide",
128
+ "promptHint": "the subject laughs maniacally, the head throwing back and the mouth stretching wide as the shoulders heave, the eyes wild and unblinking when the head snaps forward again with the grin still fixed", "term": "laughs maniacally, head thrown back" },
129
+ ]