Skip to content

Commit d734877

Browse files
Merge pull request #26 from posecode-dev/claude/model-upgrade-realistic-xepdo9
2 parents 17f8e4c + 0dbc1ae commit d734877

27 files changed

Lines changed: 1263 additions & 28 deletions

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [Unreleased]
9+
10+
### Added
11+
12+
- **Realistic human figure**: the playground, landing hero, and `<posecode-player>` embeds now render a fully rigged, textured human character (hands with articulated fingers, sneakers, face) instead of the procedural capsule mannequin. All solving (FK, ground-lock, pins, reach-IK) still runs on the driver skeleton, rebuilt to the character's exact proportions and retargeted bone-for-bone every frame; the procedural figure remains as an automatic fallback (and via `?figure=classic` / `character="off"`).
13+
- **Self-collision resolution**: a capsule-based de-penetration pass keeps forearms/hands out of the torso, head, and legs (and shins out of each other), clamped to healthy ROM, so limbs no longer pass through the body mid-movement.
14+
- `viewer.characterActive`, `createViewer({ characterUrl })`, and the embed `character` attribute.
15+
- `scripts/capture-gifs.mjs` (`npm run gifs`): reproducible headless regeneration of the README movement GIFs from the live renderer.
16+
17+
### Fixed
18+
19+
- Deadlift arms now hang toward the bar during the hinge (were authored as shoulder extension, flying up behind the back).
20+
- Crunch keeps the feet planted with bent knees (shins previously folded through the floor and jacked the body up).
21+
- Touch-toes folds like a human (hinge depth and knee bend were over-authored, collapsing the figure).
22+
823
## [0.1.0] - 2026-07-08
924

1025
### Added

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ Two safety layers ship with the language:
124124
The protocol and both libraries are **MIT-licensed**: the open core. See [`spec/SPEC.md`](spec/SPEC.md) for the full language and [`spec/llm-authoring.md`](spec/llm-authoring.md) for the authoring prompt.
125125
For where Posecode spreads fastest and the per-domain go-to-market plan, see [`docs/market-research.md`](docs/market-research.md); for the engine roadmap, [`ROADMAP.md`](ROADMAP.md).
126126

127+
The 3D figure is the [Adobe Mixamo](https://www.mixamo.com) anatomical mannequin character, exported from Mixamo and used under the Mixamo license (royalty-free in projects). The renderer also ships a zero-asset procedural figure, used automatically wherever the character can't load — and it accepts any Mixamo-rigged GLB via `characterUrl`.
128+
127129
---
128130

129131
## Scope (v0.1)

docs/media/deadlift.gif

710 KB
Loading

docs/media/jumping-jacks.gif

-630 KB
Loading

docs/media/lateral-raise.gif

619 KB
Loading

docs/media/squat.gif

534 KB
Loading

package-lock.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
"dev": "npm run dev -w playground",
1717
"build": "npm run build -w playground",
1818
"eval": "tsx packages/posecode-eval/src/cli.ts",
19-
"typecheck": "for p in packages/*/tsconfig.json playground/tsconfig.json editors/*/tsconfig.json; do tsc --noEmit -p \"$p\" || exit 1; done"
19+
"typecheck": "for p in packages/*/tsconfig.json playground/tsconfig.json editors/*/tsconfig.json; do tsc --noEmit -p \"$p\" || exit 1; done",
20+
"gifs": "node scripts/capture-gifs.mjs"
2021
},
2122
"devDependencies": {
2223
"@vitest/coverage-v8": "^2.1.8",
24+
"gifenc": "^1.0.3",
25+
"playwright-core": "^1.61.1",
2326
"tsx": "^4.19.2",
2427
"typescript": "^5.7.2",
2528
"vitest": "^2.1.8"

packages/posecode-embed/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ definePosecodePlayer(); // idempotent
6464
| `controls` | `true` | Show the play/pause bar. |
6565
| `autorotate` | `true` | Slowly orbit the camera when idle. |
6666
| `speed` | `1` | Playback multiplier (`0.1``4`). |
67+
| `character` | *(hosted default)* | Realistic figure: a GLB URL (Mixamo rig), or `off` for the procedural mannequin. Load failures fall back to the mannequin. |
6768
| `playground` | `https://posecode.org/play` | Base URL for the "Edit ↗" link. |
6869

6970
Boolean attributes accept `false` / `0` / `no` / `off` to turn them off, so

packages/posecode-embed/src/element.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ export class PosecodePlayerElement extends HTMLElement {
105105
controls: this.getAttribute("controls"),
106106
autorotate: this.getAttribute("autorotate"),
107107
speed: this.getAttribute("speed"),
108+
character: this.getAttribute("character"),
108109
});
109110
}
110111

@@ -178,6 +179,7 @@ export class PosecodePlayerElement extends HTMLElement {
178179
const { createViewer } = await import("posecode-render");
179180
const viewer = createViewer(this.#canvas, {
180181
autoRotate: opts.autoRotate && !reduceMotion,
182+
...(opts.characterUrl ? { characterUrl: opts.characterUrl } : {}),
181183
});
182184
this.#viewer = viewer;
183185
viewer.onPhase(({ phaseName }) => {

0 commit comments

Comments
 (0)