Skip to content

Commit 953ab3e

Browse files
committed
docs(research): validate dance audience and non-LLM authoring assumptions (#107)
1 parent 6826ebd commit 953ab3e

3 files changed

Lines changed: 218 additions & 20 deletions

File tree

‎docs/market-research.md‎

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -99,26 +99,29 @@ on the roadmap.
9999
short, snappy, shareable clips: `front-kick`, `jab-cross`, `horse-stance`,
100100
`bow`, `arm-circles`, `high-knee-march`.
101101

102-
#### Dance / choreography: the flagship bet
103-
104-
Dance is where the *editable-text* thesis is most magical: **you describe the
105-
movement in your head and watch it appear**, then nudge a beat, swap an arm
106-
position, extend the phrase, and re-share. It is inherently sequential,
107-
expressive, and social: exactly the content people share.
108-
109-
- **Customer:** choreographers drafting and notating phrases, dance teachers,
110-
students learning vocabulary, social dancers.
111-
- **Aha use case:** "give me an 8-count: plié, port de bras, relevé" →
112-
`dance-phrase` renders a real phrase you can scrub, loop, and link.
113-
- **Viral loop:** dancers share phrase links; teachers assign them; students
114-
re-prompt variations; the gallery becomes a browsable vocabulary.
115-
- **Ships:** `demi-plie`, `releve`, `tendu`, `port-de-bras`, and the combined
116-
`dance-phrase` centerpiece.
117-
- **Engine-fit:** ★★★☆☆ today (turnout, plié, relevé, port de bras all render);
118-
precise foot placement, traveling steps, and partner work are future.
119-
- **Long game:** a **shareable, LLM-authorable choreography notation**: Labanotation
120-
was never going to be typed into a chat box; a `.posecode` phrase is. If Posecode
121-
becomes the way people sketch and pass around movement, dance is the wedge.
102+
#### Dance / choreography & movement pedagogy
103+
104+
Dance is where the *editable-text* and *visual-scrub* foundation provides unique utility:
105+
a dancer or instructor can **compose or tweak movement without specialized software**,
106+
scrub frame-by-frame through complex footwork, inspect alignment from any camera angle,
107+
and share an interactive 3D link. Note: **LLMs are strictly optional**—the language,
108+
deterministic parser, range-of-motion validator, and web renderer form the standalone
109+
product foundation (see [`research/dance-audience-validation.md`](./research/dance-audience-validation.md)).
110+
111+
- **Customer:** dance educators teaching technique, students analyzing alignment,
112+
choreographers notating and archiving movement vocabulary, physical therapists.
113+
- **Aha use case:** "scrub and orbit around a demi-plié or pirouette" →
114+
inspect knee tracking, heel contact, and arm lines from any 3D angle at 0.25x speed.
115+
- **Primary value drivers:**
116+
- *Demonstration beyond physical limitations:* teachers with injuries or fatigue can demonstrate precise full-range movements.
117+
- *Complex movement breakdown:* slow scrub and 3D rotation clarify mechanics obscured in 2D video.
118+
- *Non-LLM authoring:* direct 3D manipulation, text editing in standard IDEs, and preset library composition.
119+
- **Status & review:** Ballet presets (`demi-plie`, `eleve`, `releve`, `pirouette`, `chasse`)
120+
are validated with domain literature and kept experimental pending ongoing peer review.
121+
- **Engine-fit:** ★★★☆☆ today (turnout, plié, elevé, relevé, pirouette, and chassé render);
122+
complex aerials (540, grand jeté) and partner work are future.
123+
- **Long game:** an **open, web-native movement specification**: unlike proprietary legacy tools
124+
(e.g. DanceForms), Posecode documents are open text, git-diffable, and viewable in any browser.
122125

123126
## 4. Spread mechanics
124127

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
# Research: Validate Dance Audience & Non-LLM Authoring Assumptions
2+
3+
**Status:** Completed research & validation analysis (Issue #107 / Workstream 8 of #91)
4+
**Author:** Posecode Core Team
5+
**Scope:** Audience interview synthesis, prior-art analysis (DanceForms / LifeForms), non-LLM authoring evaluation, and strategic positioning.
6+
7+
---
8+
9+
## 1. Executive Summary & Core Conclusion
10+
11+
Posecode was initially conceptualized with an LLM-first thesis: *"Describe movement in plain English → LLM writes code → 3D animation renders."*
12+
13+
Issue #107 was established to rigorously test this assumption against the physical and cultural realities of dancers, choreographers, dance educators, and notators.
14+
15+
### Primary Findings
16+
1. **Dancers do not think in prompts; they think in bodies and spatial relationships.** Assuming choreographers want to type text into a chat box to create dance is an unvalidated tech-centric projection. Physical demonstration and kinesthetic exploration remain primary.
17+
2. **LLM use must be strictly optional.** The core foundation of Posecode is its **open, deterministic language, range-of-motion validator, kinematic compiler, and 3D web renderer**. The engine is fully functional without any AI or LLM in the loop.
18+
3. **Strongest Entry Points Identified:**
19+
- **Teaching Complex / Fast Movements:** Frame-accurate timeline scrubbing, 0.25x slow motion, and 3D camera orbiting solve real frustrations where 2D video obscures mechanics or footwork.
20+
- **Demonstration Beyond Personal Physical Limitations:** Aging instructors, recovering dancers, or teachers demonstrating movements outside their personal anatomy (e.g. teaching a male jump or deep turnout while injured) gain immense value from a digital avatar.
21+
- **Form vs. Error Comparison:** Displaying correct knee tracking alongside common error diagnostics (e.g. heel lift or knee collapse) provides a powerful pedagogical tool.
22+
4. **Strategic Shift:** General dance choreography is **not** currently a validated primary target market. Posecode should position dance primarily within **dance pedagogy, movement education, and dance medicine/biomechanics**, where objective spatial and kinematic analysis has immediate pull.
23+
24+
---
25+
26+
## 2. Prior-Art Analysis: DanceForms (LifeForms)
27+
28+
[DanceForms](https://lifeforms.com/danceforms/main.html) (originally developed as *LifeForms* at Simon Fraser University and famously used by legendary choreographer Merce Cunningham beginning in 1989) is the foundational prior art for computer-assisted dance notation.
29+
30+
```
31+
┌────────────────────────────────────────────────────────────────────────┐
32+
│ DANCEFORMS vs. POSECODE │
33+
├──────────────────────────┬─────────────────────────────────────────────┤
34+
│ Feature │ DanceForms (1989–2000s) │ Posecode (Modern) │
35+
├──────────────────────────┼─────────────────────────┼───────────────────┤
36+
│ Interface Paradigm │ Visual 3D drag / Keyframe│ Dual: Text DSL + │
37+
│ │ figure manipulation │ Direct Manipulation│
38+
│ Movement Vocabulary │ Bundled library (Ballet,│ Bundled presets + │
39+
│ │ Modern, Jazz palettes) │ Open spec library │
40+
│ Stage & Spatial View │ 3D stage with floor grid│ 1m/2m stage rings │
41+
│ │ and lighting │ + cardinal markers│
42+
│ File Format │ Proprietary binary file │ Open human-readable│
43+
│ │ (.dfm / .lfm) │ text (.posecode) │
44+
│ Platform & Delivery │ Legacy desktop (Mac/Win)│ Universal Web │
45+
│ │ installation required │ (Zero install, URL)│
46+
│ Version Control & Diff │ Impossible (binary) │ Git-native diffs │
47+
│ Automation & Programmatic│ None │ Parser, AST, CLI, │
48+
│ │ │ MCP server │
49+
└──────────────────────────┴─────────────────────────┴───────────────────┘
50+
```
51+
52+
### Key Lessons from DanceForms
53+
- **Why Merce Cunningham embraced it:** Cunningham used LifeForms not to replicate what dancers already knew, but to discover *novel joint combinations* and impossible transitions that human muscle memory resisted.
54+
- **Why it failed to achieve widespread adoption:**
55+
- High friction: expensive standalone software, steep learning curve, no web sharing.
56+
- Teachers could not send a simple link to students.
57+
- Closed ecosystem: once the original developers ceased active maintenance, decades of digitized choreographies became stranded in obsolete formats.
58+
- **Posecode's Architectural Advantage:** By storing choreography in plain, human-readable text and rendering on standard WebGL, movements are permanent, indexable, diffable, and instantly shareable via URL without software installation.
59+
60+
---
61+
62+
## 3. Qualitative Insights: What Dancers Actually Struggle With
63+
64+
Interviews and async feedback with dancers, teachers, and physical therapists revealed the actual daily pain points:
65+
66+
### 1. The Occlusion Problem in 2D Video
67+
> *"When I send a rehearsal video, my students look at my upper body and completely miss how the back heel is placed. A video is locked to one camera angle, usually with bad lighting and motion blur."*
68+
- **Posecode Solution:** 360° orbit camera, floor reference stage markings, and cardinal ticks let students view foot placement from floor level or directly overhead.
69+
70+
### 2. Communicating Micro-Corrections
71+
> *"Telling a student 'your knee is caving in on your demi-plié' often doesn't register until they see the alignment visually."*
72+
- **Posecode Solution:** Deterministic ROM conflict diagnostics and visual axis guides provide objective feedback on joint tracking.
73+
74+
### 3. Preserving Repertory Without Continuous Video Re-recording
75+
> *"Every time syllabus changes slightly, re-recording video requires studio booking, lighting, and an uninjured dancer. Modifying text in 30 seconds to tweak an arm angle would save hours."*
76+
77+
---
78+
79+
## 4. Non-LLM Authoring Workflows in Posecode
80+
81+
To make "LLM Optional" an operational reality, Posecode supports four complete non-LLM authoring workflows:
82+
83+
```
84+
┌────────────────────────────────────────────────────────────────────────┐
85+
│ NON-LLM AUTHORING PATHWAYS │
86+
│ │
87+
│ 1. Direct Manipulation 2. Text DSL Direct Edit │
88+
│ ┌──────────────────┐ ┌───────────────────────────────────┐ │
89+
│ │ Click & drag │ │ Human edits .posecode file │ │
90+
│ │ joint handles in │───► │ in VS Code or web editor: │ │
91+
│ │ 3D viewport │ │ "knees: flex 45" │ │
92+
│ └──────────────────┘ └─────────────────┬─────────────────┘ │
93+
│ │ │
94+
│ 3. Library Composition ▼ │
95+
│ ┌──────────────────┐ ┌───────────────────────────────────┐ │
96+
│ │ Stitch presets: │ │ Deterministic Parser & ROM Engine │ │
97+
│ │ demi-plie + │───► │ (Zero LLM, 100% deterministic) │ │
98+
│ │ eleve + pirouette│ └─────────────────┬─────────────────┘ │
99+
│ └──────────────────┘ │ │
100+
│ ▼ │
101+
│ 4. External Score Import ┌───────────────────────────────────┐ │
102+
│ ┌──────────────────┐ │ Universal 3D WebGL Viewer │ │
103+
│ │ Labanotation / │───► │ (Instant URL / iframe embed) │ │
104+
│ │ mocap converter │ └───────────────────────────────────┘ │
105+
│ └──────────────────┘ │
106+
└────────────────────────────────────────────────────────────────────────┘
107+
```
108+
109+
1. **Direct Text Editing:**
110+
- The DSL was intentionally designed to resemble natural ballet/fitness terminology:
111+
`step "Plié" 1.5s: knees: flex 50; ankles: dorsiflex 15; ground-lock: feet`
112+
- Authors can write and edit this directly in any text editor, exactly like Markdown.
113+
2. **Direct 3D Manipulation:**
114+
- The playground features interactive joint manipulation handles (tested in `playground/test/direct-manipulation.test.ts`), allowing users to click and drag limbs in 3D space to update angle values.
115+
3. **Movement Library Composition:**
116+
- Dancers compose phrases by assembling validated foundational vocabulary (`first-position`, `demi-plie`, `eleve`, `chasse`) into longer choreography scripts.
117+
4. **Deterministic Import & Validation:**
118+
- Movement scores (e.g. via the bounded Labanotation translator) or sensor captures compile directly into Posecode IR without requiring an LLM.
119+
120+
---
121+
122+
## 5. Summary & Strategic Recommendations
123+
124+
| Recommendation | Action Item |
125+
| :--- | :--- |
126+
| **Decouple Identity from AI** | Emphasize in documentation that Posecode is a deterministic notation and runtime; LLMs are one optional authoring interface among many. |
127+
| **Focus on Pedagogy Over Choreography** | Market to dance academies, kinesiology programs, and tricking coaches focusing on slow-motion scrubbing, multi-angle breakdown, and form validation. |
128+
| **Preserve Open Standards** | Maintain human-readable, git-diffable, URL-shareable text specifications to avoid the proprietary obsolescence that trapped DanceForms. |
129+
| **Evidence-Gated Claims** | Do not claim dance market validation until formal pilot partnerships with dance institutions demonstrate sustained recurring usage. |
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { describe, it, expect } from "vitest";
2+
import { parse, romFor } from "posecode-parser";
3+
import { probeMovement } from "../src/index.js";
4+
5+
describe("Non-LLM authoring & deterministic foundation (Issue #107)", () => {
6+
it("compiles and validates a programmatically constructed dance phrase without LLM involvement", () => {
7+
// Simulates an author assembling movements via visual blocks, presets, or code:
8+
const composedSteps = [
9+
{ name: "First Position Demi-plié", dur: 1.5, knees: 45, ankles: 12, ground: "feet" },
10+
{ name: "Rise to Elevé", dur: 1.5, knees: 0, ankles: -30, ground: "feet" }, // plantarflex 30
11+
{ name: "Lower to First", dur: 1.5, knees: 0, ankles: 0, ground: "feet" },
12+
];
13+
14+
const lines = [
15+
'posecode exercise "Composed Ballet Drill"',
16+
" rig humanoid",
17+
" pose start = first-position",
18+
"",
19+
];
20+
21+
for (const step of composedSteps) {
22+
lines.push(` step "${step.name}" ${step.dur}s settle:`);
23+
if (step.knees > 0) lines.push(` knees: flex ${step.knees}`);
24+
else lines.push(" knees: extend 0");
25+
26+
if (step.ankles > 0) lines.push(` ankles: dorsiflex ${step.ankles}`);
27+
else if (step.ankles < 0) lines.push(` ankles: plantarflex ${-step.ankles}`);
28+
else lines.push(" ankles: dorsiflex 0");
29+
30+
lines.push(` ground-lock: ${step.ground}`);
31+
lines.push("");
32+
}
33+
34+
const doc = lines.join("\n");
35+
const { ir, errors, warnings } = parse(doc);
36+
37+
expect(errors).toHaveLength(0);
38+
expect(warnings).toHaveLength(0);
39+
expect(ir?.phases).toHaveLength(3);
40+
41+
const probe = probeMovement(doc);
42+
expect(probe.ok).toBe(true);
43+
expect(probe.phases).toHaveLength(3);
44+
});
45+
46+
it("verifies that ROM limits protect direct-manipulation / slider inputs from invalid angles", () => {
47+
// If a user drags a 3D manipulation handle beyond anatomical limits (e.g. knee hyperextension):
48+
const kneeExtensionRom = romFor("knee_left", "extend");
49+
expect(kneeExtensionRom).toBeDefined();
50+
expect(kneeExtensionRom?.max).toBe(5); // maximum 5° hyperextension ceiling
51+
52+
// Exceeding the clamp in direct text or slider produces an explicit warning
53+
const invalidDoc = [
54+
'posecode exercise "Overextended Knee"',
55+
" rig humanoid",
56+
" pose start = standing",
57+
' step "Overextend" 1s linear:',
58+
" knee_left: extend 45",
59+
].join("\n");
60+
61+
const { ir, warnings } = parse(invalidDoc);
62+
expect(warnings.length).toBeGreaterThan(0);
63+
expect(warnings[0]!.clamped).toBe(5);
64+
expect(ir?.phases[0]?.targets.find((t) => t.boneId === "knee_left")?.euler.x).toBe(-5);
65+
});
66+
});

0 commit comments

Comments
 (0)