|
| 1 | +# Mixamo Hero Hook — Design |
| 2 | + |
| 3 | +**Date:** 2026-07-12 |
| 4 | +**Status:** Approved |
| 5 | + |
| 6 | +## Goal |
| 7 | + |
| 8 | +Use one Mixamo mocap clip (**jumping jacks**) as the "eye-candy hook" on the |
| 9 | +three primary marketing surfaces, while the procedural DSL stays the source of |
| 10 | +truth everywhere a visitor actually engages. |
| 11 | + |
| 12 | +Role of Mixamo = **pure attention-grabber**, not a claim about tool output. It |
| 13 | +is delivered through the real `clip "<name>"` DSL directive (clip-back), so the |
| 14 | +document honestly declares what it plays; deleting that one line drops it to |
| 15 | +procedural. |
| 16 | + |
| 17 | +## Scope — three surfaces, one directive |
| 18 | + |
| 19 | +All three read the same `spec/examples/jumping-jacks.posecode` document and the |
| 20 | +same `SHOWCASE_CLIPS` map, so a single directive lights up all of them: |
| 21 | + |
| 22 | +1. **Landing hero** (`playground/index.html` + `landing.ts`) — already wired to |
| 23 | + `clips: SHOWCASE_CLIPS`; needs no code change once the directive is present. |
| 24 | +2. **Playground default movement** — first thing shown on `/play`. |
| 25 | +3. **Main README GIF** (`docs/media/jumping-jacks.gif`) — re-rendered from the |
| 26 | + clip via the existing capture script (it drives the real playground). |
| 27 | + |
| 28 | +**Out of scope / unchanged:** the sub-three README GIFs (`deadlift`, `squat`, |
| 29 | +`lateral-raise`) stay **procedural**. No other preset changes. |
| 30 | + |
| 31 | +## Changes |
| 32 | + |
| 33 | +1. **`spec/examples/jumping-jacks.posecode`** — add `clip "jumping-jacks"` so the |
| 34 | + doc plays the retargeted Mixamo motion when the skinned figure is active. |
| 35 | +2. **`playground/public/clips/`** — rename the re-uploaded Mixamo file |
| 36 | + `Jumping Jacks.fbx` → `jumping-jacks.fbx` to match the `SHOWCASE_CLIPS` key |
| 37 | + (`jumping-jacks → /clips/jumping-jacks.fbx`). Files remain gitignored / |
| 38 | + CDN-served; this only reconciles local + CDN naming. |
| 39 | +3. **`playground/src/main.ts`** — introduce `DEFAULT_PRESET_ID = "jumping-jacks"` |
| 40 | + and boot from it (approach A), leaving the library list order unchanged. |
| 41 | +4. **Re-render** `docs/media/jumping-jacks.gif` via |
| 42 | + `node scripts/capture-gifs.mjs jumping-jacks`. |
| 43 | + |
| 44 | +## Honesty / consistency guardrail |
| 45 | + |
| 46 | +Only the jumping-jacks doc declares a clip. Every other preset, and the sub-3 |
| 47 | +GIFs, render procedurally — so the moment a visitor browses the library or edits |
| 48 | +the default doc, they see real DSL output. The default doc visibly contains the |
| 49 | +`clip "jumping-jacks"` line, so the mechanism is transparent, not hidden. |
| 50 | + |
| 51 | +## Verification |
| 52 | + |
| 53 | +- Browser preview: confirm the landing hero and the playground default both play |
| 54 | + the Mixamo jumping-jacks loop (not the procedural fallback), and that the loop |
| 55 | + reads cleanly through the neutral standing pose. |
| 56 | +- Confirm removing the `clip` line falls back to procedural. |
| 57 | +- Inspect the re-rendered GIF before committing. |
| 58 | + |
| 59 | +## Risk / history note |
| 60 | + |
| 61 | +Last session the landing jumping-jack "looked too bad" — that was the |
| 62 | +*procedural* fallback after clips were dropped (`26a5e68`). Re-adding the Mixamo |
| 63 | +clip is expected to be the fix. If the mocap loop itself reads poorly, adjust |
| 64 | +loop/framing before re-rendering the GIF. |
0 commit comments