OuterPractice runs three observation layers in the browser: MediaPipe PoseLandmarker extracts joint positions, FaceLandmarker derives facial-tension markers, and a Web Audio worklet computes ambient-audio onset and dynamic features. No frames or raw audio leave the device.

How OuterPractice observes.

The technical layer: MediaPipe pose tracking, FaceLandmarker for facial-tension markers, and ambient audio analysis for onset and dynamics. Everything in your browser.

Try a session →
capturecamera + micextractfeature vectorstensioncalibrated signal

The capture layer

MediaPipe PoseLandmarker and FaceLandmarker run on the camera stream at ~30 frames per second. A Web Audio worklet runs on the microphone stream and computes onset and dynamic features. No frames, no raw audio samples are retained — only derived features.

The extract layer

Per second, the extractors emit a feature vector: shoulder-rise delta, head-tilt angle, jaw-distance ratio, blink count, brow-tension proxy, onset-interval variance, and dynamic-event amplitude. Pure derivations from the raw streams.

The tension layer

Features compose into a single calibrated tension signal. Baselines are personal — established during the first 30 seconds of each session, so a violinist's natural head-tilt does not register as tension. Tension patterns are currently tuned for drumming; other instruments use generic baselines until a tuned profile is added.

What persists

The per-second feature vector and the derived tension signal, stored in your browser's IndexedDB. No video. No raw audio. No images. Sessions can be exported as JSON for the teacher loop.

Why a browser

No install, no permission grants beyond camera and microphone. The PWA installs to the home screen for one-tap launch, but continues to run locally even when offline.