Skip to content

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

The top of the Measurements panel shows a grid of curated chips:

GroupChips
Stancewide · narrow
Hand spreadtogether · apart
Hand heightabove head · at chest · by side
Body in frameon left · centred · on right
Kneesdeep · straight · deep right · straight right
Elbowsbent · straight · bent right · straight right
Body posturestood 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_ratio is robust across body sizes; stance_width (an absolute distance) is not.
  • Use position channels 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.