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.


ParameterTypeDescription
userIdstringUnique identifier for the user. Must be at least 2 characters. Used for tracking progress, analytics, and personalization
companystringCompany name associated with the API key. Determines theme defaults and content access
keystringAPI key for authentication. Required for all API calls and content access

SDK Support: All platforms support these as direct parameters.

Required Parameters Setup
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.


ParameterTypeDescriptionEffect
agenumberUser's age in yearsAffects workout intensity recommendations and exercise selection
genderstringUser's gender (male, female, other)Affects BMI calculations and content personalization
heightnumberUser's height (in cm or inches based on locale)Used for BMI calculation and exercise calibration
weightnumberUser's weight (in kg or lbs based on locale)Used for BMI calculation and calorie estimations
fitness_levelstringUser's fitness levelDetermines workout difficulty and progression
lifestylestringUser's lifestyle type (e.g., sedentary, active)Affects personalized plan recommendations
body_partsstring[]Target body parts for workoutsFilters and prioritizes exercises targeting specific areas
plan_typestringType of workout planDetermines the structure and focus of generated plans

SDK Support: Most platforms have direct support via UserDetails object or postData fields.

User Profile Configuration
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.


ParameterTypeDefaultDescriptionEffect
style"dark""dark"Applies style to the UIChanges the entire UI color scheme to dark or light modeTheme mode
themeNamestringCompany nameCustom theme identifierLoads 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 IStyle class passed to view creation methods (hex values with #)
  • Flutter: Direct support via IStyle class passed to view creation methods
  • Kotlin: Direct support via IStyle data class passed to view creation methods (hex values without #)
  • React Native/React: Direct support via style object in postData
  • HTML/JS: Direct in postData object
Theme Configuration
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.


ParameterTypeDefaultDescription
languagestring"en"Language code for localization
voiceActorstring-Specific voice actor for audio feedback
content_genderstring-Gender preference for content/instructors shown

Supported Languages:


CodeLanguageRTL Support
enEnglishNo
esSpanishNo
frFrenchNo
deGermanNo
itItalianNo
ptPortugueseNo
ruRussianNo
arArabicYes
heHebrewYes
hiHindiNo
bnBengaliNo
idIndonesianNo
daDanishNo
elGreekNo

SDK Support: Requires customParams on most platforms.

Language Configuration
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.


ParameterTypeDescriptionEffect
planCstringPlan configuration identifierSpecifies which workout plan to load
exercisesstring[]Array of exercise identifiersDefines the specific exercises to include in a session
currentExercisestringCurrent exercise identifierSets the active exercise for camera component
completed_exercisesstring[]Previously completed exercisesAllows resuming a workout from a specific point
start_from_exercisestringExercise to start fromSkips to a specific exercise in the workout
start_from_restbooleanStart from rest periodIf true, begins at rest screen before the specified exercise
resetPlanProgressbooleanReset all plan progressClears all saved progress for the user's plans
on_start_urlstringURL to call on workout startWebhook URL triggered when workout begins

Note: Exercise IDs can be retrieved from the Content API.

Workout Configuration
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.


ParameterTypeDefaultDescriptionEffect
shouldAskCamerabooleantruePrompt for camera permissionShows camera permission dialog before starting
shouldShowCameraSelectorbooleanfalseShow camera selection UIAllows user to choose between available cameras
shouldShowOpenCameraSettingsbooleanfalseShow settings buttonDisplays button to open device camera settings
cameraIdstring-Specific camera device IDForces use of a specific camera
cameraLabelstring-Camera label for displayShows custom label for the selected camera
minPoseDetectionConfidencenumber0.5Minimum detection confidence (0-1)Lower values detect poses more easily but may be less accurate
minTrackingConfidencenumber0.5Minimum tracking confidence (0-1)Affects how persistently poses are tracked between frames
minPosePresenceConfidencenumber0.5Minimum presence confidence (0-1)Threshold for determining if a person is in frame
mediapipeModel"full" "heavy" "light""full"MediaPipe model variantlight: Faster, less accurate. full: Balanced. heavy: Most accurate, slower
defaultDelegate"GPU" "CPU"AutoProcessing delegateForces GPU or CPU processing for pose detection
landmarkColorstring"#14FF00"Pose landmark colorChanges the color of skeleton overlay (hex color)
showSilhouettebooleantrueShow body silhouetteDisplays silhouette guide overlay during exercises
includePoseDataboolean-Include raw pose dataSends pose landmark data in postMessage events
includePoseBordersbooleantrueShow pose boundary guidesDisplays borders indicating optimal pose positioning
includeRealtimeAccuracyboolean-Send real-time accuracyBroadcasts accuracy scores in real-time via postMessage
videoFit"contain""cover"Camera feed display modeWhen 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

Camera & Pose Detection Settings
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.


ParameterTypeDefaultDescriptionEffect
isHideHeaderMainbooleanfalseHide main headerRemoves the top navigation header
hideFeelingDialogbooleanfalseHide feeling dialogSkips the post-workout feeling prompt
hideMusicIconboolean-Hide music controlRemoves the music toggle button
hideMistakesFeedbackboolean-Hide mistake feedbackDisables on-screen form correction prompts
showModalWarmUpboolean-Show warm-up modalDisplays warm-up recommendation before workout
showSettingsboolean-Show settings buttonDisplays settings access in the UI
isDrawingPoseboolean-Enable pose drawingActivates skeleton visualization on camera feed
isOnboardingbooleantrueEnable onboarding flowShows/hides the initial onboarding experience
hideCompletionOverlaybooleanfalseHide workout completion overlaySkips the workout completion summary screen shown at the end of a workout
preventGestureControlbooleanfalseDisable gesture controlPrevents users from pausing and resuming workouts using hand gestures
UI Controls Configuration
1// Via customParams
2kinestex.createView(
3    customParams: [
4        "isHideHeaderMain": true,
5        "hideFeelingDialog": true,
6        "hideMusicIcon": true,
7        "hideMistakesFeedback": false,
8        "isOnboarding": false,
9        "hideCompletionOverlay": true,
10        "preventGestureControl": true
11    ]
12)

Challenge Mode

Configure challenge-specific parameters for direct challenge launches.


ParameterTypeDescriptionEffect
exercisestringChallenge exercise identifierSpecifies which exercise to use for the challenge
countdownnumberCountdown duration in secondsSets the preparation countdown before challenge starts
repsnumberTarget repetition countSets the goal number of reps for the challenge
Challenge Mode Configuration
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.


ParameterTypeDescriptionEffect
challenges_homearrayCustom challenges/games for home screenDefines 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:

PropertyTypeRequiredDescription
idstringYesExercise ID for challenges, or game ID for games
namestringYesDisplay name shown in the UI
isGamebooleanYesSet to true for games, false for challenges

Available Games:

  • balloonpop - Balloon Pop game
  • aliensquatshooter - Alien Squat Shooter game
  • colorchase - Color Chase game

Combination Options:

  • Two challenges (both with isGame: false)
  • Two games (both with isGame: true)
  • One challenge + one game (mixed isGame values)

Note: You can pass any exercise ID as a challenge. When specifying a game, ensure isGame is set to true.

Complete UX Home Page Customization
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.


ParameterTypeDescriptionEffect
showLeaderboardbooleanShow leaderboard UIEnables/disables leaderboard visibility
usernamestringDisplay name for leaderboardSets the user's name shown on leaderboards

Note: Username is automatically saved to localStorage for future sessions.

Leaderboard Configuration
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).


ParameterTypeDefaultDescriptionEffect
loadingStickmanColorstringTheme defaultStickman animation colorChanges the color of the loading animation character
loadingBackgroundColorstringTheme defaultBackground colorSets the loading screen background color
loadingTextColorstringTheme defaultText colorSets the color of loading text and messages

SDK Support:

  • Swift: Direct support via IStyle class (hex values with #)
  • Flutter: Direct support via IStyle class (hex values without #)
  • Kotlin: Direct support via IStyle data class (hex values without #)
  • React Native/React: Direct support via style object (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 KinestexLoaded message 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:


PropertyTypeDefaultDescription
styleString?"dark"Base theme style ("dark" or "light")
themeNameString?nullCustom theme name
loadingStickmanColorString?nullColor for the loading animation stickman (hex without #)
loadingBackgroundColorString?nullBackground color during loading (hex without #)
loadingTextColorString?nullText color during loading (hex without #)
Loading Screen Customization
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.


ParameterTypeDescriptionEffect
motionTrackingSettingOnbooleanShow motion tracking toggleDisplays the AI tracking on/off setting
motionTrackingEnabledbooleanEnable motion trackingSession-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.

Motion Tracking Settings
1// Via customParams
2kinestex.createView(
3    customParams: [
4        "motionTrackingSettingOn": true,
5        "motionTrackingEnabled": true
6    ]
7)

Debug & Development

Parameters for debugging and development purposes.


ParameterTypeDefaultDescriptionEffect
showDebugRecordingbooleanfalseShow debug recording UIDisplays recording controls for debugging
showNetworkDebugToolboolean-Show network debug panelDisplays network request monitoring tool
newModelIdstring-Test model identifierLoads a specific ML model version for testing

Note: showDebugRecording can also be enabled via URL parameter ?debug=true

Debug & Development Settings
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.


ParameterTypeDescriptionEffect
customWorkoutExercisesarrayArray of exercise configurationsDefines a custom sequence of exercises with their parameters
restSpeechesstring[]Rest period audio identifiersCustom audio to play during rest periods
currentRestSpeechstringCurrent rest speech identifierSets the active rest period audio
videoURLstringCustom video URLURL 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

Custom Workout Parameters
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.


ActionDescription
pause_workoutPauses the workout (video, timer, and tracking)
resume_workoutResumes a paused workout
mute_workoutMutes all audio (speech, sounds, and music)
unmute_workoutUnmutes all audio
mute_speechMutes only speech feedback (sounds still play)
unmute_speechUnmutes speech feedback

Note: These actions are sent via postMessage to the KinesteX iframe/webview after the workout has started.

Workout Activity Actions
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.


ParameterTypeDefaultDescriptionEffect
tugMinRequiredSpacenumber-Minimum space requirementSets 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.

Assessment Configuration
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.


ParameterTypeDefaultDescriptionEffect
enableM4abooleanfalseForce M4A audio formatForces the audio system to use M4A format instead of default
Audio Configuration
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 ParameterEquivalent ConfigExample
stylestyle?style=light
delegatedefaultDelegate?delegate=GPU
debugshowDebugRecording?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:

Complete Configuration Example
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.

Contact Support