B1's MoCapAnything pick reversed (animal model, wrong for human capture); license analysis recorded in LICENSES.md. John chose Path B: run HSMR->SKEL locally on ultra (MPS), ship rig-motion only, accept the non-commercial licence risk as interim until a commercial SKEL licence request goes out (Path A, the clean upgrade). Engine installed under .engine/ (gitignored): uv venv py3.10, torch 2.13 MPS-green, ungated weights, smoke_test.py with Apple-Silicon bypasses (detectron2 stubbed with full-frame bbox, headless pyrender stubbed -> QC in Blender) -- see docs/B_ENGINE_SETUP.md. Remaining before B ships: John's gated SKEL v1.1.1 download, then the forward-pass smoke test (MPS end-to-end, timing, pose sanity). Known caveat: HSMR is per-frame so root is camera-space cam_t, NOT world-grounded -> Lane C derives root from foot-contact. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.8 KiB
3.8 KiB
MOCAPGOD progress ledger
One lane per session. Tick on completion. See PLAN.md for acceptance checks.
- Lane 0 — bootstrap. git + .gitignore, docs/LICENSES.md skeleton,
spec/mixamorig_bones.json (65 bones,
mixamorig:colon-prefixed). — 2026-07-17 - Lane A — capture + ingest. docs/CAPTURE.md protocol, ingest.py (probe → 30fps normalize → rename → rsync to m3ultra queue → LEDGER.tsv). — 2026-07-17
- Lane B — pose engine. Decision made 2026-07-17 (session 3): Path B — engine =
HSMR → SKEL, run local, ship rig-motion only, John accepts NC-licence risk
(
docs/DECISIONS.mdDecision 1 RESOLVED). Env is 90% up in.engine/HSMR(uv venv, torch 2.13 MPS verified green, ungated weights pulled). Still open before B ships: (1) John downloads gated SKEL v1.1.1 →.engine/HSMR/data_inputs/body_models/skel/; (2) fix the person-detector (detectron2 + chumpy failed to build — see gotchas); (3) real forward-pass smoke test on an HSMR demo image; then B2 (service-ize → BVH) + B3 (jitter). Lanes C and D remain blocked on B. - Lane C — retarget + cleanup (Blender). bvh → mixamorig FBX + QC turntable.
- Lane D — clip factory.
mocapCLI end-to-end; games + Unreal integration. - Lane E — ML upgrades (post-v1, gated).
- Lane F — UX (optional).
Notes for the next lane
- Lane D can't be started until B + C ship + test footage exists — it's the CLI that wraps ingest → pose_engine.py → retarget.py, and the latter two don't exist yet. Session 3 (the "Lane D" session) correctly built nothing; it locked Decision 1 and de-risked MPS instead.
- SKEL version trap: HSMR needs v1.1.1 exactly (
changelog_v1.1.1.txt); older = silent incompat. Source:.engine/HSMR/docs/SETUP.md(register skel.is.tue.mpg.de → download.php). - Engine wiring + ARM bypasses live in
docs/B_ENGINE_SETUP.md—smoke_test.pyalready stubs the un-buildable detectron2 (full-frame bbox) and headless pyrender (QC → Blender), so the detector swap + real QC are B2 polish, not blockers for a centered demo clip. - World-grounded gap (important): HSMR is per-frame → root is camera-space
cam_t, NOT the treaty's world-grounded trajectory. Fine for in-place DJ moves; walking/locomotion needs Lane C to derive root from foot-contact (or a grounding pass). Carry into Lane C design. - HSMR is installed on ultra, not m3ultra (PLAN Ground-Rule 1 puts the pose engine on m3ultra). Likely because m3ultra's disk reclaim waits on the reboot (Decision 2). Next B session decides: move it to m3ultra, or consciously host inference on ultra.
- VOID (was: "MoCapAnything is BVH-direct, skip the retarget rig"). Reversed — the model
is animal-only and not our engine. Whatever human model we pick emits SMPL or SKEL, not
mixamorig, so Lane C's constraint-retarget IS required and
spec/{smpl,skel}_to_mixamorig.jsonis back on the menu. HSMR's SKEL output (a biomechanical skeleton) is the likely source format if John goes SKEL. - Check MPS + global-trajectory FIRST for whichever human model John's decision unlocks (HSMR has an HF Space + demo to smoke-test before John's footage). These two risks are unchanged by the engine swap.
- Ground-truth skeleton naming is
mixamorig:(colon), armature object namedArmature. Lane C's name-map must handle colon vs underscore variants (PLAN warned about this). - Blender headless entrypoint:
/Applications/Blender.app/Contents/MacOS/Blender --background --python <script>. - House style for Blender scripts:
~/Documents/character_kit/scripts/merge_anims.py(note its units warning: mixamorig head sits at ~0.0505 native units — don't rescale via parent).