Skip to content

Issue triage: editor docs, playground speed persistence, desk presets, BVH + glTF export#108

Merged
a-baran-orhan merged 8 commits into
mainfrom
claude/issues-triage-easy-hard-j5g9qy
Jul 22, 2026
Merged

Issue triage: editor docs, playground speed persistence, desk presets, BVH + glTF export#108
a-baran-orhan merged 8 commits into
mainfrom
claude/issues-triage-easy-hard-j5g9qy

Conversation

@a-baran-orhan

Copy link
Copy Markdown
Member

Description

Works through several open issues, easy → hard, in one branch.

Fixes #20Editor file-association docs. Added a .posecode file-association guide (VS Code, Cursor, Sublime, Neovim) to editors/vscode/README.md, plus an editor-support pointer in the main README.

Fixes #22Playground playback speed. The speed control already existed; added the missing 1.5× step and made the selected speed persist across reloads (localStorage), applied when the viewer loads.

Fixes #21Desk/office posture presets. Three new movements — seated-torso-twist, shoulder-blade-retraction, wrist-forearm-rolls — all within parser ROM (0 clamp warnings), passing the eval, registered in the library, static pages regenerated.

Fixes #63BVH motion export. New exportBVH() in posecode-render bakes authored joint motion + root travel/turn into a standard .bvh headlessly (no WebGL). Playground Download BVH button. Documented coordinate system (Y-up, +Z, metres, ZXY Euler order) and scope (authored motion, not the IK-solved motion).

Fixes #90glTF/GLB animation export. New exportGLTF() / buildAnimatedRig() export the mannequin rig plus a baked AnimationClip via Three.js GLTFExporter. Playground Download glTF button. Loads back through GLTFLoader and plays on the included rig. Documented limitations (procedural rig, no retargeting yet).

Also part of the dance UAT umbrella #91 (which was split into focused sub-issues #100#107):

Two housekeeping commits: regenerated movement pages that had drifted from the current example sources, and updated the library-ordering test for the ballet status change.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Movement/Preset addition (adding a new .posecode script and registering it)
  • Documentation update

Checklist

  • My code follows the code style guidelines of this project
  • I have performed a self-review of my own code
  • My changes generate no new TypeScript/compiler warnings or errors:
    • Running npm run typecheck passes successfully
    • Running npm run build compiles without errors
  • I have run the unit test suite (npm test) and all tests pass (410 passing)
  • If applicable, I have run the fidelity evals (npm run eval) and all checks pass (0 parse failures, 0 clamp warnings)
  • If I added a new movement, I ran node scripts/generate-content-pages.mjs to regenerate the static pages

🤖 Generated with Claude Code


Generated by Claude Code

claude added 7 commits July 22, 2026 17:42
Signed-off-by: Claude <noreply@anthropic.com>
…eloads (#22)

Signed-off-by: Claude <noreply@anthropic.com>
The content pages under playground/public/moves were stale relative to the
current spec/examples sources (the honest reach/ground-lock contact changes
in the example scripts had not been regenerated) and still shipped a page for
the pirouette example, which is marked experimental and is therefore excluded
from the launch-ready generator output.

Signed-off-by: Claude <noreply@anthropic.com>
Adds three new desk/office wellness movements to the library:

- seated-torso-twist: gentle seated rotation for the mid-back and obliques
- shoulder-blade-retraction: scapular retraction / rowing squeeze
- wrist-forearm-rolls: standing wrist circles with forearm pronation/supination

Each stays within the parser ROM bounds (0 clamp warnings) and passes the
biomechanical invariant eval. Registered in the playground preset library and
static movement pages regenerated.

Signed-off-by: Claude <noreply@anthropic.com>
Adds exportBVH() to posecode-render: bakes a movement's authored joint
motion plus root travel/turn choreography into a standard Biovision
Hierarchy (.bvh) file, headlessly (no WebGL), by sampling the timeline at a
configurable frame rate.

- Skeleton mirrors the mannequin bone tree; leaves terminate with End Sites.
- Right-handed Y-up, +Z facing, metres (configurable scale), ZXY Euler order
  (Zrotation Xrotation Yrotation channels) for wide tool compatibility.
- Full looped runtime (cycle incl. loop-reset wrap x repeats) is baked so
  duration and loop count survive; root position channels carry travel/turn.
- Fingers excluded by default (opt in via includeFingers).
- Playground gains a 'Download BVH' button; renderer chunk stays lazy-loaded.
- Documented scope: authored motion, not the contact/IK-solved motion (future).

Tested headlessly: hierarchy/channel-count/frame-count structure, a
rotation round-trip that reconstructs the sampled pose, root translation for
a travelling movement, finger opt-in, and scale.

Signed-off-by: Claude <noreply@anthropic.com>
Adds exportGLTF() (and buildAnimatedRig()) to posecode-render: bakes a
movement into a glTF/GLB asset — the procedural mannequin rig plus one
AnimationClip driving joint rotations and root travel/turn — via Three.js
GLTFExporter.

- Samples the authored timeline at a configurable fps; joint nodes are named
  by Posecode bone id, the animated root group is 'posecode_root'.
- Full looped runtime baked as keyframes so duration/loop count survive.
- Returns a GLB ArrayBuffer by default, or a glTF JSON object (binary:false).
- Playground gains a 'Download glTF' button; render chunk stays lazy-loaded.
- Documented limitations: procedural rig (no retargeting onto external/humanoid
  skeletons yet) and authored motion (not the contact/IK-solved motion).

Tested headlessly: track construction, and a GLB round-trip through
GLTFLoader that rebinds the clip to an AnimationMixer and advances it.

Signed-off-by: Claude <noreply@anthropic.com>
Demi-plié, Relevé, Tendu, and Chassé are ballet examples that have not been
reviewed by anyone with dance-domain knowledge. Per the dance UAT tracking
issue (#91) and its focused split #103, they must not be presented as
launch-ready until turnout, naming (Relevé vs Elevé), and step mechanics are
signed off by a reviewer.

Downgrade all four to 'experimental', which removes them from the generated
launch-ready movement gallery until reviewed. Ballroom steps (box step,
grapevine, waltz box) are unaffected and keep the Dance domain in the
gallery. Updates the library-ordering test to match.

Signed-off-by: Claude <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
posecode Ready Ready Preview, Comment Jul 22, 2026 6:40pm

Signed-off-by: Claude <noreply@anthropic.com>
@a-baran-orhan
a-baran-orhan merged commit 94399be into main Jul 22, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants