Motion Tracking Settings
Control AI-powered motion tracking behavior. Applies to: Workout player (motion tracking in other views — Camera, Games, Assessments — is always on and cannot be toggled off by users).
| Parameter | Type | Default | Applies to | What it does internally |
| motionTrackingSettingOn | boolean | true | Settings modal | When false, hides the AI-tracking on/off toggle from the in-app Settings modal, so users cannot change the tracking mode themselves |
| motionTrackingEnabled | boolean | user preference | Workout player | Session-level override of the AI tracking state. When explicitly set (true or false), it clears the user's saved preference (localStorage aiTrackingEnabled) and uses the provided value for this session |
| motionDataEnabled | boolean | true | Workout player, Camera | When false, the SDK does NOT record per-frame pose landmark data during the session. Session replay will be empty for affected sessions, but rep counting and all other workout functionality is unaffected |
| selfModeEnabled | boolean | true | Workout player, AI Trainer | Chooses what users get when motion tracking is off. true: the Gym Log. false: the older timer-only exercise page. Also accepted as a URL query param |
What happens when motion tracking is OFF (`motionTrackingEnabled: false` or user toggle):
- The camera-positioning (silhouette) step is skipped and no camera/pose pipeline runs; a "No AI" badge is shown.
- Users get the Gym Log: they log each set by hand (adjusting the reps, or tapping "+1 rep" during a timed set), adjust rest, undo or redo a set, and review the session at the end. Logged reps show on the results screen, and the usual
workout_started,exercise_completed,workout_progressandworkout_endedevents are sent. No form accuracy or mistake data is recorded (the accuracy score inworkout_overviewonly reflects time spent against the planned time). - With
selfModeEnabled: false, rep-based exercises become timers (roughly 2 seconds per configured rep) that auto-advance, and no reps are recorded. - If you need realistic tracking data without a person in front of the camera, use
videoURLinstead — see Testing & Simulation.
`motionDataEnabled` — only use this if you know why it's necessary. This flag exists for memory-constrained scenarios (e.g., long workouts with many unique exercise videos on older iOS devices where peak memory pressure can cause the WebView to crash). Disabling motion data reduces memory usage at the cost of losing session replay. The recorder state resets on every verification, so the flag does not leak across sessions. Default behavior is unchanged if you omit the parameter.
1// Via customParams
2kinestex.createView(
3 customParams: [
4 "motionTrackingSettingOn": true,
5 "motionTrackingEnabled": true,
6 "motionDataEnabled": false // Only set when memory-constrained
7 ]
8)