Customization Parameters
This section describes all available customization parameters that can be passed to the KinesteX SDK to customize the user experience. Parameters are organized by category, with examples showing which have direct SDK support vs. requiring customParams.
Parameter Passing Methods:
- Direct SDK Support: Pass directly to SDK initialization or view creation methods
- customParams / customParameters: Additional parameters passed via a custom parameters object
- HTML/JS postData: All parameters passed as flat object via postMessage API
Required Parameters
These parameters are mandatory for successful SDK initialization.
| Parameter | Type | Description |
| userId | string | Unique identifier for the user. Must be at least 2 characters. Used for tracking progress, analytics, and personalization |
| company | string | Company name associated with the API key. Determines theme defaults and content access |
| key | string | API key for authentication. Required for all API calls and content access |
SDK Support: All platforms support these as direct parameters.
1// Direct SDK support
2let kinestex = KinesteXAIKit(
3 apiKey: "YOUR_API_KEY",
4 companyName: "YOUR_COMPANY",
5 userId: "unique-user-id"
6)User Profile
Parameters that define user characteristics for personalized content and recommendations.
| Parameter | Type | Description | Effect |
| age | number | User's age in years | Affects workout intensity recommendations and exercise selection |
| gender | string | User's gender (male, female, other) | Affects BMI calculations and content personalization |
| height | number | User's height (in cm or inches based on locale) | Used for BMI calculation and exercise calibration |
| weight | number | User's weight (in kg or lbs based on locale) | Used for BMI calculation and calorie estimations |
| fitness_level | string | User's fitness level | Determines workout difficulty and progression |
| lifestyle | string | User's lifestyle type (e.g., sedentary, active) | Affects personalized plan recommendations |
| body_parts | string[] | Target body parts for workouts | Filters and prioritizes exercises targeting specific areas |
| plan_type | string | Type of workout plan | Determines the structure and focus of generated plans |
SDK Support: Most platforms have direct support via UserDetails object or postData fields.
1// Direct SDK support via UserDetails
2let user = UserDetails(
3 age: 30,
4 height: 180,
5 weight: 75,
6 gender: .Male,
7 lifestyle: .Active
8)
9
10kinestex.createView(
11 user: user,
12 // ... other params
13)Theme & Appearance
Control the visual appearance of the application.
| Parameter | Type | Default | Description | Effect | |
| style | "dark" | "dark" | Applies style to the UI | Changes the entire UI color scheme to dark or light mode | Theme mode |
| themeName | string | Company name | Custom theme identifier | Loads a specific theme configuration (e.g., branded themes) |
Note: Theme can also be set via URL parameter ?style=dark or ?style=light
SDK Support:
- Swift: Direct support via
IStyleclass passed to view creation methods (hex values with #) - Flutter: Direct support via
IStyleclass passed to view creation methods - Kotlin: Direct support via
IStyledata class passed to view creation methods (hex values without #) - React Native/React: Direct support via
styleobject in postData - HTML/JS: Direct in postData object
1// Direct SDK support via IStyle class
2let customStyle = IStyle(
3 style: "light",
4 themeName: "CustomBrand"
5)
6
7kinestex.createWorkoutView(
8 workout: "Fitness Lite",
9 user: user,
10 style: customStyle,
11 isLoading: $isLoading,
12 onMessageReceived: { /* ... */ }
13)Language & Localization
Configure the language for all UI text, voice prompts, and content.
| Parameter | Type | Default | Description |
| language | string | "en" | Language code for localization |
| voiceActor | string | - | Specific voice actor for audio feedback |
| content_gender | string | - | Gender preference for content/instructors shown |
Supported Languages:
| Code | Language | RTL Support |
| en | English | No |
| es | Spanish | No |
| fr | French | No |
| de | German | No |
| it | Italian | No |
| pt | Portuguese | No |
| ru | Russian | No |
| ar | Arabic | Yes |
| he | Hebrew | Yes |
| hi | Hindi | No |
| bn | Bengali | No |
| id | Indonesian | No |
| da | Danish | No |
| el | Greek | No |
SDK Support: Requires customParams on most platforms.
1// Via customParams
2kinestex.createView(
3 customParams: [
4 "language": "es",
5 "content_gender": "female"
6 ],
7 // ... other params
8)Workout Configuration
Parameters for configuring workout behavior and progression.
| Parameter | Type | Description | Effect |
| planC | string | Plan configuration identifier | Specifies which workout plan to load |
| exercises | string[] | Array of exercise identifiers | Defines the specific exercises to include in a session |
| currentExercise | string | Current exercise identifier | Sets the active exercise for camera component |
| completed_exercises | string[] | Previously completed exercises | Allows resuming a workout from a specific point |
| start_from_exercise | string | Exercise to start from | Skips to a specific exercise in the workout |
| start_from_rest | boolean | Start from rest period | If true, begins at rest screen before the specified exercise |
| resetPlanProgress | boolean | Reset all plan progress | Clears all saved progress for the user's plans |
| on_start_url | string | URL to call on workout start | Webhook URL triggered when workout begins |
Note: Exercise IDs can be retrieved from the Content API.
1// Direct support for some, customParams for others
2kinestex.createCameraView(
3 exercises: ["Squats", "Lunges", "Pushups"], // direct
4 currentExercise: $currentExercise, // direct
5 customParams: [
6 "start_from_exercise": "Lunges",
7 "start_from_rest": true,
8 "resetPlanProgress": false
9 ]
10)Camera & Pose Detection
Fine-tune the camera and pose detection system.
| Parameter | Type | Default | Description | Effect |
| shouldAskCamera | boolean | true | Prompt for camera permission | Shows camera permission dialog before starting |
| shouldShowCameraSelector | boolean | false | Show camera selection UI | Allows user to choose between available cameras |
| shouldShowOpenCameraSettings | boolean | false | Show settings button | Displays button to open device camera settings |
| cameraId | string | - | Specific camera device ID | Forces use of a specific camera |
| cameraLabel | string | - | Camera label for display | Shows custom label for the selected camera |
| minPoseDetectionConfidence | number | 0.5 | Minimum detection confidence (0-1) | Lower values detect poses more easily but may be less accurate |
| minTrackingConfidence | number | 0.5 | Minimum tracking confidence (0-1) | Affects how persistently poses are tracked between frames |
| minPosePresenceConfidence | number | 0.5 | Minimum presence confidence (0-1) | Threshold for determining if a person is in frame |
| mediapipeModel | "full" "heavy" "light" | "full" | MediaPipe model variant | light: Faster, less accurate. full: Balanced. heavy: Most accurate, slower |
| defaultDelegate | "GPU" "CPU" | Auto | Processing delegate | Forces GPU or CPU processing for pose detection |
| landmarkColor | string | "#14FF00" | Pose landmark color | Changes the color of skeleton overlay (hex color) |
| showSilhouette | boolean | true | Show body silhouette | Displays silhouette guide overlay during exercises |
| includePoseData | boolean | - | Include raw pose data | Sends pose landmark data in postMessage events |
| includePoseBorders | boolean | true | Show pose boundary guides | Displays borders indicating optimal pose positioning |
| includeRealtimeAccuracy | boolean | - | Send real-time accuracy | Broadcasts accuracy scores in real-time via postMessage |
| videoFit | "contain" | "cover" | Camera feed display mode | When set to "contain", shows the full camera frame instead of zooming in to fill the area. Useful for maximizing available space for motion tracking |
Note: defaultDelegate can also be set via URL parameter ?delegate=GPU or ?delegate=CPU
1// Via customParams
2kinestex.createCameraView(
3 exercises: exerciseList,
4 currentExercise: $currentExercise,
5 customParams: [
6 "landmarkColor": "#FF5500",
7 "showSilhouette": true,
8 "mediapipeModel": "heavy",
9 "defaultDelegate": "GPU",
10 "includePoseData": true,
11 "includeRealtimeAccuracy": true,
12 "shouldShowCameraSelector": true,
13 "videoFit": "contain" // show full camera frame
14 ]
15)UI Controls
Control visibility and behavior of UI elements.
| Parameter | Type | Default | Description | Effect |
| isHideHeaderMain | boolean | false | Hide main header | Removes the top navigation header |
| hideFeelingDialog | boolean | false | Hide feeling dialog | Skips the post-workout feeling prompt |
| hideMusicIcon | boolean | - | Hide music control | Removes the music toggle button |
| hideMistakesFeedback | boolean | - | Hide mistake feedback | Disables on-screen form correction prompts |
| showModalWarmUp | boolean | - | Show warm-up modal | Displays warm-up recommendation before workout |
| showSettings | boolean | - | Show settings button | Displays settings access in the UI |
| isDrawingPose | boolean | - | Enable pose drawing | Activates skeleton visualization on camera feed |
| isOnboarding | boolean | true | Enable onboarding flow | Shows/hides the initial onboarding experience |
1// Via customParams
2kinestex.createView(
3 customParams: [
4 "isHideHeaderMain": true,
5 "hideFeelingDialog": true,
6 "hideMusicIcon": true,
7 "hideMistakesFeedback": false,
8 "isOnboarding": false
9 ]
10)Challenge Mode
Configure challenge-specific parameters for direct challenge launches.
| Parameter | Type | Description | Effect |
| exercise | string | Challenge exercise identifier | Specifies which exercise to use for the challenge |
| countdown | number | Countdown duration in seconds | Sets the preparation countdown before challenge starts |
| reps | number | Target repetition count | Sets the goal number of reps for the challenge |
1// Via customParams for challenge integration
2kinestex.createChallengeView(
3 exercise: exerciseId, // direct
4 customParams: [
5 "countdown": 5,
6 "reps": 20
7 ]
8)Complete UX Customization
Customize the Complete UX (Main View) home page experience.
| Parameter | Type | Description | Effect |
| challenges_home | array | Custom challenges/games for home screen | Defines the two challenge/game options shown on the Complete UX home page |
challenges_home Configuration:
The challenges_home parameter allows you to customize the challenges and games displayed on the home screen of the Complete UX experience. You must pass exactly 2 objects in the array.
Array Object Structure:
| Property | Type | Required | Description |
| id | string | Yes | Exercise ID for challenges, or game ID for games |
| name | string | Yes | Display name shown in the UI |
| isGame | boolean | Yes | Set to true for games, false for challenges |
Available Games:
balloonpop- Balloon Pop gamealiensquatshooter- Alien Squat Shooter gamecolorchase- Color Chase game
Combination Options:
- Two challenges (both with
isGame: false) - Two games (both with
isGame: true) - One challenge + one game (mixed
isGamevalues)
Note: You can pass any exercise ID as a challenge. When specifying a game, ensure isGame is set to true.
1// Customize challenges on Complete UX home page
2let exerciseId = "your-exercise-id" // Get from Content API
3let exerciseName = "Your Exercise Name"
4
5kinestex.createMainView(
6 customParams: [
7 "challenges_home": [
8 ["id": exerciseId, "name": exerciseName, "isGame": false],
9 ["id": "balloonpop", "name": "Balloon Pop", "isGame": true]
10 ]
11 ]
12)Leaderboard
Configure leaderboard functionality.
| Parameter | Type | Description | Effect |
| showLeaderboard | boolean | Show leaderboard UI | Enables/disables leaderboard visibility |
| username | string | Display name for leaderboard | Sets the user's name shown on leaderboards |
Note: Username is automatically saved to localStorage for future sessions.
1// Via customParams
2kinestex.createView(
3 customParams: [
4 "showLeaderboard": true,
5 "username": "FitnessPro123"
6 ]
7)Loading Screen
Customize the loading screen appearance (includes native overlay color that is displayed during initial loading phase).
| Parameter | Type | Default | Description | Effect |
| loadingStickmanColor | string | Theme default | Stickman animation color | Changes the color of the loading animation character |
| loadingBackgroundColor | string | Theme default | Background color | Sets the loading screen background color |
| loadingTextColor | string | Theme default | Text color | Sets the color of loading text and messages |
SDK Support:
- Swift: Direct support via
IStyleclass (hex values with #) - Flutter: Direct support via
IStyleclass (hex values without #) - Kotlin: Direct support via
IStyledata class (hex values without #) - React Native/React: Direct support via
styleobject (hex values without #) - HTML/JS: Direct in postData object
Native Loading Overlay (Swift):
The SDK displays a native overlay on top of the WebView until content is fully loaded, preventing users from seeing a blank screen.
- Overlay automatically hides when
KinestexLoadedmessage is received - Overlay color priority:
1. Uses loadingBackgroundColor if set (hex color with #)
2. Uses white (#FFFFFF) if style = "light"
3. Uses black (#000000) if style = "dark" (default)
Style Properties:
| Property | Type | Default | Description |
| style | String? | "dark" | Base theme style ("dark" or "light") |
| themeName | String? | null | Custom theme name |
| loadingStickmanColor | String? | null | Color for the loading animation stickman (hex without #) |
| loadingBackgroundColor | String? | null | Background color during loading (hex without #) |
| loadingTextColor | String? | null | Text color during loading (hex without #) |
1// Direct SDK support via IStyle class
2let customStyle = IStyle(
3 style: "dark",
4 loadingBackgroundColor: "#1A1A2E",
5 loadingStickmanColor: "#FF6B00",
6 loadingTextColor: "#FFFFFF"
7)
8
9kinestex.createWorkoutView(
10 workout: "Fitness Lite",
11 user: user,
12 style: customStyle,
13 isLoading: $isLoading,
14 onMessageReceived: { /* ... */ }
15)Motion Tracking Settings
Control AI-powered motion tracking behavior.
| Parameter | Type | Description | Effect |
| motionTrackingSettingOn | boolean | Show motion tracking toggle | Displays the AI tracking on/off setting |
| motionTrackingEnabled | boolean | Enable motion tracking | Session-level override for AI tracking (clears localStorage preference) |
Note: When motionTrackingEnabled is explicitly set, it clears any saved user preference and uses the provided value for the session.
1// Via customParams
2kinestex.createView(
3 customParams: [
4 "motionTrackingSettingOn": true,
5 "motionTrackingEnabled": true
6 ]
7)Debug & Development
Parameters for debugging and development purposes.
| Parameter | Type | Default | Description | Effect |
| showDebugRecording | boolean | false | Show debug recording UI | Displays recording controls for debugging |
| showNetworkDebugTool | boolean | - | Show network debug panel | Displays network request monitoring tool |
| newModelId | string | - | Test model identifier | Loads a specific ML model version for testing |
Note: showDebugRecording can also be enabled via URL parameter ?debug=true
1// Via customParams
2kinestex.createView(
3 customParams: [
4 "showDebugRecording": true,
5 "showNetworkDebugTool": true,
6 "newModelId": "pose_model_v2_beta"
7 ]
8)Custom Workout
Configure custom workout sequences. For complete custom workout implementation, see Custom Integration.
| Parameter | Type | Description | Effect |
| customWorkoutExercises | array | Array of exercise configurations | Defines a custom sequence of exercises with their parameters |
| restSpeeches | string[] | Rest period audio identifiers | Custom audio to play during rest periods |
| currentRestSpeech | string | Current rest speech identifier | Sets the active rest period audio |
| videoURL | string | Custom video URL | URL for custom exercise demonstration video |
Custom Workout Flow:
1. Pass customWorkoutExercises during initial verification
2. Send workout_activity_action: "start" message to begin the workout
3. The system will navigate to the workout flow automatically
1// Via customParams for additional settings
2let customExercises = [
3 WorkoutSequenceExercise(
4 exerciseId: "exercise-id-1",
5 reps: 15,
6 duration: nil,
7 includeRestPeriod: true,
8 restDuration: 20
9 )
10]
11
12kinestex.createCustomWorkoutView(
13 customWorkouts: customExercises, // direct
14 customParams: [
15 "restSpeeches": ["rest_speech_1", "rest_speech_2"],
16 "videoURL": "https://example.com/demo.mp4"
17 ]
18)Workout Activity Actions
Control workout state programmatically via postMessage using the workout_activity_action property.
| Action | Description |
| pause_workout | Pauses the workout (video, timer, and tracking) |
| resume_workout | Resumes a paused workout |
| mute_workout | Mutes all audio (speech, sounds, and music) |
| unmute_workout | Unmutes all audio |
| mute_speech | Mutes only speech feedback (sounds still play) |
| unmute_speech | Unmutes speech feedback |
Note: These actions are sent via postMessage to the KinesteX iframe/webview after the workout has started.
1// Send workout activity action using @State binding
2// First, declare the state variable and pass it to the view:
3// @State var workoutAction: [String: Any]? = nil
4// kinestex.createWorkoutView(..., workoutAction: $workoutAction, ...)
5
6// Pause the workout
7workoutAction = ["workout_activity_action": "pause_workout"]
8
9// Resume the workout
10workoutAction = ["workout_activity_action": "resume_workout"]
11
12// Mute all audio
13workoutAction = ["workout_activity_action": "mute_workout"]
14
15// Unmute all audio
16workoutAction = ["workout_activity_action": "unmute_workout"]
17
18// Mute only speech (sounds still play)
19workoutAction = ["workout_activity_action": "mute_speech"]
20
21// Unmute speech
22workoutAction = ["workout_activity_action": "unmute_speech"]Assessment Configuration
Parameters specific to assessment modes (TUG test, balance tests, etc.). For complete assessment data structures, see Data Points.
| Parameter | Type | Default | Description | Effect |
| tugMinRequiredSpace | number | - | Minimum space requirement | Sets the required distance (in meters) for TUG assessment |
Note: For balance assessments (semitandemstand, fulltandem, sidebysidestand), the system automatically uses the "heavy" MediaPipe model for better accuracy.
1// Via customParams for TUG assessment
2kinestex.createAssessmentView(
3 exercise: "tugtest", // direct
4 customParams: [
5 "tugMinRequiredSpace": 3
6 ]
7)Audio Configuration
Control audio playback settings.
| Parameter | Type | Default | Description | Effect |
| enableM4a | boolean | false | Force M4A audio format | Forces the audio system to use M4A format instead of default |
1// Via customParams
2kinestex.createView(
3 customParams: [
4 "enableM4a": true
5 ]
6)URL Parameters
Some parameters can also be passed via URL query string for HTML/JS integrations:
| URL Parameter | Equivalent Config | Example |
| style | style | ?style=light |
| delegate | defaultDelegate | ?delegate=GPU |
| debug | showDebugRecording | ?debug=true |
URL parameters serve as defaults and can be overridden by parameters passed in the postMessage data.
Complete Example
Here's a comprehensive example combining multiple parameter categories:
1// Complete configuration example
2let kinestex = KinesteXAIKit(
3 apiKey: "YOUR_API_KEY",
4 companyName: "MyFitnessApp",
5 userId: "user_12345"
6)
7
8let user = UserDetails(
9 age: 28,
10 height: 165,
11 weight: 60,
12 gender: .Female,
13 lifestyle: .Active
14)
15
16// Theme & Loading via IStyle class (hex values with #)
17let customStyle = IStyle(
18 style: "dark",
19 loadingBackgroundColor: "#1A1A2E",
20 loadingStickmanColor: "#00FF88",
21 loadingTextColor: "#FFFFFF"
22)
23
24kinestex.createWorkoutView(
25 workout: "Fitness Lite",
26 user: user,
27 style: customStyle,
28 isLoading: $isLoading,
29 // Other customization via customParams
30 customParams: [
31 // Language
32 "language": "es",
33
34 // UI Controls
35 "isOnboarding": false,
36 "hideFeelingDialog": true,
37
38 // Camera
39 "landmarkColor": "#00FF88",
40 "showSilhouette": true,
41 "shouldShowCameraSelector": true,
42
43 // Leaderboard
44 "showLeaderboard": true,
45 "username": "FitUser28"
46 ],
47 onMessageReceived: { message in
48 // Handle messages
49 }
50)Need Help?
Our team is ready to assist with your integration.