5bfc63f86d
HandPersistenceGate (min_frames=3, radius=0.15) suppresses ghost hands that flash for fewer than min_frames consecutive frames. Gate is called once per frame in the renderer on persons_hands; result filters both the video overlay loop and the side panels. hand_plausible now rejects wrists outside [-0.1, 1.1] (out-of-frame ghost anchor check). panel_segments gains a conf_min param. Env knobs read at renderer init (single parse, no per-frame cost): HAND_CONF_MIN (default 0.45, raised from 0.3) HAND_PERSIST_FRAMES (default 3) ARKIT_BONE_MAX (default 0.5, passed to arkit_segments) New tests: 12 gate tests + 4 wrist-bounds tests.
data_only_viz
Python + Metal visualiser for the AV-Live data-only patch.
Hand features OSC
/pose/hands [pid=0, lx, ly, lopen, lspeed, rx, ry, ropen, rspeed, dist]
- Emitted once per pipeline tick by
pose_bridge.send_handsto sclang:57121. - L = leftmost hand on screen, R = rightmost; absent hand -> its 4 floats are 0.
- Ranges: positions/openness/dist in [0,1]; speed >= 0 (normalized units/frame).
- Consumed by SuperCollider
~handFeat(data_only) and the Metal renderer uniforms. - Multi-person is not yet carried (pid is always 0).