@nodaro/prompts 1.19.0 → 1.20.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/dist/index.cjs +9770 -1344
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +187 -7
- package/dist/index.d.ts +187 -7
- package/dist/index.js +9098 -684
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/adult-only-ratchet.test.ts +18 -1
- package/src/__tests__/character-motion-docs-example.test.ts +26 -0
- package/src/__tests__/character-motion-timing-catalogs.test.ts +76 -0
- package/src/__tests__/character-motion.test.ts +207 -0
- package/src/__tests__/fixtures/parameter-hint-golden.json +136 -0
- package/src/__tests__/parameter-hint-mode.test.ts +28 -0
- package/src/__tests__/parameter-prompt-hint.test.ts +159 -0
- package/src/__tests__/parameter-registry-sync.test.ts +2 -0
- package/src/__tests__/picker-analyzer-registry.test.ts +1 -1
- package/src/__tests__/transition-timing-catalogs.test.ts +1 -1
- package/src/__tests__/video-reference-features.test.ts +10 -1
- package/src/age-floor.ts +1 -1
- package/src/character-motion/animals-pets.ts +89 -0
- package/src/character-motion/athletic-stunts.ts +218 -0
- package/src/character-motion/camera-interaction.ts +137 -0
- package/src/character-motion/combat-weapons.ts +206 -0
- package/src/character-motion/dance.ts +173 -0
- package/src/character-motion/entrances-exits.ts +113 -0
- package/src/character-motion/evasive-falls.ts +134 -0
- package/src/character-motion/everyday-actions.ts +278 -0
- package/src/character-motion/face-expression.ts +182 -0
- package/src/character-motion/gestures.ts +308 -0
- package/src/character-motion/head-gestures.ts +98 -0
- package/src/character-motion/idle-ambient.ts +128 -0
- package/src/character-motion/posture-shifts.ts +143 -0
- package/src/character-motion/runway.ts +101 -0
- package/src/character-motion/stage-performance.ts +131 -0
- package/src/character-motion/turns-looks.ts +116 -0
- package/src/character-motion/two-person.ts +233 -0
- package/src/character-motion/types.ts +42 -0
- package/src/character-motion/unnatural-horror.ts +95 -0
- package/src/character-motion/vehicles-mounts.ts +101 -0
- package/src/character-motion/walks-runs.ts +125 -0
- package/src/character-motion.ts +286 -0
- package/src/index.ts +1 -0
- package/src/parameter-prompt-hint.ts +65 -0
- package/src/picker-analyzer-registry.ts +9 -5
- package/src/picker-catalogs.ts +24 -0
- package/src/picker-wiring.ts +2 -0
- package/src/prompt-wizard-categories.ts +0 -2
- package/src/provider-prompt-doctrine.ts +1 -1
|
@@ -2,6 +2,7 @@ import { describe, it, expect } from "vitest"
|
|
|
2
2
|
import { getParameterPromptHint } from "../parameter-prompt-hint.js"
|
|
3
3
|
import { PARAMETER_NODE_TYPES, getParameterValue } from "@nodaro/shared"
|
|
4
4
|
import { ACTION_FX } from "../action-fx.js"
|
|
5
|
+
import { getCharacterMotionPromptHint, getCharacterMotionTerm } from "../character-motion.js"
|
|
5
6
|
|
|
6
7
|
describe("getParameterPromptHint — action-fx", () => {
|
|
7
8
|
it("returns the catalog hint for a single id", () => {
|
|
@@ -268,3 +269,161 @@ describe("getParameterPromptHint — preText/postText for graph-aware nodes", ()
|
|
|
268
269
|
expect(out).toContain("POST_FX")
|
|
269
270
|
})
|
|
270
271
|
})
|
|
272
|
+
|
|
273
|
+
describe("getParameterPromptHint — character-motion", () => {
|
|
274
|
+
const ctx = {
|
|
275
|
+
nodes: [
|
|
276
|
+
{ id: "c1", type: "character", data: { characterName: "Mira" } },
|
|
277
|
+
{ id: "c2", type: "character", data: { characterName: "Theo" } },
|
|
278
|
+
],
|
|
279
|
+
edges: [
|
|
280
|
+
{ source: "c1", target: "n1", targetHandle: "target" },
|
|
281
|
+
{ source: "c2", target: "n1", targetHandle: "partner" },
|
|
282
|
+
],
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
it("composes the ordered sequence with target and partner names from the graph", () => {
|
|
286
|
+
const out = getParameterPromptHint(
|
|
287
|
+
{ id: "n1", type: "character-motion", data: { characterMotion: ["wave-hello", "hug-partner"] } },
|
|
288
|
+
ctx,
|
|
289
|
+
)
|
|
290
|
+
expect(out).toBe(
|
|
291
|
+
`${getCharacterMotionPromptHint("wave-hello").replace(/\bthe subject\b/g, "Mira")}, then ${getCharacterMotionPromptHint("hug-partner").replace(/\bthe subject\b/g, "Mira").replace(/\bthe partner\b/g, "Theo")}`,
|
|
292
|
+
)
|
|
293
|
+
})
|
|
294
|
+
|
|
295
|
+
it("reads position and pace and wraps preText / postText", () => {
|
|
296
|
+
const out = getParameterPromptHint({
|
|
297
|
+
id: "n1",
|
|
298
|
+
type: "character-motion",
|
|
299
|
+
data: { characterMotion: "wave-hello", position: "end", pace: "fast", preText: "PRE_M", postText: "POST_M" },
|
|
300
|
+
})
|
|
301
|
+
expect(out.startsWith("PRE_M")).toBe(true)
|
|
302
|
+
expect(out.endsWith("POST_M")).toBe(true)
|
|
303
|
+
expect(out).toContain("the movement happens in the closing moments of the clip")
|
|
304
|
+
expect(out).toContain("performed quickly")
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
it("compact mode names the target by prefix and the partner in the term", () => {
|
|
308
|
+
const out = getParameterPromptHint(
|
|
309
|
+
{ id: "n1", type: "character-motion", data: { characterMotion: "hug-partner", hintMode: "compact" } },
|
|
310
|
+
ctx,
|
|
311
|
+
)
|
|
312
|
+
expect(out).toBe(`Mira: ${getCharacterMotionTerm("hug-partner").replace(/\bthe partner\b/g, "Theo")}`)
|
|
313
|
+
})
|
|
314
|
+
|
|
315
|
+
it("ignores edges on other handles", () => {
|
|
316
|
+
const out = getParameterPromptHint(
|
|
317
|
+
{ id: "n1", type: "character-motion", data: { characterMotion: "wave-hello" } },
|
|
318
|
+
{ nodes: ctx.nodes, edges: [{ source: "c1", target: "n1", targetHandle: "in" }] },
|
|
319
|
+
)
|
|
320
|
+
expect(out).toBe(getCharacterMotionPromptHint("wave-hello"))
|
|
321
|
+
})
|
|
322
|
+
})
|
|
323
|
+
|
|
324
|
+
// D9 option (b)-lite: a ref wired into `target` OR `partner` that describes a
|
|
325
|
+
// minor (structured `person` age, or an age in its free-text description)
|
|
326
|
+
// makes the composer drop every adultOnly move. wave-hello is neutral;
|
|
327
|
+
// kiss-partner is adultOnly.
|
|
328
|
+
describe("getParameterPromptHint — character-motion minor-age floor", () => {
|
|
329
|
+
const MINOR = { age: "age-child" }
|
|
330
|
+
const ADULT = { age: "age-30s" }
|
|
331
|
+
const motion = { id: "n1", type: "character-motion", data: { characterMotion: ["wave-hello", "kiss-partner"] } }
|
|
332
|
+
const wave = (target: string) => getCharacterMotionPromptHint("wave-hello").replace(/\bthe subject\b/g, target)
|
|
333
|
+
const kiss = (target: string, partner: string) =>
|
|
334
|
+
getCharacterMotionPromptHint("kiss-partner").replace(/\bthe subject\b/g, target).replace(/\bthe partner\b/g, partner)
|
|
335
|
+
|
|
336
|
+
it("a minor wired to target drops the adult-only move and keeps the neutral one", () => {
|
|
337
|
+
const out = getParameterPromptHint(motion, {
|
|
338
|
+
nodes: [{ id: "c1", type: "character", data: { characterName: "Mira", person: MINOR } }],
|
|
339
|
+
edges: [{ source: "c1", target: "n1", targetHandle: "target" }],
|
|
340
|
+
})
|
|
341
|
+
expect(out).toBe(wave("Mira"))
|
|
342
|
+
expect(out).not.toMatch(/kiss/i)
|
|
343
|
+
})
|
|
344
|
+
|
|
345
|
+
it("an adult wired to target keeps both moves", () => {
|
|
346
|
+
const out = getParameterPromptHint(motion, {
|
|
347
|
+
nodes: [{ id: "c1", type: "character", data: { characterName: "Mira", person: ADULT } }],
|
|
348
|
+
edges: [{ source: "c1", target: "n1", targetHandle: "target" }],
|
|
349
|
+
})
|
|
350
|
+
expect(out).toBe(`${wave("Mira")}, then ${kiss("Mira", "another person")}`)
|
|
351
|
+
expect(out).toMatch(/kiss/)
|
|
352
|
+
})
|
|
353
|
+
|
|
354
|
+
it("a minor wired only to partner also drops the adult-only move", () => {
|
|
355
|
+
const out = getParameterPromptHint(motion, {
|
|
356
|
+
nodes: [
|
|
357
|
+
{ id: "c1", type: "character", data: { characterName: "Mira", person: ADULT } },
|
|
358
|
+
{ id: "c2", type: "character", data: { characterName: "Theo", person: MINOR } },
|
|
359
|
+
],
|
|
360
|
+
edges: [
|
|
361
|
+
{ source: "c1", target: "n1", targetHandle: "target" },
|
|
362
|
+
{ source: "c2", target: "n1", targetHandle: "partner" },
|
|
363
|
+
],
|
|
364
|
+
})
|
|
365
|
+
expect(out).toBe(wave("Mira"))
|
|
366
|
+
expect(out).not.toMatch(/kiss/i)
|
|
367
|
+
})
|
|
368
|
+
|
|
369
|
+
it("a minor described only in free text drops the adult-only move", () => {
|
|
370
|
+
for (const field of ["description", "seedPrompt", "canonicalDescription"] as const) {
|
|
371
|
+
const out = getParameterPromptHint(motion, {
|
|
372
|
+
nodes: [{ id: "c1", type: "character", data: { characterName: "Mira", [field]: "a 12-year-old girl in a red coat" } }],
|
|
373
|
+
edges: [{ source: "c1", target: "n1", targetHandle: "target" }],
|
|
374
|
+
})
|
|
375
|
+
expect(out, field).toBe(wave("Mira"))
|
|
376
|
+
}
|
|
377
|
+
})
|
|
378
|
+
|
|
379
|
+
it("an unnamed ref that describes a minor still floors", () => {
|
|
380
|
+
const out = getParameterPromptHint(motion, {
|
|
381
|
+
nodes: [{ id: "c1", type: "character", data: { person: MINOR } }],
|
|
382
|
+
edges: [{ source: "c1", target: "n1", targetHandle: "target" }],
|
|
383
|
+
})
|
|
384
|
+
expect(out).toBe(getCharacterMotionPromptHint("wave-hello"))
|
|
385
|
+
expect(out).not.toMatch(/kiss/i)
|
|
386
|
+
})
|
|
387
|
+
|
|
388
|
+
it("a minor on an unrelated handle does not floor", () => {
|
|
389
|
+
const out = getParameterPromptHint(motion, {
|
|
390
|
+
nodes: [{ id: "c1", type: "character", data: { characterName: "Mira", person: MINOR } }],
|
|
391
|
+
edges: [{ source: "c1", target: "n1", targetHandle: "in" }],
|
|
392
|
+
})
|
|
393
|
+
expect(out).toMatch(/kiss/)
|
|
394
|
+
})
|
|
395
|
+
})
|
|
396
|
+
|
|
397
|
+
// A Creature (data.creatureName) wired to Character Motion's target / partner is
|
|
398
|
+
// named like the other identity refs. The creature read is local to Character
|
|
399
|
+
// Motion: Character FX (and Camera Motion) keep the shared name read unchanged.
|
|
400
|
+
describe("getParameterPromptHint — character-motion names a creature ref", () => {
|
|
401
|
+
const rex = { id: "k1", type: "creature", data: { creatureName: " Rex " } }
|
|
402
|
+
|
|
403
|
+
it("a creature on partner is named in the two-person move", () => {
|
|
404
|
+
const out = getParameterPromptHint(
|
|
405
|
+
{ id: "n1", type: "character-motion", data: { characterMotion: "hug-partner" } },
|
|
406
|
+
{ nodes: [rex], edges: [{ source: "k1", target: "n1", targetHandle: "partner" }] },
|
|
407
|
+
)
|
|
408
|
+
expect(out).toBe(getCharacterMotionPromptHint("hug-partner").replace(/\bthe partner\b/g, "Rex"))
|
|
409
|
+
expect(out).not.toContain("another person")
|
|
410
|
+
})
|
|
411
|
+
|
|
412
|
+
it("a creature on target becomes the subject", () => {
|
|
413
|
+
const out = getParameterPromptHint(
|
|
414
|
+
{ id: "n1", type: "character-motion", data: { characterMotion: "wave-hello" } },
|
|
415
|
+
{ nodes: [rex], edges: [{ source: "k1", target: "n1", targetHandle: "target" }] },
|
|
416
|
+
)
|
|
417
|
+
expect(out).toBe(getCharacterMotionPromptHint("wave-hello").replace(/\bthe subject\b/g, "Rex"))
|
|
418
|
+
})
|
|
419
|
+
|
|
420
|
+
it("Character FX with a creature on target is unchanged (still unnamed)", () => {
|
|
421
|
+
const fx = { id: "n1", type: "character-fx", data: { characterFx: "werewolf" } }
|
|
422
|
+
const out = getParameterPromptHint(fx, {
|
|
423
|
+
nodes: [rex],
|
|
424
|
+
edges: [{ source: "k1", target: "n1", targetHandle: "target" }],
|
|
425
|
+
})
|
|
426
|
+
expect(out).toBe(getParameterPromptHint(fx))
|
|
427
|
+
expect(out).not.toContain("Rex")
|
|
428
|
+
})
|
|
429
|
+
})
|
|
@@ -146,6 +146,8 @@ const SAMPLE_DATA_BY_TYPE: Record<string, Record<string, unknown>> = {
|
|
|
146
146
|
// CHARACTER_FX[0] is "auto" with an intentionally empty promptHint — use a
|
|
147
147
|
// real effect id so the sync test exercises the hint dispatch.
|
|
148
148
|
"character-fx": { characterFx: "werewolf" },
|
|
149
|
+
// CHARACTER_MOTIONS[0] is the "auto" no-op head — use a real move.
|
|
150
|
+
"character-motion": { characterMotion: "wave-hello" },
|
|
149
151
|
"loop-subject": { loopSubject: firstId(LOOP_SUBJECTS) },
|
|
150
152
|
"scene-count": { count: 5 },
|
|
151
153
|
"duration": { seconds: 8 },
|
|
@@ -86,7 +86,7 @@ describe("registry invariants (all analyzable pickers)", () => {
|
|
|
86
86
|
"lens", "camera-format", "setting", "atmosphere", "style", "mood", "color-look",
|
|
87
87
|
"photographer", "aesthetic", "era", "photo-genre", "backdrop", "render-quality",
|
|
88
88
|
"composition-effects", "post-process-effects", "action-fx", "loop-subject",
|
|
89
|
-
"transition", "character-fx", "pose", "material", "held-prop", "camera-motion",
|
|
89
|
+
"transition", "character-fx", "character-motion", "pose", "material", "held-prop", "camera-motion",
|
|
90
90
|
"animal", "vehicle", "weapon", "furniture",
|
|
91
91
|
]),
|
|
92
92
|
)
|
|
@@ -148,6 +148,6 @@ describe("transition timing catalogs", () => {
|
|
|
148
148
|
const singlesWithDims = PICKER_CATALOGS.filter(
|
|
149
149
|
(c) => c.kind === "single" && c.dimensions,
|
|
150
150
|
).map((c) => c.nodeType)
|
|
151
|
-
expect(singlesWithDims).toEqual(["transition", "character-fx"])
|
|
151
|
+
expect(singlesWithDims).toEqual(["transition", "character-fx", "character-motion"])
|
|
152
152
|
})
|
|
153
153
|
})
|
|
@@ -22,9 +22,18 @@ describe("video reference-image capability (catalog)", () => {
|
|
|
22
22
|
// Replicate reference_images, and the `maxRefImages` merge for grok-i2v /
|
|
23
23
|
// happyhorse-ref2v) — must keep advertising it. Subset check, so wiring a
|
|
24
24
|
// NEW ref-capable model doesn't fail here; only breaking a wired one does.
|
|
25
|
+
// VEO 3.1 QUALITY (`veo3`) is the mirror case, and a costlier one: it DID
|
|
26
|
+
// advertise the feature, the adapter sent generationType:
|
|
27
|
+
// "REFERENCE_2_VIDEO", and KIE answered "Reference to video only supports
|
|
28
|
+
// the Veo Fast model and Veo Lite model." — a 422 after the credits were
|
|
29
|
+
// reserved (production 2026-09-04, app-reports lane G). Reference-to-video
|
|
30
|
+
// exists on the Fast and Lite SKUs only.
|
|
31
|
+
it("excludes veo3 / VEO 3.1 Quality (KIE serves reference-to-video on Fast + Lite only)", () => {
|
|
32
|
+
expect(refModels).not.toContain("veo3")
|
|
33
|
+
})
|
|
34
|
+
|
|
25
35
|
it("includes the wired reference-capable video models", () => {
|
|
26
36
|
for (const id of [
|
|
27
|
-
"veo3",
|
|
28
37
|
"veo3.1",
|
|
29
38
|
"veo3_lite",
|
|
30
39
|
"gemini-omni-video",
|
package/src/age-floor.ts
CHANGED
|
@@ -34,7 +34,7 @@ export interface AdultOnlyEntry {
|
|
|
34
34
|
* sweeps for the flag, and which analyzer keys `FLOORED_PICKER_KEYS` strips
|
|
35
35
|
* flagged ids out of (a `photo-genre` swept for the flag but absent from the
|
|
36
36
|
* strip list let `glamour-portrait` survive on a minor). */
|
|
37
|
-
export const ADULT_SWEPT_CATALOG_IDS = ["styling", "mood", "pose", "photo-genre"] as const
|
|
37
|
+
export const ADULT_SWEPT_CATALOG_IDS = ["styling", "mood", "pose", "photo-genre", "character-motion"] as const
|
|
38
38
|
|
|
39
39
|
/** Membership form of the list above (the sweep does one lookup per catalog). */
|
|
40
40
|
const ADULT_SWEPT_CATALOG_ID_SET: ReadonlySet<string> = new Set(ADULT_SWEPT_CATALOG_IDS)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { CharacterMotion } from "./types.js"
|
|
2
|
+
|
|
3
|
+
/** Animals & Pets — 28 entries. Category id `animals-pets`. */
|
|
4
|
+
export const ANIMALS_PETS_MOTIONS: ReadonlyArray<CharacterMotion> = [
|
|
5
|
+
{ id: "pet-a-dog", label: "Pet a Dog", category: "animals-pets", description: "Flat hand strokes over the dog's skull and neck",
|
|
6
|
+
promptHint: "the subject lowers an open hand onto a dog's head, draws the flat palm back over the skull to the base of the neck, lifts the hand away and repeats the stroke",
|
|
7
|
+
term: "pets a dog on the head" },
|
|
8
|
+
{ id: "scratch-behind-ears", label: "Scratch Behind Ears", category: "animals-pets", description: "Fingertips work in small circles behind an ear",
|
|
9
|
+
promptHint: "the subject reaches to the side of an animal's head and works curled fingertips in small circles behind one ear, the wrist rocking, the other hand resting under the muzzle",
|
|
10
|
+
term: "scratches behind the ears" },
|
|
11
|
+
{ id: "ruffle-dog-fur", label: "Ruffle Dog Fur", category: "animals-pets", description: "Fingers scrub through the thick fur at the neck",
|
|
12
|
+
promptHint: "the subject sinks the fingers deep into the thick fur at a dog's neck and scrubs them briskly back and forth through the coat, elbows pumping, then opens the fingers and lifts the hands away",
|
|
13
|
+
term: "ruffles a dog's fur with both hands" },
|
|
14
|
+
{ id: "scoop-up-pet", label: "Scoop Up Pet", category: "animals-pets", description: "Bends, slides both hands under, lifts to the chest",
|
|
15
|
+
promptHint: "the subject bends at the knees, slides one hand under a small pet's chest and the other under its hindquarters, and straightens upright, drawing the animal in against the subject's chest",
|
|
16
|
+
term: "scoops up a small pet" },
|
|
17
|
+
{ id: "offer-hand-to-sniff", label: "Offer Hand to Sniff", category: "animals-pets", description: "Arm extends, knuckles down, hand held still",
|
|
18
|
+
promptHint: "the subject extends one arm forward at waist height with the fingers curled and the knuckles down, stops the hand short of the animal and holds it motionless, shoulders loose",
|
|
19
|
+
term: "holds out a hand to be sniffed" },
|
|
20
|
+
{ id: "offer-a-treat", label: "Offer a Treat", category: "animals-pets", description: "Flat open palm held out at arm length",
|
|
21
|
+
promptHint: "the subject brings a treat out of a pocket, flattens the palm with the fingers pressed straight, extends the arm forward at waist height and holds the hand steady while a dog lips the treat off the open palm",
|
|
22
|
+
term: "offers a treat on an open palm" },
|
|
23
|
+
{ id: "get-pulled-by-leash", label: "Get Pulled by Leash", category: "animals-pets", description: "Leash snaps taut and drags the arm forward",
|
|
24
|
+
promptHint: "the subject is yanked forward as the leash snaps taut and stumbles a step with one shoulder dragged ahead of the torso, then leans the weight back and digs the heels in",
|
|
25
|
+
term: "gets pulled along by the leash" },
|
|
26
|
+
{ id: "reel-in-leash", label: "Reel In Leash", category: "animals-pets", description: "Hand over hand shortens the leash",
|
|
27
|
+
promptHint: "the subject gathers the leash hand over hand, each fist closing on the line and drawing it back to the hip until the slack is gone, the elbow tucked tight against the ribs",
|
|
28
|
+
term: "reels in the leash hand over hand" },
|
|
29
|
+
{ id: "throw-ball-for-dog", label: "Throw Ball for Dog", category: "animals-pets", description: "Overhand wind-up, release, follow-through",
|
|
30
|
+
promptHint: "the subject cocks the throwing arm back past the shoulder, steps onto the front foot, whips the arm forward and releases a ball, the hand following through down across the opposite hip",
|
|
31
|
+
term: "throws a ball for a dog" },
|
|
32
|
+
{ id: "kneel-to-greet", label: "Kneel to Greet", category: "animals-pets", description: "Drops to one knee and opens both arms",
|
|
33
|
+
promptHint: "the subject drops onto one knee, spreads both arms wide and leans the chest forward, closing both hands around a dog's shoulders and rocking back slightly under the weight",
|
|
34
|
+
term: "kneels down to greet a dog" },
|
|
35
|
+
{ id: "signal-dog-to-sit", label: "Signal Dog to Sit", category: "animals-pets", description: "Flat palm raised, then pressed down and held",
|
|
36
|
+
promptHint: "the subject raises one flat palm to chest height, holds it still for a beat, and presses the hand down toward the ground in a firm level push, freezing it there",
|
|
37
|
+
term: "signals a dog to sit" },
|
|
38
|
+
{ id: "call-dog-over", label: "Call Dog Over", category: "animals-pets", description: "Slaps thighs, whistles, crouches with arms open",
|
|
39
|
+
promptHint: "the subject slaps both palms against the thighs twice, cups one hand beside the mouth to whistle, and drops into a crouch with the arms spread open and waiting",
|
|
40
|
+
term: "calls a dog over" },
|
|
41
|
+
{ id: "cuddle-pet-on-lap", label: "Cuddle Pet on Lap", category: "animals-pets", description: "Curls over a pet on the lap and strokes its back",
|
|
42
|
+
promptHint: "the subject curls the shoulders forward over a pet settled across the lap, runs one hand in long strokes down its back and lets the chin drop toward it",
|
|
43
|
+
term: "cuddles a pet on the lap" },
|
|
44
|
+
{ id: "hold-cat-to-chest", label: "Hold Cat to Chest", category: "animals-pets", description: "Gathers a cat up against the sternum",
|
|
45
|
+
promptHint: "the subject gathers a cat up against the chest, one forearm braced under its hindquarters and the other hand flat along its back, and lowers the chin toward its head",
|
|
46
|
+
term: "holds a cat against the chest" },
|
|
47
|
+
{ id: "lift-cat-up", label: "Lift Cat Up", category: "animals-pets", description: "Chest and hindquarters supported, lifted to eye level",
|
|
48
|
+
promptHint: "the subject slides one hand under a cat's chest just behind the front legs and the other under its hindquarters, lifts it up to eye level as the arms extend, holds it there a beat before drawing it back in against the chest",
|
|
49
|
+
term: "lifts a cat up to eye level" },
|
|
50
|
+
{ id: "lift-puppy-to-face", label: "Lift Puppy to Face", category: "animals-pets", description: "Raises a puppy up nose to nose",
|
|
51
|
+
promptHint: "the subject raises a puppy in both hands from lap height up to eye level, lifts the chin and leans in until the two are nose to nose, then lowers the puppy back down against the subject's chest",
|
|
52
|
+
term: "holds a puppy up to the face" },
|
|
53
|
+
{ id: "let-bird-perch", label: "Let Bird Perch", category: "animals-pets", description: "Index finger held out level and steady",
|
|
54
|
+
promptHint: "the subject holds one index finger out level in front of the chest and locks the elbow against the ribs to keep the hand from shaking, lifting the whole arm upward as a bird steps onto the finger",
|
|
55
|
+
term: "holds out a finger for a bird" },
|
|
56
|
+
{ id: "feed-the-ducks", label: "Feed the Ducks", category: "animals-pets", description: "Breaks off pieces and tosses them underhand",
|
|
57
|
+
promptHint: "the subject reaches into a bag, pinches off small pieces and flicks them out underhand one after another with a loose wrist, stepping back a pace between tosses",
|
|
58
|
+
term: "feeds the ducks" },
|
|
59
|
+
{ id: "stroke-horse-neck", label: "Stroke Horse Neck", category: "animals-pets", description: "Long flat-palm sweeps down the neck",
|
|
60
|
+
promptHint: "the subject lays a flat palm high on a horse's neck and sweeps it down the length of the crest in long full strokes, the other hand resting at the horse's shoulder",
|
|
61
|
+
term: "strokes a horse's neck" },
|
|
62
|
+
{ id: "brush-the-horse", label: "Brush the Horse", category: "animals-pets", description: "Long brush strokes along the lie of the coat",
|
|
63
|
+
promptHint: "the subject presses a brush to a horse's flank and pulls it in long strokes along the lie of the coat, the free hand steadying the horse ahead of each pass, the shoulder swinging with the motion",
|
|
64
|
+
term: "brushes a horse's coat" },
|
|
65
|
+
{ id: "pat-horse-flank", label: "Pat Horse Flank", category: "animals-pets", description: "Two firm open-palm pats, then rests the hand",
|
|
66
|
+
promptHint: "the subject brings a flat hand in to pat a horse's flank twice with a firm open palm, then leaves the hand resting there and leans a little weight onto it",
|
|
67
|
+
term: "pats a horse on the flank" },
|
|
68
|
+
{ id: "mount-the-horse", label: "Mount the Horse", category: "animals-pets", description: "Foot in the stirrup, swings the leg over",
|
|
69
|
+
promptHint: "the subject sets one foot into the stirrup, grips the saddle with both hands, springs off the ground and swings the trailing leg over, then settles down and finds the other stirrup",
|
|
70
|
+
term: "mounts a horse" },
|
|
71
|
+
{ id: "back-away-slowly", label: "Back Away Slowly", category: "animals-pets", description: "Small heel-first steps back, palms raised",
|
|
72
|
+
promptHint: "the subject shifts the weight onto the back foot and takes small heel-first steps backward, palms raised open at chest height, the torso staying square and the gaze fixed forward",
|
|
73
|
+
term: "backs away slowly from an animal" },
|
|
74
|
+
{ id: "let-it-approach", label: "Let It Approach", category: "animals-pets", description: "Goes completely still and waits it out",
|
|
75
|
+
promptHint: "the subject stops mid-step and goes completely still, arms hanging loose at the sides, the breathing shallow so the chest barely moves, only the eyes tracking the animal",
|
|
76
|
+
term: "freezes as an animal comes near" },
|
|
77
|
+
{ id: "crouch-to-photograph", label: "Crouch to Photograph", category: "animals-pets", description: "Drops low and frames the animal with a phone",
|
|
78
|
+
promptHint: "the subject drops into a low crouch, braces the elbows on the knees and lifts a phone in both hands up in front of the face, holding dead still before tapping the screen with a thumb",
|
|
79
|
+
term: "crouches to photograph an animal" },
|
|
80
|
+
{ id: "tug-the-toy", label: "Tug the Toy", category: "animals-pets", description: "Both fists on a rope toy, leaning back and pulling",
|
|
81
|
+
promptHint: "the subject grips a rope toy in both fists, leans the torso back against the pull and swings the toy side to side in short jerks before stepping in to let the tension go slack",
|
|
82
|
+
term: "tugs back and forth on a rope toy" },
|
|
83
|
+
{ id: "wipe-muddy-paws", label: "Wipe Muddy Paws", category: "animals-pets", description: "Kneels and towels one paw at a time",
|
|
84
|
+
promptHint: "the subject kneels on one knee, lifts a dog's paw into a cupped hand, wraps a towel around it and rubs it clean, sets it back down and reaches for the next one",
|
|
85
|
+
term: "wipes a dog's muddy paws" },
|
|
86
|
+
{ id: "brace-for-jump", label: "Brace for Jump", category: "animals-pets", description: "Plants the back foot to absorb a dog jumping up",
|
|
87
|
+
promptHint: "the subject plants the back foot and drops the pelvis to take a dog's weight against the chest, both hands rising to catch its shoulders, the torso rocking back then steadying",
|
|
88
|
+
term: "braces as a dog jumps up" },
|
|
89
|
+
]
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import type { CharacterMotion } from "./types.js"
|
|
2
|
+
|
|
3
|
+
/** Athletic & Stunts — 71 entries. Category id `athletic-stunts`. */
|
|
4
|
+
export const ATHLETIC_STUNTS_MOTIONS: ReadonlyArray<CharacterMotion> = [
|
|
5
|
+
{ id: "vertical-jump", label: "Vertical Jump", category: "athletic-stunts", description: "Crouch, drive straight up, land soft on bent knees",
|
|
6
|
+
promptHint: "the subject sinks into a quarter squat with arms swung back, drives straight up off both feet with arms reaching overhead, then lands softly on bent knees",
|
|
7
|
+
term: "jump straight up and land" },
|
|
8
|
+
{ id: "leap-across-gap", label: "Leap Across Gap", category: "athletic-stunts", description: "Running takeoff, legs split in flight, far-side landing",
|
|
9
|
+
promptHint: "the subject takes running strides toward an edge, plants one foot at the lip and drives off it, sails forward with legs split and arms reaching, then lands on the far side and absorbs on bent knees",
|
|
10
|
+
term: "leap across a gap" },
|
|
11
|
+
{ id: "box-jump", label: "Box Jump", category: "athletic-stunts", description: "Two-foot jump up onto a box, stand tall on top",
|
|
12
|
+
promptHint: "the subject faces a box, dips into a half squat with arms back, jumps from both feet swinging the arms forward, lands flat-footed on top with soft knees, then stands tall",
|
|
13
|
+
term: "jump up onto a box" },
|
|
14
|
+
{ id: "precision-jump", label: "Precision Jump", category: "athletic-stunts", description: "Standing jump landing balanced on a narrow rail",
|
|
15
|
+
promptHint: "the subject stands with toes at an edge, swings both arms back and jumps from both feet, draws the knees up in flight, then lands on the balls of the feet on a narrow rail and holds balance",
|
|
16
|
+
term: "precision-jump onto a narrow rail" },
|
|
17
|
+
{ id: "backflip", label: "Backflip", category: "athletic-stunts", description: "Standing backward flip, tucked, landed on both feet",
|
|
18
|
+
promptHint: "the subject swings the arms up and jumps straight off both feet, tucks the knees to the chest while rotating backward through a full flip, then opens up and lands on both feet",
|
|
19
|
+
term: "backflip from standing" },
|
|
20
|
+
{ id: "front-flip", label: "Front Flip", category: "athletic-stunts", description: "Two-step punch into a forward flip, landed",
|
|
21
|
+
promptHint: "the subject takes two steps, punches off both feet, tucks the chin and knees while rotating forward through a full flip, then extends and lands on both feet with knees bent",
|
|
22
|
+
term: "front-flip from a two-step run" },
|
|
23
|
+
{ id: "cartwheel", label: "Cartwheel", category: "athletic-stunts", description: "Hand-hand-foot-foot sideways wheel",
|
|
24
|
+
promptHint: "the subject lunges sideways, plants one hand then the other on the ground with arms locked, swings the legs over the top in a straight line like a wheel, and lands one foot then the other",
|
|
25
|
+
term: "cartwheel sideways" },
|
|
26
|
+
{ id: "round-off", label: "Round-off", category: "athletic-stunts", description: "Cartwheel that snaps both feet down, facing back",
|
|
27
|
+
promptHint: "the subject takes a hurdle step into a cartwheel, plants both hands, snaps the legs together at the top of the rotation, and punches both feet down together to land facing back the way they came",
|
|
28
|
+
term: "hurdle into a round-off and snap down" },
|
|
29
|
+
{ id: "vault-over-obstacle", label: "Vault Over Obstacle", category: "athletic-stunts", description: "Parkour speed vault, one hand on top, legs swung over",
|
|
30
|
+
promptHint: "the subject runs at a waist-high obstacle, plants one hand on top and swings both legs over to the side of the planted arm, clears the top, then lands on the far side and keeps running",
|
|
31
|
+
term: "vault over an obstacle" },
|
|
32
|
+
{ id: "wall-run", label: "Wall Run", category: "athletic-stunts", description: "Two or three driving steps up a wall, then push off",
|
|
33
|
+
promptHint: "the subject sprints at a wall at an angle, plants one foot high on the surface and drives up it for two or three steps leaning into the wall, then pushes off and drops back down",
|
|
34
|
+
term: "run up a wall and push off" },
|
|
35
|
+
{ id: "baseball-slide", label: "Baseball Slide", category: "athletic-stunts", description: "Sprint, drop onto a hip, feet-first slide to the base",
|
|
36
|
+
promptHint: "the subject sprints toward a base, drops onto one hip with the lead leg extended and the other knee bent under it, slides feet first with the arms raised, and stops with the lead foot against the base",
|
|
37
|
+
term: "slide feet-first into a base" },
|
|
38
|
+
{ id: "dive-roll", label: "Dive Roll", category: "athletic-stunts", description: "Dive over a low obstacle into a roll, come up running",
|
|
39
|
+
promptHint: "the subject runs at a low obstacle, dives headlong over it with arms stretched forward, tucks the chin and takes the landing on the hands and upper back, rolls forward along the spine, and comes up onto the feet running",
|
|
40
|
+
term: "dive over an obstacle into a roll" },
|
|
41
|
+
{ id: "superhero-landing", label: "Superhero Landing", category: "athletic-stunts", description: "Drop into a knee-and-fist three-point crouch, then rise",
|
|
42
|
+
promptHint: "the subject drops from height and lands in a deep crouch with one knee and one fist striking the ground, the other arm flung out to the side and head down, then lifts the head and rises to standing",
|
|
43
|
+
term: "land in a three-point superhero crouch" },
|
|
44
|
+
{ id: "sprint-start", label: "Sprint Start", category: "athletic-stunts", description: "Set in the blocks, drive out low, open into full stride",
|
|
45
|
+
promptHint: "the subject crouches in starting blocks with fingertips on the line, raises the pelvis into the set position, then drives forward off the front foot in a low lean and accelerates into full stride",
|
|
46
|
+
term: "drive out of the starting blocks" },
|
|
47
|
+
{ id: "skid-to-stop", label: "Skid to a Stop", category: "athletic-stunts", description: "Full run braked into a heel-skid dead stop",
|
|
48
|
+
promptHint: "the subject arrives at a full run, plants the feet wide and drops the pelvis while leaning back, skids forward with heels braking and arms out for balance, then settles to a dead stop upright",
|
|
49
|
+
term: "skid to a stop" },
|
|
50
|
+
{ id: "hurdle-jump", label: "Hurdle Jump", category: "athletic-stunts", description: "Clear a hurdle mid-sprint, lead leg over, trail leg flat",
|
|
51
|
+
promptHint: "the subject sprints toward a hurdle, drives the lead knee up and extends that leg over the bar while the trail leg folds flat out to the side, snaps the lead foot down, and continues sprinting",
|
|
52
|
+
term: "hurdle a barrier mid-sprint" },
|
|
53
|
+
{ id: "lean-across-finish-line", label: "Lean Across Finish Line", category: "athletic-stunts", description: "Final strides, chest thrown forward through the tape",
|
|
54
|
+
promptHint: "the subject sprints the final strides toward a finish line, throws the chest forward and drops the head with the arms swept back behind the body to break the tape, then straightens up and slows to a jog",
|
|
55
|
+
term: "lean across the finish line" },
|
|
56
|
+
{ id: "run-celebrating-arms-out", label: "Run Celebrating Arms Out", category: "athletic-stunts", description: "Goal celebration run, arms spread wide, head back",
|
|
57
|
+
promptHint: "the subject breaks into a run with both arms spread wide like wings, head tilted back and mouth open in a shout, then slides to a stop on the knees with the arms still outstretched",
|
|
58
|
+
term: "run celebrating with arms spread wide" },
|
|
59
|
+
{ id: "soccer-dribble", label: "Soccer Dribble", category: "athletic-stunts", description: "Close-control dribble, feints, and a cut inside",
|
|
60
|
+
promptHint: "the subject jogs forward tapping a soccer ball ahead with the inside of alternating feet, drops the shoulder in a feint one way, then cuts the ball the other way with the outside of the foot and accelerates after it",
|
|
61
|
+
term: "dribble a soccer ball with a feint" },
|
|
62
|
+
{ id: "kick-ball", label: "Kick a Ball", category: "athletic-stunts", description: "Plant, swing through, strike with the instep, follow through",
|
|
63
|
+
promptHint: "the subject takes two approach steps to a ball on the ground, plants the support foot beside it, swings the kicking leg through with the pelvis rotating, strikes with the instep, and follows through with the leg rising",
|
|
64
|
+
term: "kick a ball with the instep" },
|
|
65
|
+
{ id: "header", label: "Header", category: "athletic-stunts", description: "Jump, arch back, snap the forehead through the ball",
|
|
66
|
+
promptHint: "the subject tracks a ball in the air, jumps off one foot with the arms driving up, arches the back and pulls the head behind the shoulders, then snaps the torso forward to strike the ball with the forehead",
|
|
67
|
+
term: "head the ball with the forehead" },
|
|
68
|
+
{ id: "bicycle-kick", label: "Bicycle Kick", category: "athletic-stunts", description: "Airborne overhead scissor kick, landing on the back",
|
|
69
|
+
promptHint: "the subject faces away from the goal, leaps backward off one leg and swings the other leg up, then scissors the takeoff leg up and over it to strike the ball overhead, and lands on the back and shoulders",
|
|
70
|
+
term: "bicycle-kick the ball overhead" },
|
|
71
|
+
{ id: "goalkeeper-dive-save", label: "Goalkeeper Dive Save", category: "athletic-stunts", description: "Set stance, explode sideways, full-length dive, ball held",
|
|
72
|
+
promptHint: "the subject sets in a ready crouch with hands out, pushes off the near foot into a full-length sideways dive, stretches both arms to catch the ball in both hands, and lands on the side clutching it to the chest",
|
|
73
|
+
term: "dive full-length for a save" },
|
|
74
|
+
{ id: "throw-ball", label: "Throw a Ball", category: "athletic-stunts", description: "Overhand throw with stride, hip turn, and follow-through",
|
|
75
|
+
promptHint: "the subject steps back with the ball cocked behind the head, strides onto the front foot, rotates the pelvis and shoulders, whips the arm through and releases the ball, and follows through across the body",
|
|
76
|
+
term: "throw a ball overhand" },
|
|
77
|
+
{ id: "catch-ball", label: "Catch a Ball", category: "athletic-stunts", description: "Track, reach with both hands, absorb into the chest",
|
|
78
|
+
promptHint: "the subject tracks an incoming ball with the eyes, steps toward it with both hands raised and fingers spread, absorbs the ball by pulling the hands to the chest, then holds it secure",
|
|
79
|
+
term: "catch a ball two-handed" },
|
|
80
|
+
{ id: "baseball-pitch", label: "Baseball Pitch", category: "athletic-stunts", description: "Wind-up, high leg kick, stride, whip the arm through",
|
|
81
|
+
promptHint: "the subject stands side-on with the ball in the glove, lifts the front knee high in a wind-up, strides toward the plate, whips the throwing arm over the top to release, and follows through with the back leg swinging around",
|
|
82
|
+
term: "wind up and pitch a baseball" },
|
|
83
|
+
{ id: "swing-bat", label: "Swing a Bat", category: "athletic-stunts", description: "Side-on stride, hip rotation, bat through the zone",
|
|
84
|
+
promptHint: "the subject stands side-on with the bat cocked over the back shoulder, strides onto the front foot, rotates the pelvis then the shoulders, whips the bat through the strike zone, and follows through over the shoulder",
|
|
85
|
+
term: "swing a baseball bat" },
|
|
86
|
+
{ id: "golf-swing", label: "Golf Swing", category: "athletic-stunts", description: "Backswing over the shoulder, unwind, high finish",
|
|
87
|
+
promptHint: "the subject addresses the ball in a bent-over stance, draws the club back in a wide arc over the shoulder, unwinds the pelvis and swings down through the ball, and finishes with the chest facing the target, club high",
|
|
88
|
+
term: "swing a golf club through the ball" },
|
|
89
|
+
{ id: "tennis-serve", label: "Tennis Serve", category: "athletic-stunts", description: "Toss, knee bend, spring up, snap the racket over",
|
|
90
|
+
promptHint: "the subject tosses the ball up with the front arm while drawing the racket back, bends the knees, springs upward, snaps the racket over the top of the ball, and lands forward on the front foot",
|
|
91
|
+
term: "serve a tennis ball" },
|
|
92
|
+
{ id: "tennis-forehand", label: "Tennis Forehand", category: "athletic-stunts", description: "Split step, racket back, swing low to high, follow through",
|
|
93
|
+
promptHint: "the subject split-steps and turns the shoulders sideways with the racket drawn back, steps into the ball with the front foot, swings the racket low to high through contact, and follows through with the racket finishing over the opposite shoulder",
|
|
94
|
+
term: "hit a tennis forehand" },
|
|
95
|
+
{ id: "volleyball-spike", label: "Volleyball Spike", category: "athletic-stunts", description: "Three-step approach, two-foot jump, arm swing over the net",
|
|
96
|
+
promptHint: "the subject takes a three-step approach to the net with arms swinging back, jumps off both feet with both arms driving up, draws the hitting elbow back high, and snaps the open hand down over the ball at the peak",
|
|
97
|
+
term: "spike a volleyball over the net" },
|
|
98
|
+
{ id: "basketball-dribble", label: "Basketball Dribble", category: "athletic-stunts", description: "Low dribble with a crossover while stepping sideways",
|
|
99
|
+
promptHint: "the subject crouches low with knees bent, bounces a basketball with one hand at hip height, crosses it over to the other hand in front of the body, and keeps dribbling while stepping sideways",
|
|
100
|
+
term: "dribble a basketball with a crossover" },
|
|
101
|
+
{ id: "layup", label: "Layup", category: "athletic-stunts", description: "Two-step drive and one-hand lay off the backboard",
|
|
102
|
+
promptHint: "the subject dribbles toward the basket, gathers the ball in both hands, takes two long steps, drives up off the inside foot with the opposite knee lifting, and lays the ball off the backboard with one hand",
|
|
103
|
+
term: "drive in for a layup" },
|
|
104
|
+
{ id: "slam-dunk", label: "Slam Dunk", category: "athletic-stunts", description: "Two-foot rise and slam through the hoop, hang, drop",
|
|
105
|
+
promptHint: "the subject drives toward the rim with the ball, jumps off both feet, rises with the ball raised above the head, slams it down through the hoop, and hangs on the rim before dropping to the floor",
|
|
106
|
+
term: "slam dunk the ball" },
|
|
107
|
+
{ id: "free-throw", label: "Free Throw", category: "athletic-stunts", description: "Set at the line, dip, extend, wrist-flick release",
|
|
108
|
+
promptHint: "the subject stands at the line holding the ball at the waist, bends the knees, raises the ball to the forehead with the elbow under it, extends the legs and arm together, and flicks the wrist to release",
|
|
109
|
+
term: "shoot a free throw" },
|
|
110
|
+
{ id: "shadowbox", label: "Shadowbox", category: "athletic-stunts", description: "Bounce on the toes, throw combos at the air, slip and weave",
|
|
111
|
+
promptHint: "the subject bounces on the balls of the feet in a boxing guard, throws a jab-cross-hook combination at the air with the pelvis turning into each punch, slips the head to one side, and resets with a short shuffle step",
|
|
112
|
+
term: "shadowbox with combos and slips" },
|
|
113
|
+
{ id: "punch-heavy-bag", label: "Punch Heavy Bag", category: "athletic-stunts", description: "Guard up, jab-cross into the bag, hook, step around",
|
|
114
|
+
promptHint: "the subject squares up to a heavy bag in a boxing guard, fires a jab and a cross into it with the rear hip turning through, digs a hook into its side as it swings back, and resets",
|
|
115
|
+
term: "punch a heavy bag" },
|
|
116
|
+
{ id: "push-up", label: "Push-up", category: "athletic-stunts", description: "Plank, chest to the floor, press back to lockout",
|
|
117
|
+
promptHint: "the subject starts in a straight-arm plank with hands under the shoulders, lowers the chest toward the floor by bending the elbows while keeping the body rigid, then presses back up to full extension",
|
|
118
|
+
term: "lower into a push-up and press back up" },
|
|
119
|
+
{ id: "plank", label: "Plank", category: "athletic-stunts", description: "Drop to the forearms, body rigid, hold, then rest",
|
|
120
|
+
promptHint: "the subject drops from kneeling onto the forearms with elbows under the shoulders, extends both legs back onto the toes so the body forms one rigid line, holds the position with the pelvis level, then lowers the knees to rest",
|
|
121
|
+
term: "drop into a plank and hold" },
|
|
122
|
+
{ id: "sit-up-crunch", label: "Sit-up", category: "athletic-stunts", description: "Lie back, curl the torso up to the knees, lower down",
|
|
123
|
+
promptHint: "the subject lies on the back with knees bent and feet flat, hands behind the head, curls the torso up until the chest nears the knees, then lowers back down one vertebra at a time and repeats",
|
|
124
|
+
term: "do sit-ups" },
|
|
125
|
+
{ id: "bodyweight-squat", label: "Bodyweight Squat", category: "athletic-stunts", description: "Hips back and down to parallel, drive through the heels",
|
|
126
|
+
promptHint: "the subject stands with feet shoulder-width apart and arms out front, sits the pelvis back and down until the thighs are parallel to the floor with the chest up, then drives through the heels to stand",
|
|
127
|
+
term: "squat down and drive back up" },
|
|
128
|
+
{ id: "lunge", label: "Forward Lunge", category: "athletic-stunts", description: "Long step forward, both knees to ninety, push back up",
|
|
129
|
+
promptHint: "the subject steps one foot far forward and lowers straight down until both knees bend to ninety degrees with the back knee just off the floor, then pushes off the front heel to step back to standing and switches legs",
|
|
130
|
+
term: "step into a forward lunge" },
|
|
131
|
+
{ id: "deadlift", label: "Deadlift", category: "athletic-stunts", description: "Hinge, grip the bar, pull to lockout, lower it down",
|
|
132
|
+
promptHint: "the subject stands over a loaded barbell, hinges at the waist to grip the bar with a flat back, drives through the legs to pull the bar up the shins to hip lockout, then lowers it to the floor",
|
|
133
|
+
term: "deadlift a barbell" },
|
|
134
|
+
{ id: "bench-press", label: "Bench Press", category: "athletic-stunts", description: "Unrack, lower the bar to the chest, press to lockout",
|
|
135
|
+
promptHint: "the subject lies on a flat bench, unracks a barbell with straight arms above the chest, lowers it under control until it touches the chest, then presses it back up to lockout and racks it",
|
|
136
|
+
term: "bench-press a barbell" },
|
|
137
|
+
{ id: "dumbbell-curl", label: "Dumbbell Curl", category: "athletic-stunts", description: "Elbows pinned, curl to the shoulders, lower slow",
|
|
138
|
+
promptHint: "the subject stands holding a dumbbell in each hand with arms hanging straight, curls both weights up to the shoulders by bending the elbows while keeping them pinned at the sides, then lowers them back down under control",
|
|
139
|
+
term: "curl a pair of dumbbells" },
|
|
140
|
+
{ id: "burpee", label: "Burpee", category: "athletic-stunts", description: "Drop, kick back to plank, snap in, jump up",
|
|
141
|
+
promptHint: "the subject drops from standing into a crouch with hands on the floor, kicks both feet back into a plank, snaps the feet back in under the body, and jumps straight up with arms overhead",
|
|
142
|
+
term: "drop into a burpee and jump" },
|
|
143
|
+
{ id: "jumping-jacks", label: "Jumping Jacks", category: "athletic-stunts", description: "Feet apart and arms overhead, back together, repeat",
|
|
144
|
+
promptHint: "the subject stands with feet together and arms at the sides, hops the feet apart while swinging the arms overhead until the hands nearly meet, hops back to the start, and repeats in a continuous rhythm",
|
|
145
|
+
term: "do jumping jacks" },
|
|
146
|
+
{ id: "jump-rope", label: "Jump Rope", category: "athletic-stunts", description: "Wrist-driven rope swing, hops on the balls of the feet",
|
|
147
|
+
promptHint: "the subject holds a jump rope handle in each hand, swings the rope overhead with the wrists, and hops over it on the balls of the feet in a continuous rhythm with elbows tucked at the sides",
|
|
148
|
+
term: "jump rope on the spot" },
|
|
149
|
+
{ id: "sun-salutation", label: "Sun Salutation", category: "athletic-stunts", description: "Full yoga flow from standing through the floor and back",
|
|
150
|
+
promptHint: "the subject stands with palms together, sweeps the arms overhead, folds forward over the legs, steps back into a plank and lowers down, arches into upward dog, pushes back into downward dog, then steps forward and rises to standing",
|
|
151
|
+
term: "flow through a sun salutation" },
|
|
152
|
+
{ id: "tai-chi-flow", label: "Tai Chi Flow", category: "athletic-stunts", description: "Weight shifts and circling arms in one continuous flow",
|
|
153
|
+
promptHint: "the subject shifts the weight onto one soft-kneed leg as both arms rise and circle before the chest, steps the other foot out and turns the waist to sweep the arms across, then sinks back as the arms lower",
|
|
154
|
+
term: "flow through tai chi" },
|
|
155
|
+
{ id: "hamstring-stretch", label: "Hamstring Stretch", category: "athletic-stunts", description: "Heel propped up, flat-back reach to the toes, switch legs",
|
|
156
|
+
promptHint: "the subject props one heel on a raised surface with the leg straight, hinges forward at the waist with a flat back and reaches both hands toward the toes, holds the stretch, then rises and switches legs",
|
|
157
|
+
term: "stretch the hamstring on a raised heel" },
|
|
158
|
+
{ id: "freestyle-swim", label: "Freestyle Swim", category: "athletic-stunts", description: "Alternating overhead strokes, flutter kick, side breath",
|
|
159
|
+
promptHint: "the subject swims freestyle with the body long and flat at the surface, arms pulling in alternating overhead strokes as the legs flutter-kick, the head rolling to one side to breathe between strokes",
|
|
160
|
+
term: "swim freestyle" },
|
|
161
|
+
{ id: "dive-into-water", label: "Dive Into Water", category: "athletic-stunts", description: "Spring from the edge into a head-first arc",
|
|
162
|
+
promptHint: "the subject stands at the edge with toes curled over it, bends the knees and swings the arms forward, springs outward in an arc with the arms extended together past the ears, and enters the water head first",
|
|
163
|
+
term: "dive head-first into water" },
|
|
164
|
+
{ id: "cannonball-into-water", label: "Cannonball", category: "athletic-stunts", description: "Run, jump, hug the knees, splash down seat-first",
|
|
165
|
+
promptHint: "the subject runs to the edge and jumps out over the water, pulls both knees to the chest and wraps the arms around the shins in a tight ball, then drops seat first into the water with a big splash",
|
|
166
|
+
term: "cannonball into the water" },
|
|
167
|
+
{ id: "surface-and-flick-hair", label: "Surface & Flick Hair", category: "athletic-stunts", description: "Break the surface, whip the head back, hair throws an arc",
|
|
168
|
+
promptHint: "the subject rises up through the water and breaks the surface face first, whips the head back so the wet hair throws an arc of spray behind it, then wipes the water from the eyes with both hands",
|
|
169
|
+
term: "surface and flick the hair back" },
|
|
170
|
+
{ id: "pour-water-over-head", label: "Pour Water Over Head", category: "athletic-stunts", description: "Bottle raised, water cascades over the head, shake it off",
|
|
171
|
+
promptHint: "the subject raises a water bottle above the head, tips it so the water cascades over the hair and face and runs down the neck, then drops the bottle and shakes the head to throw off the drops",
|
|
172
|
+
term: "pour water over the head" },
|
|
173
|
+
{ id: "skateboard-push", label: "Skateboard Push", category: "athletic-stunts", description: "Two pushes off the ground, back foot to the tail, roll",
|
|
174
|
+
promptHint: "the subject stands on a skateboard with the front foot over the front bolts, pushes off the ground with the back foot in two long strokes, then sets the back foot on the tail and rolls in a bent-knee stance",
|
|
175
|
+
term: "push off on a skateboard" },
|
|
176
|
+
{ id: "surf-pop-up", label: "Surf Pop-up", category: "athletic-stunts", description: "Paddle prone, press up, feet under, riding stance",
|
|
177
|
+
promptHint: "the subject lies prone on a surfboard paddling with alternating arms, plants both hands under the chest, pushes up and swings the feet under the body in one motion, and rises into a crouched side-on riding stance",
|
|
178
|
+
term: "pop up on a surfboard" },
|
|
179
|
+
{ id: "ski-carve-turn", label: "Ski Carve Turn", category: "athletic-stunts", description: "Roll the edges into a carved turn, then the next",
|
|
180
|
+
promptHint: "the subject skis downhill with knees bent and poles trailing, rolls both knees and edges into the slope to carve a turn with the upper body facing down the hill, then rolls the edges over into the next turn",
|
|
181
|
+
term: "carve a ski turn" },
|
|
182
|
+
{ id: "rope-climb", label: "Rope Climb", category: "athletic-stunts", description: "Foot clamp, arm pull, re-clamp higher, repeat upward",
|
|
183
|
+
promptHint: "the subject grips a hanging rope overhead, clamps it between the feet, pulls with the arms while pushing up through the legs, re-clamps the feet higher, and repeats the reach and pull to climb upward",
|
|
184
|
+
term: "climb a hanging rope" },
|
|
185
|
+
{ id: "rope-swing-across", label: "Rope Swing Across", category: "athletic-stunts", description: "Run, swing across a gap on a rope, release and land",
|
|
186
|
+
promptHint: "the subject grabs a hanging rope with both hands, runs and lifts the feet to swing in a long arc across a gap, releases at the far end of the swing, and lands on both feet",
|
|
187
|
+
term: "swing across a gap on a rope" },
|
|
188
|
+
{ id: "pull-up", label: "Pull-up", category: "athletic-stunts", description: "Dead hang, chin over the bar, lower under control",
|
|
189
|
+
promptHint: "the subject hangs from a bar with straight arms and an overhand grip, pulls the body up by driving the elbows down until the chin clears the bar, then lowers under control to a dead hang",
|
|
190
|
+
term: "pull up until the chin clears the bar" },
|
|
191
|
+
{ id: "climb-wall", label: "Climb a Wall", category: "athletic-stunts", description: "Jump to the top edge, walk the feet up, mantle over",
|
|
192
|
+
promptHint: "the subject runs at a high wall, jumps and catches the top edge with both hands, walks the feet up the face, pulls the chest over the edge and hooks one leg, then mantles up onto the top",
|
|
193
|
+
term: "climb a wall and mantle over" },
|
|
194
|
+
{ id: "climb-ladder", label: "Climb a Ladder", category: "athletic-stunts", description: "Hand over hand up the rungs, step off at the top",
|
|
195
|
+
promptHint: "the subject grips a ladder at chest height, steps onto the bottom rung and climbs hand over hand with the opposite foot following each hand, then reaches the top and steps off onto the ledge",
|
|
196
|
+
term: "climb a ladder" },
|
|
197
|
+
{ id: "drop-and-roll", label: "Drop and Roll", category: "athletic-stunts", description: "Drop from a ledge, soft landing into a shoulder roll",
|
|
198
|
+
promptHint: "the subject drops from a ledge, lands on the balls of the feet with knees bending deep, immediately tips forward into a shoulder roll to bleed off the impact, and comes up running",
|
|
199
|
+
term: "drop from a ledge into a roll" },
|
|
200
|
+
{ id: "balance-on-beam", label: "Balance on a Beam", category: "athletic-stunts", description: "Heel-to-toe along a narrow beam, arms out, step down",
|
|
201
|
+
promptHint: "the subject steps onto a narrow beam and walks heel to toe along it with arms extended out to the sides, wobbling and correcting with the arms, then reaches the end and steps down",
|
|
202
|
+
term: "walk along a balance beam" },
|
|
203
|
+
{ id: "handstand", label: "Handstand", category: "athletic-stunts", description: "Lunge, kick up to vertical, hold, step down",
|
|
204
|
+
promptHint: "the subject steps forward into a lunge, plants both hands on the ground shoulder-width apart, kicks the legs up overhead one after the other into a straight vertical line, holds the balance, then lowers one leg and steps down",
|
|
205
|
+
term: "kick up into a handstand" },
|
|
206
|
+
{ id: "kip-up", label: "Kip-up", category: "athletic-stunts", description: "From flat on the back, snap the pelvis and spring up",
|
|
207
|
+
promptHint: "the subject lies flat on the back, rocks the legs up and over the head, then snaps the pelvis forward and pushes off the hands to spring up onto both feet in one motion",
|
|
208
|
+
term: "kip up from lying on the back" },
|
|
209
|
+
{ id: "jump-in-puddle", label: "Jump in a Puddle", category: "athletic-stunts", description: "Run up, two-foot stomp into a puddle, splash, hop out",
|
|
210
|
+
promptHint: "the subject runs up to a puddle, jumps and stomps down into it with both feet together and arms flung up as the water splashes out around the legs, then hops out laughing",
|
|
211
|
+
term: "jump into a puddle with both feet" },
|
|
212
|
+
{ id: "bounce-on-bed", label: "Bounce on a Bed", category: "athletic-stunts", description: "Climb onto a bed, bounce higher and higher, flop down",
|
|
213
|
+
promptHint: "the subject climbs onto a bed, starts bouncing on both feet with the knees soft and arms pumping, springs higher with each bounce, then drops onto the back and lets the mattress catch the fall",
|
|
214
|
+
term: "bounce on a bed and flop down" },
|
|
215
|
+
{ id: "swing-on-swing", label: "Swing on a Swing", category: "athletic-stunts", description: "Pump the legs on a swing, higher each pass, lean back",
|
|
216
|
+
promptHint: "the subject sits on a swing gripping the chains, pumps the legs forward and tucks them back to build height with each pass, and leans back with the arms straight at the top of the forward swing",
|
|
217
|
+
term: "swing on a playground swing" },
|
|
218
|
+
]
|