# Lane B engine — HSMR install & smoke-test state (session 3, 2026-07-17) Engine per Decision 1 = **Path B: HSMR → SKEL**, run local on **ultra**, MPS. Installed under `.engine/HSMR` (gitignored). This doc = how it's wired + how to run once SKEL lands. ## State - ✅ `uv venv` py3.10 at `.engine/HSMR/.venv`; torch **2.13.0**, `mps.is_available() == True`. - ✅ Ungated weights in `.engine/HSMR/data_inputs/`: HSMR-ViTH ckpt (`released_models/HSMR-ViTH-r1d1/checkpoints/hsmr.ckpt`), ViTPose backbone, 3 regressors. - ✅ Smoke-test runner `.engine/HSMR/smoke_test.py` — **validated to the exact SKEL gate**: imports + detector stub + patch-crop all run; it fails only on the missing `skel_male.pkl`. - 🚧 **Blocked on the gated SKEL download (John's manual step, below).** - Install script (re-runnable): `.engine/setup_hsmr.sh`. ## Two Apple-Silicon bypasses (non-obvious — next session, inherit these) - **detectron2 will NOT build on ARM Mac** (uv build-isolation hides the installed torch from its `setup.py`; a `uv pip install --no-build-isolation` retry may fix it if a real detector is wanted). The runner **sidesteps it**: stubs the `vitdet` import and injects a **full-frame bbox** (fine for centered single-subject demo clips). *B2 decision:* swap detectron2 for a light torchvision/YOLO person-cropper rather than fight the from-source build. - **pyrender is dead headless on macOS** — `py_renderer/__init__.py` forces `PYOPENGL_PLATFORM=egl` and there is no EGL on Mac. The runner permissively stubs `pyrender`/`OpenGL` and does **visual QC in Blender** (fleet renderer + Lane C's tool). It dumps `mesh_qc.npz` (skin/skel verts+faces for Blender) and `params.npz` (SKEL poses/betas/cam_t — the Path-B payload we keep). - **chumpy** also failed to install. Likely irrelevant for SKEL (its `.pkl` is modern, not chumpy-pickled); only matters if the SMPL model (eval-only) is ever loaded. If SKEL load throws on a chumpy import, `uv pip install --no-build-isolation chumpy` + a numpy-alias patch. ## John's one step — drop the SKEL files (login + licence, so it's yours to do) Register **skel.is.tue.mpg.de** → Download → **"SKEL and BSM models"** → `skel_models_v1.1.zip` (**must be v1.1.1** — check `changelog_v1.1.1.txt` inside; older = silent incompatibility). Unzip, then: ``` mv /path/to/skel_models_v1.1 ~/Documents/MOCAPGOD/.engine/HSMR/data_inputs/body_models/skel ``` so that `…/data_inputs/body_models/skel/skel_male.pkl` exists. ## Run the smoke test (once SKEL is in place) ``` cd ~/Documents/MOCAPGOD/.engine/HSMR && source .venv/bin/activate PYTHONPATH=. python smoke_test.py -i data_inputs/demo/example_videos/gymnasts.mp4 # or .../example_imgs ``` Outputs → `data_outputs/smoke/`: `params.npz` (rotations), `mesh_qc.npz` (Blender QC), and console device/fps/NaN. Answers the Lane B smoke questions: **MPS forward OK? timing (<2× realtime)? pose sane?** ⚠️ HSMR is a **per-frame** recoverer → root is **camera-space `cam_t`, not world-grounded**. Fine for in-place DJ moves; locomotion (walk) needs Lane C's foot-contact root derivation or a grounding pass. This is the treaty's global-trajectory caveat, carried into Path B.