Measurements
The Measurements panel is where you pick which body channels matter for your movement. Channels become per-frame numbers that drive phase transitions and form rules.
Two ways to drop a measurement
A. Preset chips (recommended for common moves)
The top of the Measurements panel shows a grid of curated chips:
| Group | Chips |
|---|---|
| Stance | wide · narrow |
| Hand spread | together · apart |
| Hand height | above head · at chest · by side |
| Body in frame | on left · centred · on right |
| Knees | deep · straight · deep right · straight right |
| Elbows | bent · straight · bent right · straight right |
| Body posture | stood up · crouched down · hands raised · hands lowered · jumped up |
Tap a chip → drops the underlying tracking point(s) + a pre-tuned condition into the currently-selected phase. The chip lights green (“applied”).
The chips are wired through MovementIntents (package:pose_flow).
Each intent maps to one or more TrackingPoints + a default
condition range, the trainer doesn’t have to remember “knees deep
= left_knee + right_knee both between 70° and 110°”.
B. Channel catalogue (for everything else)
Below the chips, a scrollable list of every available channel, grouped by kind:
- Joint angles:
left_knee,right_knee,left_hip,right_hip,left_elbow,right_elbow,left_shoulder,right_shoulder,spine, … - Camera-frame angles (view-dependent,
spine_lean,left_knee_valgus,hip_tilt, …). Marked with a 2D badge to warn that the value changes with camera position. - Distances:
stance_width,wrist_spread,left_wrist_to_shoulder, … - Ratios:
stance_to_shoulder_ratio,wrist_to_shoulder_spread_ratio, … - Position:
hip_center_x,left_wrist_y, … - Velocity: derived channels with a 200ms window.
- Stability: derived channels with a 1s window.
- Diagnostics:
symmetry_*channels (informational only, not currently conditionable).
Tap the checkbox on any row → the channel is enabled as a condition on the current phase. The row shows the live value to the right.
Long-press the ⓘ button → opens an info dialog explaining how the channel is computed + which landmarks it uses.
Live values
Every row in the catalogue shows the live value updated each frame, with a coloured RAG dot indicating compliance with the authored range (green = in, red = out, no dot = no range authored).
Lets you author “I want this number to be < 100” with confidence , you can see the number drop as you move.
Decimal precision
Different channels round differently:
- Angles & symmetry, whole degrees
- Distances & ratios, 2 decimals
- Position, 2 decimals (it’s in
[0, 1]normalised space) - Velocity, 2 decimals
- Stability, 3 decimals
The Studio reads lookupChannelKind for each channel to pick the
right format.
What gets written when you save
Each enabled channel becomes a TrackingPoint entry in the
.pose file’s trackingPoints array, plus a FormRule (if you
authored a range) and a PhaseCondition (if the channel gates a
phase transition).
The Studio de-duplicates, if the same tracking point is
referenced by conditions in multiple phases, it’s emitted ONCE in
trackingPoints and referenced by id from each PhaseCondition
/ FormRule.
Channel selection tips
- Prefer view-invariant channels (joint flexion angles, distances, ratios) when the movement doesn’t depend on camera position. These work the same at every bucket.
- Use ratios over raw distances when you want body-size
independence.
stance_to_shoulder_ratiois robust across body sizes;stance_width(an absolute distance) is not. - Use
positionchannels for “where in the frame” gates (lateral shuffles, predator jacks). - Use
relativeToBaseline(Δ from phase entry toggle in the conditions panel) for jump detection or any “moved by X from the phase start” gate. - Camera-frame angles (spine lean, knee valgus, hip tilt) only make sense when you author per-bucket bands, they read differently from each camera angle. See camera buckets.
Read next
- Conditions, tune the ranges.
- Measurement channels reference, every channel + when to use it.
- Movement intents reference, what each preset drops.
TrackingPointmodel.