Kinematic motion as text.
Mermaid gave LLMs a way to draw diagrams.
Posecode gives them a way to show movement.
A human-readable spatial DSL for describing, validating, and rendering
exercises, physiotherapy movements, posture, dance, and human motion.
Live Playground · Movement Library · Language Specification · Examples · MCP Server
Ask an LLM to explain physical movement and it usually returns unstructured prose or a static diagram.
One .posecode document —
shoulders: abduct 160,
hips: abduct 30,
repeat 12 —
rendered live in the browser.
For example:
Bend your knees, move your hips backward, and keep your chest upright.
A human may understand that instruction, but a renderer cannot reliably determine:
- which joints should move,
- by how many degrees,
- in which coordinate frame,
- over what duration,
- in what sequence,
- or within which physical limits.
Large language models can often reason about the components of human movement, but they lack a standardized syntax for expressing that reasoning in a renderable and testable form.
Posecode provides that missing representation.
From an LLM prompt to editable Posecode, validated 3D rendering, MCP tools, and a one-script web embed.
▶ Watch the 28-second builder demo
Plain text in. Smooth, programmable 3D motion out.
pelvis: hinge — deadlift
|
knees: flex 95 — squat
|
shoulders: abduct 90 — lateral raise
|
Neural text-to-motion systems can generate impressive movement, but they introduce problems for lightweight, programmable applications.
Many systems require large models and GPU-backed inference, making real-time consumer deployment expensive.
They usually produce coordinate trajectories rather than editable semantic instructions.
It is difficult to request a precise change such as:
Reduce knee flexion by 10 degrees during the second phase.
Black-box trajectories do not naturally expose readable joint rules, phase definitions, or range-of-motion limits.
When a movement looks wrong, developers may not know which semantic instruction caused the problem.
Posecode uses a lightweight, text-driven pipeline.
- Readable: movements are stored as small
.posecodedocuments. - Structured: joints, actions, angles, timings, and constraints are explicit.
- Editable: developers and models can modify individual movement properties.
- Fast: parsing and rendering happen client-side.
- Deterministic: the same Posecode input produces the same validated representation.
- Inspectable: parser warnings and fidelity checks explain problems.
- Agent-friendly: the MCP server exposes generation, validation, critique, and sharing tools.
- Safety-aware: authored and IK-generated angles are constrained by configured range-of-motion limits.
A .posecode file describes movement as timed phases with targeted joint actions.
OpenAI Build Week 2026: Posecode existed before the hackathon. During Build Week, the project was extended using Codex — running on GPT-5.6 — as the primary engineering tool for a real batch of shipped work: motion/grounding quality, language contract diagnostics, licensing restructuring, release automation, and product-facing pages. The sections below distinguish previous work from Build Week work using actual commit history, not a roadmap.
Before Build Week, Posecode already included:
- the core
.posecodedomain-specific language, - a parser and intermediate motion representation,
- basic range-of-motion validation,
- a Three.js/WebGL renderer,
- forward kinematics,
- basic inverse-kinematics and ground-lock behavior,
- a browser playground,
- example movement files,
- shareable Posecode links,
- and an MCP server foundation.
This original version was developed primarily with Claude as an AI-assisted engineering tool.
That prior work provides the foundation for the project, but it is not presented as the new hackathon contribution.
Every item below is a merged, dated pull request built with Codex (GPT-5.6) — see Build Week Evidence for direct links.
- Motion and grounding overhaul — ROM-constrained reach IK, semantic palm/fist/sole/knee/pelvis contact surfaces, multi-contact refinement, stable support handoffs, and XBot-aware grounding (#76).
- Language contract and diagnostics — Posecode language/IR v0.3 custom start-pose blocks with ROM-checked overrides, live and clip-wide grounding/self-collision diagnostics, and an accessible metric floor guide (#92).
- Licensing restructure — split the monorepo into an Apache-2.0 standard layer (spec, parser, share, language, LSP, VS Code) and an AGPL-3.0 product layer (render, embed, MCP, eval, playground), with a commercial-license path (#84).
- Release automation — Changesets-driven npm publishing via GitHub OIDC, MCP Registry publishing, and CI validation of package versions, entry points, and tarball contents (#66).
- Third-party integration readiness — Posecode 0.2 timing vocabulary (
drive/settle/flow/snap), a parser validation CLI, and embed compatibility metadata (#62). - Ground-lock correctness — parser-owned validation for per-side foot/hand/elbow ground locks and back-contact support for supine movements, replacing silent acceptance of invalid contacts (#61, #64).
- LLM-first landing page and product page — redesigned the landing page around a prompt → Posecode → live 3D story, and added a
/for-productspage documenting the web component, parser, renderer, and MCP server for integrators (#82, #74). - Mobile and search fixes — mobile toolbar/viewer layout, natural hand orientation, and Google Search indexing corrections (#78, #65).
- Motion/grounding quality overhaul shipped (#76)
- Language contract + diagnostics shipped (#92)
- Licensing restructure shipped (#84)
- Release automation shipped (#66)
- Ground-lock correctness shipped (#61, #64)
- Landing/product pages shipped (#82, #74)
During Build Week, Codex sessions ran on GPT-5.6 (GPT-5.6 Terra), which is the model that powers Codex for this event. GPT-5.6 is the reasoning engine behind every Build Week change listed above: reading the existing monorepo, proposing the ROM-constrained IK and contact-surface design in #76, designing the language/IR v0.3 diagnostics in #92, and drafting the licensing boundary in #84.
A GPT-5.6-powered natural-language-to-Posecode generation feature (describe a movement in plain English, get a validated .posecode document back) is a natural next step given the existing posecode_authoring_guide MCP tool, but it is not yet built — it is not claimed as shipped functionality here.
Codex is the primary engineering tool used for the Build Week extension.
During the hackathon period, Codex was used to:
- inspect and understand the existing monorepo before each change,
- design and implement the ROM-constrained reach IK and contact-surface system (#76),
- design and implement the language/IR v0.3 diagnostics and floor guide (#92),
- restructure package licensing across the monorepo (#84),
- build the Changesets/OIDC npm and MCP Registry release pipeline (#66),
- fix ground-lock validation and silent-acceptance bugs (#61, #64),
- redesign the landing page and add the product integration page (#82, #74),
- write unit, integration, and evaluation-harness tests for each change,
- and fix mobile UI and search-indexing regressions.
Codex accelerates implementation, but the project remains human-directed. The following decisions were reviewed and selected manually: DSL semantics, system architecture, licensing boundaries, biomechanical constraints, validation policy, user experience, and acceptance or rejection of generated code.
The Build Week workflow follows this process:
- Define a specific product or engineering problem.
- Ask Codex to inspect the relevant implementation.
- Request one or more possible approaches.
- Review the trade-offs and choose the architecture.
- Use Codex to implement the selected approach.
- Run type checking, tests, and biomechanical evaluations (
npm run eval). - Inspect failures manually.
- Refine the implementation with additional Codex sessions.
- Review the final changes before committing.
All Build Week work is public, dated, and directly linked below — no placeholders.
| PR | Merged | What it did |
|---|---|---|
| #62 | 2026-07-15 | Posecode 0.2 timing vocabulary, validation CLI, embed compatibility |
| #61 | 2026-07-15 | Per-side ground-lock validation |
| #65 | 2026-07-16 | Google Search indexing fix |
| #66 | 2026-07-16 | npm + MCP Registry release automation |
| #64 | 2026-07-16 | Back ground-lock for supine movements |
| #74 | 2026-07-16 | /for-products integration page |
| #76 | 2026-07-17 | Motion/grounding overhaul: ROM-constrained reach IK, contact surfaces |
| #78 | 2026-07-17 | Mobile viewer sizing and natural hand orientation |
| #82 | 2026-07-17 | LLM-first landing page redesign |
| #84 | 2026-07-17 | Apache-2.0 / AGPL-3.0 licensing restructure |
| #92 | 2026-07-19 | Language/IR v0.3, grounding/self-collision diagnostics, floor guide |
| Before Build Week | Added during Build Week |
|---|---|
| Core Posecode DSL | Language/IR v0.3 custom start-pose blocks |
| Basic ROM clamping | Grounding, self-collision, and floor-guide diagnostics |
| Working IK/grounding | ROM-constrained reach IK with semantic contact surfaces |
| Single license file | Apache-2.0 / AGPL-3.0 layered licensing with commercial path |
| Manual publishing | Automated npm + MCP Registry release pipeline |
| Editorial landing page | LLM-first landing page + /for-products integration page |
| Existing tests | New diagnostics, IK, and licensing regression tests |
┌─────────────────────────┐
│ Natural-language prompt │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ GPT-5.6 authoring layer │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ .posecode source │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Parser and ROM checking │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Kinematics and IK layer │
└────────────┬────────────┘
│
├─────────────────────┐
▼ ▼
┌─────────────────────────┐ ┌──────────────────────┐
│ Three.js/WebGL renderer │ │ Fidelity measurements│
└─────────────────────────┘ └──────────┬───────────┘
│
▼
┌──────────────────────┐
│ GPT-5.6 Physics │
│ Critic and revision │
└──────────────────────┘
Preview, edit, and share movements without installing anything:
Requirements:
- Node.js 20 or newer
- npm
Clone the repository:
git clone https://github.com/posecode-dev/posecode.git
cd posecodeInstall dependencies:
npm installStart the playground:
npm run devRun tests:
npm testRun type checking:
npm run typecheckRun fidelity evaluations:
npm run evalBuild the playground:
npm run buildA VS Code extension provides syntax highlighting, ROM diagnostics, and
completion for .posecode files — see
editors/vscode. Until it is published, you can
get basic highlighting immediately by associating .posecode files with
Markdown:
"files.associations": {
"*.posecode": "markdown"
}See the editor guide for VS Code, Cursor, Sublime Text, and Neovim instructions.
Posecode includes a Model Context Protocol server for AI agents.
Run it with:
npx -y posecode-mcp@latestExample MCP client configuration:
{
"mcpServers": {
"posecode": {
"command": "npx",
"args": ["-y", "posecode-mcp@latest"]
}
}
}The MCP server exposes:
validate_posecoderender_posecode
See packages/posecode-mcp for the complete configuration and tool documentation.
Embed a Posecode player on a page:
<script src="https://unpkg.com/posecode-embed/dist/posecode-embed.js"></script>
<posecode-player src="/movements/squat.posecode"></posecode-player>The player can be used in:
- documentation,
- educational content,
- exercise guides,
- blog posts,
- and movement libraries.
Install the parser:
npm install posecode-parserInstall the renderer:
npm install posecode-renderExample:
import { parse } from "posecode-parser";
import { createViewer } from "posecode-render";
const source = `
posecode exercise "Lateral raise"
rig humanoid
pose start = standing
step "Raise" 1.4s settle:
shoulders: abduct 90
`;
const { ir, errors, warnings } = parse(source);
if (!ir || errors.length > 0) {
console.error(errors);
} else {
console.warn(warnings);
const viewer = createViewer(document.querySelector("#viewer"));
viewer.load(ir);
viewer.play();
}The #viewer element is an HTML <canvas>.
posecode-render can bake a movement into a Biovision Hierarchy
(.bvh) file for import into Blender and other animation tools. In the
playground, use the Download BVH button; programmatically:
import { parse } from "posecode-parser";
import { exportBVH } from "posecode-render";
const { ir } = parse(source);
const bvh = exportBVH(ir!, { fps: 30 }); // string, ready to write to diskOptions: fps (default 30), scale (default 1 = metres; pass 100 for
centimetres), includeFingers (default false), and proportions for a
calibrated rig.
- Coordinate system: right-handed, Y-up, figure faces +Z in the rest pose (identical to the renderer and Three.js). Enable Blender's "Y up" BVH import option.
- Units: metres by default.
- Rotation channels:
Zrotation Xrotation Yrotation(Euler orderZXY). - Scope: this exports the authored joint motion plus root travel/turn. It
does not yet re-run the renderer's contact/IK solve, so IK-dependent movements
(e.g.
reach: hand_left floor) export the authored pose rather than the solved one. See issue #63.
For web animation pipelines, posecode-render can export the rig and a
baked animation clip as a glTF/GLB asset. In the playground, use Download
glTF; programmatically:
import { parse } from "posecode-parser";
import { exportGLTF } from "posecode-render";
const { ir } = parse(source);
const glb = await exportGLTF(ir!); // GLB ArrayBuffer (default)
const gltf = await exportGLTF(ir!, { binary: false }); // glTF JSON objectThe result loads with Three.js GLTFLoader,
and the clip plays on the included rig:
const gltf = await new GLTFLoader().loadAsync(url);
const mixer = new THREE.AnimationMixer(gltf.scene);
mixer.clipAction(gltf.animations[0]).play();- Joint nodes are named by Posecode bone id; the animated root is
posecode_root. - Limitations: exports the procedural mannequin rig, not a humanoid/Mixamo skeleton, so there is no retargeting onto external rigs yet, and (as with BVH) it bakes the authored motion, not the contact/IK-solved motion. See issue #90.
Posecode uses multiple layers of checking.
Joint angles are constrained before rendering.
For example:
knees: flex 200
is clamped to the configured knee-flexion limit and produces a warning instead of rendering an impossible angle.
The engine measures the actual resulting skeleton after:
- parsing,
- forward kinematics,
- inverse kinematics,
- and ground-lock corrections.
Movement examples can define expected properties.
For example, a deadlift may require:
- sufficient torso pitch,
- limited forward knee travel,
- stable foot contact,
- and symmetrical hip movement.
The Build Week critic interprets the movement and deterministic measurements together.
It explains biomechanical problems in natural language and proposes specific revisions.
| Package | Purpose |
|---|---|
posecode-language |
Language definitions and editor support |
posecode-parser |
Converts .posecode text into a validated, range-constrained intermediate representation |
posecode-render |
Renders animated figures with Three.js, forward kinematics, and IK |
posecode-share |
Encodes Posecode documents into URL-safe share tokens |
posecode-mcp |
Exposes Posecode capabilities to AI agents through MCP |
posecode-eval |
Runs headless biomechanical and geometric fidelity evaluations |
playground |
Interactive editor, 3D viewport, warnings, generation, critique, and sharing |
Posecode is built with:
- TypeScript
- JavaScript
- Node.js
- Three.js
- WebGL
- Vite
- CodeMirror
- Model Context Protocol
- Zod
- Vitest
- Playwright
- esbuild
- GPT-5.6
- Codex
Posecode currently focuses on:
- single-person human movement,
- fitness,
- physiotherapy demonstrations,
- posture,
- dance,
- education,
- rehabilitation visualization,
- forward kinematics,
- ground locking,
- ROM-constrained inverse kinematics,
- hip hinging,
- standing, seated, and lying poses,
- basic scene props,
- and browser-based rendering.
The following are outside the current scope:
- two-person or partner motion,
- comprehensive collision detection and rigid-body dynamics,
- detailed object physics,
- advanced equipment simulation,
- multi-joint finger animation,
- FBX or GLB animation export,
- and medical diagnosis.
Posecode is an engineering and visualization project.
Its range-of-motion values and biomechanical checks are based on general reference data and simplified models.
They are not:
- medical advice,
- diagnosis,
- injury-prevention guarantees,
- physiotherapy prescriptions,
- or a substitute for a qualified professional.
Generated movements should be reviewed by a qualified expert before being used for healthcare, rehabilitation, or safety-critical applications.
Posecode could support:
- game and character animation,
- fitness instruction,
- exercise visualization,
- anatomy education,
- physiotherapy demonstrations,
- posture training,
- dance and choreography prototyping,
- sports technique analysis,
- robotics research,
- synthetic motion-data generation,
- and embodied AI systems.
posecode/
├── packages/
│ ├── posecode-language/
│ ├── posecode-parser/
│ ├── posecode-render/
│ ├── posecode-share/
│ ├── posecode-mcp/
│ └── posecode-eval/
├── playground/
├── editors/
├── spec/
├── docs/
├── scripts/
└── README.md
Run all unit tests:
npm testRun coverage:
npm run coverageRun type checking:
npm run typecheckRun biomechanical evaluations:
npm run evalThe CI workflow verifies that the project:
- builds successfully,
- passes type checking,
- passes unit tests,
- and satisfies configured movement invariants.
Posecode follows the design study:
Kinematic Motion Definition Protocols for Large Language Models
The project explores whether semantic, text-based movement programs can provide a controllable and inspectable alternative to black-box motion generation.
The specification covers:
- DSL design,
- biomechanical constraints,
- client-side rendering,
- agent integration,
- and possible product applications.
See:
The hosted playground currently uses an Adobe Mixamo character and one showcase animation under the applicable Adobe terms. These binary assets are not covered by Posecode's software licenses. See third-party notices.
The renderer also includes a zero-asset procedural figure and accepts compatible humanoid GLB characters through characterUrl.
Posecode is open source with a clear standard and product boundary:
| Layer | Components | License |
|---|---|---|
| Open standard | Specification, examples, parser, share codec, language service, LSP, VS Code extension | Apache-2.0 |
| Product layer | Renderer, web embed, MCP server, eval harness, hosted playground | AGPL-3.0-only |
Organizations that need to use an AGPL component in a closed-source product may contact hello@posecode.org about a separate commercial agreement.
Earlier grants are unchanged. MIT revisions remain MIT, and the 0.2.2 npm packages remain Apache-2.0. See licensing, commercial licensing, and trademark policy.
Feedback and contributions are welcome.
- Email: hello@posecode.org
- Issues: GitHub Issues
LLMs already have languages for software, data, and interfaces.
Posecode gives them a language for movement.



