Goal
Finish Eye/head tracking as the production facade over CLJS scheduled snippets, with the experimental scheduled-animation behavior as the only path.
Current state
Polyester has src-cljs/latticework/eye_head_tracking.cljs, which delegates much of the planning shape to gaze and emits stable snippets for eyeYaw, eyePitch, headYaw, headPitch, and headRoll. The old TypeScript service still contains more sensor/lifecycle behavior, but worker code must remain planner-only.
This mirrors the Latticework research issue: meekmachine/Latticework#33.
Clojure-way direction
- Main thread owns mouse events, webcam/video, camera-relative calculations, face tracking,
requestAnimationFrame, and Loom3 mutation.
- CLJS owns config, target smoothing, throttling, trajectory state, enabled/disabled state, return-to-neutral, and snippet construction.
- Head/eye outputs must go through Animation agency scheduling, not direct AU or bone mutation.
- Disabling head or eye tracking must schedule/remove/reset the relevant snippets so stale pose does not linger.
Acceptance criteria
- Manual targets emit the same AU pairs: 61/62, 64/63, 51/52, 54/53, 55/56.
- Output snippets preserve current priorities, stable names, inherited first frames, and
mixerClampWhenFinished behavior.
headTrackingEnabled: false stops future head snippets and clears any active head pose/transition.
- Return-to-neutral reliably schedules neutral eye/head snippets and is testable.
- Direct engine paths are absent from worker code.
- Existing eye/head public API remains source-compatible through the Polyester adapter.
Goal
Finish Eye/head tracking as the production facade over CLJS scheduled snippets, with the experimental scheduled-animation behavior as the only path.
Current state
Polyester has
src-cljs/latticework/eye_head_tracking.cljs, which delegates much of the planning shape to gaze and emits stable snippets foreyeYaw,eyePitch,headYaw,headPitch, andheadRoll. The old TypeScript service still contains more sensor/lifecycle behavior, but worker code must remain planner-only.This mirrors the Latticework research issue: meekmachine/Latticework#33.
Clojure-way direction
requestAnimationFrame, and Loom3 mutation.Acceptance criteria
mixerClampWhenFinishedbehavior.headTrackingEnabled: falsestops future head snippets and clears any active head pose/transition.