Skip to content

PoseFlow Studio overview

PoseFlow Studio is a no-code authoring tool. A trainer stands in front of a camera, names some phases, drops a few measurement presets, and the Studio writes a .pose file that any consumer of the SDK can run unchanged.

The Studio ships as package:pose_flow_studio.

What you get

  • A live camera surface filling the screen, with the pose engine skeleton + diagnostic overlays drawn on top.
  • A floating-panel UI: Phases (left), Measurements + Conditions
    • Camera angles (right), Test player (bottom). Trainers expand / collapse each to declutter while moving.
  • A measurement library: every channel the SDK can compute is one tap away. Curated presets (“knees deep”, “stance wide”, “hands above head”) drop full conditions in one click.
  • Live preview: the same MovementTracker that runs in production drives the test player. Rep counts tick on the chip; active phases light up; form-rule feedback flows through the toast deck. What you author is what the user gets.
  • A camera-angle detector: the chip in the top bar shows the live-detected bucket (Front · Hip / 45° Left · Head / etc.). The picker grid lets you author against multiple buckets.
  • Save: a single button writes the .pose file to your StudioPersistence backend (Firebase, Drift, in-memory).

What it doesn’t do

  • The Studio is authoring only. It doesn’t ship runtime tracking; consumers integrate the SDK directly.
  • The Studio is storage-agnostic. It doesn’t know about Firebase or any specific database. You wire the StudioPersistence ports to whatever backend the host uses.
  • The Studio is CMS-agnostic. The package has zero host- or cloud-specific code in lib/. Any Flutter host, a managed CMS, a trainer dashboard, a desktop tool, can drop it in as a single screen.

How it ships

One screen widget:

import 'package:pose_flow_studio/pose_flow_studio.dart';
StudioScope(
persistence: yourPersistence,
child: const PoseFlowStudioScreen(),
)

StudioScope is an InheritedWidget that exposes the persistence bundle + a few optional host hooks (asset base path for web, metadata panel builder). PoseFlowStudioScreen is the route.

The full host-integration guide: building a Studio host.

The trainer’s workflow

  1. Add phases, usually 2 (Up / Down for most strength moves), sometimes more (Stand / Squat / Plank for burpees, Left / Right for lateral shuffles).
  2. Pick measurements, open the Measurements panel; either tap a preset chip or tick a row from the channel catalogue.
  3. Set conditions, for each measurement, set a range. Either type the numbers, or tap “Snap to current” to capture the live value as the centre + default tolerance.
  4. Author bucket variants (optional), for view-dependent measurements, tap a different bucket in the Camera angles panel and re-tune. The runtime auto-picks based on where the user stands.
  5. Test, squat in front of the camera. The rep counter ticks. Adjust. Repeat.
  6. Save, top bar, “Save” button. The dropdown next to it has Save & Publish, Export .pose (download), Import .pose, Import image/video for marker-based authoring.

See authoring workflow for the full step-by-step.

The pieces

PanelPurpose
Metadata (left, top)Host-provided. The CMS uses it for body parts, muscle groups, imagery. Optional.
PhasesPhase list + sequence editor + live progress stepper.
OverlaysDiagnostic overlay toggles (skeleton, CoM, sway, lean, etc.) + form feedback severity filter.
Camera angles16-bucket picker grid + live-detected chip + per-bucket authoring target.
MeasurementsChannel catalogue with kind grouping + preset chips.
ConditionsPer-phase, per-channel range editor. The dial + ball indicator visualises live compliance.
Test player (bottom)Rep counter + detected phase pill + compliance summary.
Top barMovement name (read-only, edit in Metadata) + settings menu + record button + save + dropdown.

Authoring vs runtime parity

Every move you make in the Studio is reflected in real time by the SAME MovementTracker that runs in production (wrapped in ShowcaseTracker). When the studio rep counter ticks, the consumer app will tick on the same input. This is enforced by the parity test contract.