|
126 | 126 | <body> |
127 | 127 | <div class="bg-fx" aria-hidden="true"></div> |
128 | 128 |
|
129 | | - <!-- Nav --> |
130 | 129 | <header class="nav"> |
131 | 130 | <a class="brand" href="/" aria-label="Posecode home"> |
132 | 131 | <svg class="logo" aria-hidden="true" viewBox="0 0 100 100" width="19" height="19" fill="none"><g stroke="currentColor" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"><path d="M50 34V55"/><path d="M50 35L34 26L23 15"/><path d="M50 35L66 26L77 15"/><path d="M50 54L36 72L28 88"/><path d="M50 54L64 72L72 88"/></g><circle cx="50" cy="20" r="10" fill="currentColor"/></svg> |
133 | 132 | <span class="wordmark">Posecode</span> |
134 | 133 | </a> |
135 | 134 | <nav class="nav-links" aria-label="Primary"> |
136 | 135 | <a href="#how">How it works</a> |
137 | | - <a href="#examples">Examples</a> |
138 | | - <a href="./moves/">Movement library</a> |
| 136 | + <a href="#examples">Movements</a> |
139 | 137 | <a href="#developers">Developers</a> |
140 | 138 | <a href="/for-products">For products</a> |
141 | 139 | <a href="https://github.com/posecode-dev/posecode" target="_blank" rel="noopener">GitHub</a> |
142 | 140 | </nav> |
143 | | - <a class="btn primary nav-cta" href="/play">Open playground →</a> |
| 141 | + <a class="btn primary nav-cta" href="/play">Try it live →</a> |
144 | 142 | </header> |
145 | 143 |
|
146 | | - <!-- Hero --> |
147 | | - <section class="hero"> |
148 | | - <div class="hero-copy reveal"> |
149 | | - <p class="eyebrow">Movement is programmable</p> |
150 | | - <h1 class="headline"> |
151 | | - Write the move.<br /><span class="hl">Watch it happen.</span> |
152 | | - </h1> |
153 | | - <p class="subhead"> |
154 | | - Turn readable instructions into structured, inspectable 3D motion. Build exercises, |
155 | | - stretches, dance phrases, and rehab routines, then edit every beat live in |
156 | | - the browser. |
157 | | - </p> |
158 | | - <div class="hero-cta"> |
159 | | - <a class="btn primary lg" href="/play">Open the playground →</a> |
160 | | - <button id="copy-prompt" class="btn ghost lg"> |
161 | | - <span class="lbl">Copy LLM prompt</span> |
162 | | - </button> |
| 144 | + <main> |
| 145 | + <section class="hero"> |
| 146 | + <div class="hero-copy reveal"> |
| 147 | + <p class="eyebrow">A motion language for LLMs</p> |
| 148 | + <h1 class="headline">Give your LLM<br /><span class="hl">a body.</span></h1> |
| 149 | + <p class="subhead"> |
| 150 | + Posecode turns LLM-written text into structured, editable 3D human motion, live in your browser. |
| 151 | + </p> |
| 152 | + <div class="hero-cta"> |
| 153 | + <a class="btn primary lg" href="/play">Open the playground →</a> |
| 154 | + <button class="btn ghost lg" data-copy-prompt> |
| 155 | + <span class="lbl">Copy prompt for your LLM</span> |
| 156 | + </button> |
| 157 | + </div> |
| 158 | + <div class="hero-meta" aria-label="Project highlights"> |
| 159 | + <span>Open source</span> |
| 160 | + <span>Runs on-device</span> |
| 161 | + <span>LLM-ready</span> |
| 162 | + </div> |
163 | 163 | </div> |
164 | | - <p id="catalog-meta" class="hero-meta"> |
165 | | - 48 launch-ready moves · 25 experimental previews · validated text · open source |
166 | | - </p> |
167 | | - </div> |
168 | 164 |
|
169 | | - <div class="hero-stage reveal" aria-label="Live 3D preview with a contact-phase source excerpt"> |
170 | | - <div class="studio"> |
171 | | - <div class="studio-bar" aria-hidden="true"> |
172 | | - <span class="dots"></span> |
173 | | - <span class="studio-title">superhero-landing.posecode</span> |
174 | | - <span class="studio-live"><i></i>live</span> |
| 165 | + <div class="hero-stage reveal" aria-label="A prompt becoming a live 3D movement"> |
| 166 | + <div class="prompt-card"> |
| 167 | + <span class="prompt-label">Prompt to a capable LLM</span> |
| 168 | + <p>“Write a controlled superhero landing.”</p> |
175 | 169 | </div> |
176 | | - <canvas id="hero-canvas"></canvas> |
177 | | - <div class="studio-hud"><span id="hero-phase">Drop into the landing</span></div> |
178 | | - </div> |
179 | 170 |
|
180 | | - <!-- Compact contact-phase excerpt, pinned above the motion on wide screens. --> |
181 | | - <pre class="code-chip" aria-hidden="true"># contact-phase excerpt |
182 | | -<span class="t-kw">step</span> <span class="t-str">"Make three-point contact"</span> <span class="t-num">0.3s</span> <span class="t-atom">settle</span><span class="t-punct">:</span> |
183 | | - <span class="t-kw">ground-lock</span><span class="t-punct">:</span> <span class="t-atom">foot_right</span> |
184 | | - <span class="t-kw">reach</span><span class="t-punct">:</span> <span class="t-atom">knee_left floor</span> |
185 | | - <span class="t-kw">reach</span><span class="t-punct">:</span> <span class="t-atom">fist_left floor</span> |
186 | | - <span class="t-kw">cue</span> <span class="t-str">"Set all three contacts"</span></pre> |
187 | | - </div> |
188 | | - </section> |
| 171 | + <div class="studio"> |
| 172 | + <div class="studio-bar" aria-hidden="true"> |
| 173 | + <span class="studio-kicker">AI output</span> |
| 174 | + <span class="studio-title">superhero-landing.posecode</span> |
| 175 | + <span class="studio-live"><i></i>live 3D</span> |
| 176 | + </div> |
| 177 | + <canvas id="hero-canvas"></canvas> |
| 178 | + <div class="studio-hud"><span id="hero-phase">Drop into the landing</span></div> |
| 179 | + </div> |
189 | 180 |
|
190 | | - <!-- Value props --> |
191 | | - <section class="props"> |
192 | | - <article class="prop reveal"> |
193 | | - <div class="prop-mark">⌁</div> |
194 | | - <h3>Semantic, not matrices</h3> |
195 | | - <p> |
196 | | - Models write phases and joint angles, like <code>knees: flex 95</code>, |
197 | | - instead of 3D transforms. The closed syntax makes the intended anatomy inspectable. |
198 | | - </p> |
199 | | - </article> |
200 | | - <article class="prop reveal"> |
201 | | - <div class="prop-mark">⛨</div> |
202 | | - <h3>Range-aware & testable</h3> |
203 | | - <p> |
204 | | - Joint targets are constrained to configured reference ranges, while reach |
205 | | - residuals expose a fist, foot, or knee that remains short of its target. |
206 | | - </p> |
207 | | - </article> |
208 | | - <article class="prop reveal"> |
209 | | - <div class="prop-mark">◴</div> |
210 | | - <h3>Cheap & client-side</h3> |
211 | | - <p> |
212 | | - Generation is compact text. Rendering is forward kinematics and constrained IK |
213 | | - in Three.js on the user's device, with no server-side diffusion pipeline. |
214 | | - </p> |
215 | | - </article> |
216 | | - </section> |
| 181 | + <pre class="code-chip" aria-hidden="true"><span class="code-label">LLM-WRITTEN</span> |
| 182 | +<span class="t-kw">step</span> <span class="t-str">"Make three-point contact"</span> <span class="t-num">0.3s</span><span class="t-punct">:</span> |
| 183 | + <span class="t-kw">ground-lock</span><span class="t-punct">:</span> <span class="t-atom">foot_right</span> |
| 184 | + <span class="t-kw">reach</span><span class="t-punct">:</span> <span class="t-atom">knee_left floor</span> |
| 185 | + <span class="t-kw">reach</span><span class="t-punct">:</span> <span class="t-atom">fist_left floor</span></pre> |
| 186 | + </div> |
| 187 | + </section> |
217 | 188 |
|
218 | | - <!-- Examples --> |
219 | | - <section id="examples" class="examples"> |
220 | | - <header class="section-head reveal"> |
221 | | - <p class="eyebrow">See it move</p> |
222 | | - <h2>One language, many practices</h2> |
223 | | - <p class="section-sub"> |
224 | | - A taste of the library, from physiotherapy and posture to yoga, dance, and |
225 | | - martial arts. Every movement opens in the playground, editable and |
226 | | - shareable. |
227 | | - </p> |
228 | | - </header> |
229 | | - <div id="examples-grid" class="examples-grid"></div> |
230 | | - </section> |
| 189 | + <section class="proof" aria-label="Why Posecode"> |
| 190 | + <article class="proof-item reveal"> |
| 191 | + <span class="proof-n">01</span> |
| 192 | + <div><strong>LLM-native</strong><p>Readable movement, not matrices.</p></div> |
| 193 | + </article> |
| 194 | + <article class="proof-item reveal"> |
| 195 | + <span class="proof-n">02</span> |
| 196 | + <div><strong>Range-aware</strong><p>Targets stay within configured ranges.</p></div> |
| 197 | + </article> |
| 198 | + <article class="proof-item reveal"> |
| 199 | + <span class="proof-n">03</span> |
| 200 | + <div><strong>Browser-native</strong><p>Live 3D, no server-side diffusion.</p></div> |
| 201 | + </article> |
| 202 | + </section> |
231 | 203 |
|
232 | | - <!-- How it works --> |
233 | | - <section id="how" class="how"> |
234 | | - <header class="section-head reveal"> |
235 | | - <p class="eyebrow">How it works</p> |
236 | | - <h2>From a sentence to a moving figure</h2> |
237 | | - </header> |
238 | | - <ol class="how-steps"> |
239 | | - <li class="reveal"> |
240 | | - <span class="how-n">1</span> |
241 | | - <h3>A capable model writes <code>.posecode</code></h3> |
242 | | - <p>Give the Posecode authoring guide to a capable model and ask for a representable movement. For a supported request, its raw <code>.posecode</code> output remains editable and reviewable.</p> |
243 | | - </li> |
244 | | - <li class="reveal"> |
245 | | - <span class="how-n">2</span> |
246 | | - <h3>The parser validates & clamps</h3> |
247 | | - <p>A TypeScript parser enforces the closed vocabulary, joint/action compatibility, contacts, and configured range limits.</p> |
248 | | - </li> |
249 | | - <li class="reveal"> |
250 | | - <span class="how-n">3</span> |
251 | | - <h3>Three.js renders it</h3> |
252 | | - <p>Forward kinematics plus constrained contact IK animate a low-poly figure live in the browser.</p> |
253 | | - </li> |
254 | | - </ol> |
255 | | - </section> |
| 204 | + <section id="how" class="how"> |
| 205 | + <header class="section-head reveal"> |
| 206 | + <p class="eyebrow">How it works</p> |
| 207 | + <h2>One prompt. Three clear steps.</h2> |
| 208 | + </header> |
| 209 | + <ol class="how-steps"> |
| 210 | + <li class="reveal"> |
| 211 | + <span class="how-n">01</span> |
| 212 | + <h3>Ask</h3> |
| 213 | + <p>Describe a representable movement.</p> |
| 214 | + </li> |
| 215 | + <li class="reveal"> |
| 216 | + <span class="how-n">02</span> |
| 217 | + <h3>Generate</h3> |
| 218 | + <p>A capable LLM writes a tiny <code>.posecode</code> file.</p> |
| 219 | + </li> |
| 220 | + <li class="reveal"> |
| 221 | + <span class="how-n">03</span> |
| 222 | + <h3>Move</h3> |
| 223 | + <p>The browser validates, constrains, and animates it.</p> |
| 224 | + </li> |
| 225 | + </ol> |
| 226 | + </section> |
256 | 227 |
|
257 | | - <!-- Developers --> |
258 | | - <section id="developers" class="developers"> |
259 | | - <header class="section-head reveal"> |
260 | | - <p class="eyebrow">For developers</p> |
261 | | - <h2>An open core you can build on</h2> |
262 | | - </header> |
263 | | - <div class="dev-grid"> |
264 | | - <a class="dev-card reveal" href="/play"> |
265 | | - <h3>Playground →</h3> |
266 | | - <p>Live editor, 3D viewport, syntax highlighting, inline range-of-motion diagnostics.</p> |
267 | | - </a> |
268 | | - <div class="dev-card reveal"> |
269 | | - <h3>MCP server</h3> |
270 | | - <p>Let a model in an MCP client validate a movement and get back a render link.</p> |
271 | | - <code class="dev-code">npx -y posecode-mcp</code> |
272 | | - </div> |
273 | | - <div class="dev-card reveal"> |
274 | | - <h3>VS Code extension</h3> |
275 | | - <p>Highlighting, completion, hover docs, and ROM diagnostics for <code>.posecode</code> files.</p> |
276 | | - </div> |
277 | | - <a class="dev-card reveal" href="https://github.com/posecode-dev/posecode" target="_blank" rel="noopener"> |
278 | | - <h3>Apache 2.0 libraries</h3> |
279 | | - <p><code>posecode-parser</code>, <code>posecode-render</code>, and <code>posecode-share</code> are framework-agnostic and on GitHub.</p> |
280 | | - </a> |
281 | | - </div> |
282 | | - </section> |
| 228 | + <section id="examples" class="examples"> |
| 229 | + <header class="section-head reveal"> |
| 230 | + <p class="eyebrow">Movement library</p> |
| 231 | + <h2>Ask for almost any move.</h2> |
| 232 | + <p class="section-sub">Explore launch-ready examples across fitness, rehab, dance, and more.</p> |
| 233 | + </header> |
| 234 | + <div id="examples-grid" class="examples-grid"></div> |
| 235 | + </section> |
283 | 236 |
|
284 | | - <!-- FAQ --> |
285 | | - <section id="faq" class="faq"> |
286 | | - <header class="section-head reveal"> |
287 | | - <p class="eyebrow">FAQ</p> |
288 | | - <h2>Common questions</h2> |
289 | | - </header> |
290 | | - <dl class="faq-list"> |
291 | | - <div class="faq-item reveal"> |
292 | | - <dt>What is Posecode?</dt> |
293 | | - <dd> |
294 | | - Posecode is an open-source text-to-motion language. You describe single-person |
295 | | - movement as phases, joint targets, timing, and contacts; the browser validates |
296 | | - the document and renders it as an animated 3D figure. |
297 | | - </dd> |
298 | | - </div> |
299 | | - <div class="faq-item reveal"> |
300 | | - <dt>How do I generate an exercise animation with an LLM?</dt> |
301 | | - <dd> |
302 | | - Copy the authoring guide into a capable chat model and ask for a representable |
303 | | - movement such as a hip hinge or hamstring stretch. For a representable request, |
304 | | - the model should return raw <code>.posecode</code> text. Paste it into the |
305 | | - playground: valid documents animate, while parse errors, range clamps, and |
306 | | - unresolved reach targets appear as diagnostics. |
307 | | - </dd> |
308 | | - </div> |
309 | | - <div class="faq-item reveal"> |
310 | | - <dt>Does Posecode guarantee a movement is safe?</dt> |
311 | | - <dd> |
312 | | - No. Posecode constrains authored and IK-generated joint targets to configured |
313 | | - reference ranges and reports unresolved reach targets. A simplified rig cannot |
314 | | - certify that a whole movement is safe, accurate, or appropriate for a person. |
315 | | - It is not medical advice. |
316 | | - </dd> |
| 237 | + <section id="developers" class="developers"> |
| 238 | + <header class="section-head reveal"> |
| 239 | + <p class="eyebrow">For developers</p> |
| 240 | + <h2>Open all the way down.</h2> |
| 241 | + <p class="section-sub">Use the language, parser, renderer, or agent tools. Everything is Apache 2.0 licensed.</p> |
| 242 | + </header> |
| 243 | + <div class="dev-grid"> |
| 244 | + <a class="dev-card reveal" href="/play"> |
| 245 | + <span class="dev-kind">Build</span> |
| 246 | + <h3>Playground <span>→</span></h3> |
| 247 | + <p>Edit and preview movement live.</p> |
| 248 | + </a> |
| 249 | + <div class="dev-card reveal"> |
| 250 | + <span class="dev-kind">Connect</span> |
| 251 | + <h3>MCP server</h3> |
| 252 | + <p>Let agents validate movement.</p> |
| 253 | + </div> |
| 254 | + <a class="dev-card reveal" href="./spec.html"> |
| 255 | + <span class="dev-kind">Author</span> |
| 256 | + <h3>Language spec <span>→</span></h3> |
| 257 | + <p>A small, semantic grammar.</p> |
| 258 | + </a> |
| 259 | + <a class="dev-card reveal" href="https://github.com/posecode-dev/posecode" target="_blank" rel="noopener"> |
| 260 | + <span class="dev-kind">Extend</span> |
| 261 | + <h3>Apache packages <span>→</span></h3> |
| 262 | + <p>Parser, renderer, share codec.</p> |
| 263 | + </a> |
317 | 264 | </div> |
318 | | - <div class="faq-item reveal"> |
319 | | - <dt>Is Posecode free to use?</dt> |
320 | | - <dd> |
321 | | - Yes. Posecode is Apache-2.0-licensed and open source: the parser, 3D renderer, share |
322 | | - codec, MCP server, and VS Code extension are all free, and rendering runs |
323 | | - locally in a WebGL-capable browser without server-side motion generation. |
324 | | - </dd> |
| 265 | + </section> |
| 266 | + |
| 267 | + <section class="final-cta reveal"> |
| 268 | + <p class="eyebrow">Your turn</p> |
| 269 | + <h2>What should a body do?</h2> |
| 270 | + <p>Ask your LLM. Paste the result. Watch it move.</p> |
| 271 | + <div class="hero-cta"> |
| 272 | + <a class="btn primary lg" href="/play">Start with the playground →</a> |
| 273 | + <button class="btn ghost lg" data-copy-prompt> |
| 274 | + <span class="lbl">Copy LLM prompt</span> |
| 275 | + </button> |
325 | 276 | </div> |
326 | | - </dl> |
327 | | - </section> |
| 277 | + </section> |
| 278 | + </main> |
328 | 279 |
|
329 | | - <!-- Footer --> |
330 | 280 | <footer class="footer"> |
331 | | - <div class="footer-brand"> |
332 | | - <svg class="logo" aria-hidden="true" viewBox="0 0 100 100" width="19" height="19" fill="none"><g stroke="currentColor" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"><path d="M50 34V55"/><path d="M50 35L34 26L23 15"/><path d="M50 35L66 26L77 15"/><path d="M50 54L36 72L28 88"/><path d="M50 54L64 72L72 88"/></g><circle cx="50" cy="20" r="10" fill="currentColor"/></svg> Posecode |
333 | | - <span class="footer-tag">kinematic motion as text</span> |
| 281 | + <div class="footer-top"> |
| 282 | + <div class="footer-brand"> |
| 283 | + <svg class="logo" aria-hidden="true" viewBox="0 0 100 100" width="19" height="19" fill="none"><g stroke="currentColor" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"><path d="M50 34V55"/><path d="M50 35L34 26L23 15"/><path d="M50 35L66 26L77 15"/><path d="M50 54L36 72L28 88"/><path d="M50 54L64 72L72 88"/></g><circle cx="50" cy="20" r="10" fill="currentColor"/></svg> |
| 284 | + <span>Posecode</span> |
| 285 | + <small>human movement, written as text</small> |
| 286 | + </div> |
| 287 | + <nav class="footer-links" aria-label="Footer"> |
| 288 | + <a href="./moves/">Movements</a> |
| 289 | + <a href="./spec.html">Spec</a> |
| 290 | + <a href="./llm-guide.html">LLM guide</a> |
| 291 | + <a href="/for-products">For products</a> |
| 292 | + <a href="mailto:hello@posecode.org?subject=Posecode%20Feedback">Feedback</a> |
| 293 | + <a href="https://github.com/posecode-dev/posecode" target="_blank" rel="noopener">GitHub</a> |
| 294 | + </nav> |
334 | 295 | </div> |
335 | 296 | <p class="footer-note"> |
336 | | - Range-of-motion values are general literature data, not medical advice. |
337 | | - Consult a qualified professional for physiotherapy or exercise prescription. |
338 | | - </p> |
339 | | - <p class="footer-legal"> |
340 | | - Apache-2.0-licensed open core · v0.2 · |
341 | | - <a href="./moves/">Movement library</a> · |
342 | | - <a href="./spec.html">Language spec</a> · |
343 | | - <a href="./llm-guide.html">LLM guide</a> · |
344 | | - <a href="/for-products">For products</a> · |
345 | | - <a href="mailto:hello@posecode.org?subject=Posecode%20Feedback">Feedback</a> · |
346 | | - <a href="https://github.com/posecode-dev/posecode/issues" target="_blank" rel="noopener">Issues</a> |
| 297 | + Apache-2.0-licensed · Range-of-motion values are general literature data, not medical advice. |
347 | 298 | </p> |
348 | 299 | </footer> |
349 | 300 |
|
|
0 commit comments