Skip to content

Commit 0bd60c7

Browse files
committed
feat: broaden examples across domains + add roadmap
Add physiotherapy, desk/posture, yoga, and mobility examples (neck rotation, posture reset, spinal twist, chair pose, side bend); tag presets by domain and group them in the gallery + playground dropdown. Add ROADMAP.md mapping target domains and a future props/apparatus library (bench, pull-up bar, rings, mat, bands, …).
1 parent c57289f commit 0bd60c7

10 files changed

Lines changed: 215 additions & 14 deletions

File tree

ROADMAP.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Movit — domains & roadmap
2+
3+
Movit's vision is broad: **describe any single-person movement as text and render it
4+
safely in 3D.** The *protocol* is general; the *current renderer* is deliberately
5+
scoped (one figure, forward kinematics, ground-locked hands/feet, no props). This
6+
doc maps the domains Movit can serve, what already works, and what each remaining
7+
domain needs — so contributions land where they unlock the most.
8+
9+
## Where Movit fits
10+
11+
| Domain | Example uses | Status |
12+
| --- | --- | --- |
13+
| **Physiotherapy / rehab** | Range-of-motion demos, home-exercise programs, post-op protocols, cervical/shoulder mobility | ✅ Strong fit today — the ROM safety clamp is a clinical feature. Many moves render now; equipment (bands, balls) is future. |
14+
| **Ergonomics / desk & posture** | Posture resets, seated/standing stretch breaks, "do this every hour" prompts | ✅ Works today for standing variants; true *seated* needs a chair prop (below). |
15+
| **Yoga & mobility** | Standing poses (chair, side bend, twist), flows, mobility drills | ✅ Standing poses work; floor/inversion/lying poses need lying base poses + a mat. |
16+
| **Movement education / anatomy** | Demonstrate joint actions ("what is shoulder abduction?"), biomechanics teaching | ✅ Excellent fit — single-joint demos are exactly what the rig does. |
17+
| **Fitness / strength** | Body-weight and free-form movement coaching | ✅ Core today (squat, curl, raise). Barbell/dumbbell/machine work needs props + grip. |
18+
| **Functional / elderly care** | Sit-to-stand, balance, gentle ROM, fall-prevention drills | 🟡 Partial — sit-to-stand works; reaching/balance need reach-IK + props. |
19+
| **Sports technique** | Golf swing, tennis serve, throwing, kicking | 🟡 Partial — needs trunk rotation fidelity, weight shift, and implements (club/racket/ball). |
20+
| **Dance / choreography** | Notating sequences, port de bras, simple phrases | 🟡 Simple gestures work; precise reach + partner work are future. |
21+
| **Martial arts** | Stances, strikes, basic forms | 🟡 Stances/strikes partly work; contact and weapons are future. |
22+
| **Sign language / gesture** | Finger-spelling, signs, expressive gesture | ⛔ Needs a hand/finger rig (the rig currently ends at the wrist). |
23+
24+
## Engine capabilities that widen the scope
25+
26+
These are the unlocks, roughly in order of leverage:
27+
28+
1. **Hip / waist hinge primitive** — today deadlift / forward-fold are faked as a
29+
spinal roll-down. A true hip hinge unlocks deadlift, row, good-morning, hinge-based
30+
yoga, and bending to interact with props.
31+
2. **Reach-IK (reach a world target)** — touch your toes, hand-to-opposite-knee,
32+
grab a bar, place a hand on a wall. Unlocks a huge share of physio, yoga, and any
33+
prop interaction.
34+
3. **Scene props with contact anchors** — objects the figure can stand on, sit on,
35+
hang from, or push against, plus ground-lock-style anchors to them.
36+
4. **Lying & seated base poses** — supine / prone / quadruped / seated starting poses
37+
(for floor yoga, mat Pilates, bed-based rehab, sit-to-stand on a real seat).
38+
5. **Hand / finger articulation** — grip and gesture (sign language, grasping props).
39+
6. **Two-person + collision** — partner stretches, assisted rehab, contact sports
40+
(already noted as deferred in the spec).
41+
42+
## Prop / equipment library (future)
43+
44+
Each prop is a small scene object + an anchor type; movements then reference it
45+
(e.g. `ground-lock: bar` or a future `reach: bar`). Candidates, and what they unlock:
46+
47+
| Prop | Unlocks |
48+
| --- | --- |
49+
| **Chair / stool / bench** | Seated desk & rehab work, sit-to-stand, step-ups, bench press, box squats |
50+
| **Pull-up bar** | Pull-ups, dead hangs, hanging knee raises (needs grip + reach-IK) |
51+
| **Gymnastic rings** | Rows, dips, support holds, skin-the-cat (grip + reach-IK + two-anchor) |
52+
| **Yoga mat + blocks / strap / bolster** | Floor poses, supported stretches, props-assisted mobility |
53+
| **Bed / table** | Bed-based rehab, supine exercises, clinical assessments |
54+
| **Wall** | Wall sits, wall push-ups, calf/shoulder stretches against a surface |
55+
| **Resistance band** | Band pull-aparts, banded rehab, mobility with tension |
56+
| **Dumbbell / barbell / kettlebell** | Loaded strength patterns (needs grip + load cues) |
57+
| **Ball (stability / medicine)** | Core work, balance, throws |
58+
| **Parallettes / dip station** | Dips, L-sits, push-up variations at height |
59+
| **Foam roller** | Self-myofascial release, mobility drills |
60+
61+
## Current limitations (honest)
62+
63+
- One figure only; no props or external objects yet.
64+
- Forward kinematics + ground-locked hands/feet; **no reach-to-target IK**.
65+
- Hip/waist hinge is approximated by spinal flexion (so deadlift-class moves look
66+
like a roll-down — curate around this until the hinge primitive lands).
67+
- Rig ends at the wrist (no fingers) and the head (no facial articulation).
68+
69+
> Range-of-motion values are general literature data, not medical advice.

playground/index.html

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ <h1 class="headline">
5353
Human movement,<br />written as <span class="hl">text</span>.
5454
</h1>
5555
<p class="subhead">
56-
Movit is a tiny language an LLM can write — exercises, stretches, posture —
57-
that renders to an animated 3D figure in the browser. Every joint is clamped
58-
to a safe range of motion, so the result is always anatomically plausible.
56+
Movit is a tiny language an LLM can write — for physiotherapy, mobility,
57+
posture, yoga, and training — that renders to an animated 3D figure in the
58+
browser. Every joint is clamped to a safe range of motion, so the result is
59+
always anatomically plausible.
5960
</p>
6061
<div class="hero-cta">
6162
<a class="btn primary lg" href="./play.html">Open the playground&nbsp;→</a>
@@ -122,9 +123,10 @@ <h3>Cheap &amp; client-side</h3>
122123
<section id="examples" class="examples">
123124
<header class="section-head reveal">
124125
<p class="eyebrow">See it move</p>
125-
<h2>Six movements, one click away</h2>
126+
<h2>One language, many practices</h2>
126127
<p class="section-sub">
127-
Each opens in the playground — editable, shareable, rendered live.
128+
From physiotherapy and posture to yoga, mobility, and the gym — each opens
129+
in the playground, editable and shareable.
128130
</p>
129131
</header>
130132
<div id="examples-grid" class="examples-grid"></div>

playground/src/landing.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,11 @@ if ("requestIdleCallback" in window) {
4949
const grid = document.getElementById("examples-grid");
5050
if (grid) {
5151
for (const preset of PRESETS) {
52-
const kind = parse(preset.source).ir?.kind ?? "movement";
5352
const card = document.createElement("a");
5453
card.className = "example-card";
5554
card.href = `play.html${buildShareHash(preset.source)}`;
5655
card.innerHTML = `
57-
<span class="example-kind">${kind}</span>
56+
<span class="example-kind">${preset.domain}</span>
5857
<span class="example-name">${preset.label}</span>
5958
<span class="example-go">Open in playground →</span>`;
6059
grid.append(card);

playground/src/main.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,20 @@ function recompile(): void {
167167
}
168168
}
169169

170-
// --- Presets ---
170+
// --- Presets (grouped by domain so the dropdown shows the breadth) ---
171+
const presetGroups = new Map<string, HTMLOptGroupElement>();
171172
for (const p of PRESETS) {
173+
let group = presetGroups.get(p.domain);
174+
if (!group) {
175+
group = document.createElement("optgroup");
176+
group.label = p.domain;
177+
presetGroups.set(p.domain, group);
178+
presetSel.append(group);
179+
}
172180
const opt = document.createElement("option");
173181
opt.value = p.id;
174182
opt.textContent = p.label;
175-
presetSel.append(opt);
183+
group.append(opt);
176184
}
177185
presetSel.addEventListener("change", () => {
178186
const preset = PRESETS.find((p) => p.id === presetSel.value);

playground/src/presets.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,32 @@ import biceps from "../../spec/examples/biceps-curl.movit?raw";
44
import lateral from "../../spec/examples/lateral-raise.movit?raw";
55
import shoulder from "../../spec/examples/shoulder-stretch.movit?raw";
66
import fold from "../../spec/examples/forward-fold.movit?raw";
7+
import neck from "../../spec/examples/neck-rotation.movit?raw";
8+
import posture from "../../spec/examples/posture-reset.movit?raw";
9+
import twist from "../../spec/examples/spinal-twist.movit?raw";
10+
import chair from "../../spec/examples/chair-pose.movit?raw";
11+
import sideBend from "../../spec/examples/side-bend.movit?raw";
712

813
export interface Preset {
914
id: string;
1015
label: string;
16+
/** Use-case domain, surfaced in the gallery/dropdown to show breadth. */
17+
domain: string;
1118
source: string;
1219
}
1320

21+
// Ordered so the first gallery row spans several domains at a glance. The first
22+
// entry is also the playground default and the landing hero, so it leads with a
23+
// strong, full-body movement (the squat).
1424
export const PRESETS: Preset[] = [
15-
{ id: "squat", label: "Body-weight squat", source: squat },
16-
{ id: "biceps", label: "Biceps curl", source: biceps },
17-
{ id: "lateral", label: "Lateral raise", source: lateral },
18-
{ id: "shoulder", label: "Overhead reach", source: shoulder },
19-
{ id: "fold", label: "Standing roll-down", source: fold },
25+
{ id: "squat", label: "Body-weight squat", domain: "Fitness", source: squat },
26+
{ id: "neck", label: "Neck rotation", domain: "Physiotherapy", source: neck },
27+
{ id: "posture", label: "Desk posture reset", domain: "Desk & posture", source: posture },
28+
{ id: "chair", label: "Chair pose", domain: "Yoga", source: chair },
29+
{ id: "fold", label: "Standing roll-down", domain: "Mobility", source: fold },
30+
{ id: "twist", label: "Standing spinal twist", domain: "Desk & posture", source: twist },
31+
{ id: "sidebend", label: "Standing side bend", domain: "Yoga", source: sideBend },
32+
{ id: "shoulder", label: "Shoulder flexion (ROM)", domain: "Physiotherapy", source: shoulder },
33+
{ id: "biceps", label: "Biceps curl", domain: "Fitness", source: biceps },
34+
{ id: "lateral", label: "Lateral raise", domain: "Fitness", source: lateral },
2035
];

spec/examples/chair-pose.movit

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
movit posture "Chair pose"
2+
rig humanoid
3+
pose start = standing
4+
5+
step "Sink" 3s ease-in-out:
6+
hips: flex 55
7+
knees: flex 70
8+
ankles: dorsiflex 12
9+
shoulders: flex 170
10+
spine: flex 10
11+
ground-lock: feet
12+
cue "Sit the hips back and down, reach the arms overhead"
13+
14+
step "Rise" 2s ease-out:
15+
hips: flex 0
16+
knees: flex 0
17+
ankles: dorsiflex 0
18+
shoulders: flex 0
19+
spine: flex 0
20+
ground-lock: feet
21+
cue "Press through the feet to stand, arms float down"
22+
23+
repeat 4

spec/examples/neck-rotation.movit

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
movit stretch "Neck rotation"
2+
rig humanoid
3+
pose start = standing
4+
5+
step "Look right" 2s ease-in-out:
6+
neck: rotate-out 60
7+
ground-lock: feet
8+
cue "Turn slowly to look over the right shoulder"
9+
10+
step "Look left" 2.4s ease-in-out:
11+
neck: rotate-in 60
12+
ground-lock: feet
13+
cue "Pass through center and turn to the left"
14+
15+
step "Center" 1.6s ease-out:
16+
neck: rotate-in 0
17+
ground-lock: feet
18+
cue "Return the head to neutral"
19+
20+
repeat 4

spec/examples/posture-reset.movit

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
movit posture "Desk posture reset"
2+
rig humanoid
3+
pose start = standing
4+
5+
step "Slouch" 2.5s ease-in-out:
6+
spine: flex 22
7+
chest: flex 16
8+
neck: flex 28
9+
shoulders: flex 22
10+
ground-lock: feet
11+
cue "The collapsed desk posture — rounded back, head drifting forward"
12+
13+
step "Stack tall" 2.5s ease-in-out:
14+
spine: flex 0
15+
chest: extend 8
16+
neck: flex 0
17+
shoulders: flex 0
18+
ground-lock: feet
19+
cue "Stack head over ribs over hips, chest open, shoulders soft"
20+
21+
repeat 4

spec/examples/side-bend.movit

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
movit stretch "Standing side bend"
2+
rig humanoid
3+
pose start = standing
4+
5+
step "Reach over" 3s ease-in-out:
6+
shoulders: flex 175
7+
spine: abduct 30
8+
ground-lock: feet
9+
cue "Reach tall, then arc gently over to one side"
10+
11+
step "Return" 2.5s ease-in-out:
12+
shoulders: flex 0
13+
spine: abduct 0
14+
ground-lock: feet
15+
cue "Lengthen back up through the crown of the head"
16+
17+
repeat 3

spec/examples/spinal-twist.movit

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
movit stretch "Standing spinal twist"
2+
rig humanoid
3+
pose start = standing
4+
5+
step "Twist right" 2.5s ease-in-out:
6+
spine: rotate-out 40
7+
chest: rotate-out 30
8+
shoulders: abduct 80
9+
elbows: flex 90
10+
ground-lock: feet
11+
cue "Rotate through the mid-back, arms at shoulder height, hips facing forward"
12+
13+
step "Twist left" 3s ease-in-out:
14+
spine: rotate-in 40
15+
chest: rotate-in 30
16+
ground-lock: feet
17+
cue "Pass through center and rotate to the other side"
18+
19+
step "Center" 1.6s ease-out:
20+
spine: rotate-in 0
21+
chest: rotate-in 0
22+
shoulders: abduct 0
23+
elbows: flex 0
24+
ground-lock: feet
25+
cue "Unwind back to center"
26+
27+
repeat 3

0 commit comments

Comments
 (0)