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 it works

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 → Read the privacy story No frames leave the device
01 · Architecture

Three layers, one direction.

Capture feeds extract; extract feeds tension. The raw streams never move past the first box — only derived numbers travel onward.

capturecamera + micextractfeature vectorstensioncalibrated signal

The capture layer

MediaPipe PoseLandmarker and FaceLandmarker run on the camera stream at ~30 fps; a Web Audio worklet runs on the mic. No frames, no raw audio samples are retained.

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, dynamic amplitude.

The tension layer

Features compose into one calibrated tension signal. Baselines are personal — established in the first 30 seconds — so a violinist's natural head-tilt doesn't read as tension.

What persists

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

Calibration

Tension patterns are currently tuned for drumming; other instruments use generic baselines until a tuned profile is added. The first 30 seconds set your personal zero.

Why a browser

No install, no permissions beyond camera and microphone. The PWA installs to the home screen for one-tap launch and keeps running locally, even offline.