3ffd81afc7
Apply hand_plausible + HandPersistenceGate in _step_stab before route_hands so gestures and /pose/hands features only see quality- gated hands. Cache per-tick validated set (_tick_hands/_tick_chir/ _tick_mirror) so all three emitters share one acquisition. Gate stepped at 30 Hz publisher cadence (audit R6). Non-protocol hands (raw numpy arrays) pass through via try/except for backward compat.
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).