@pose-tracker/pose-estimation-web 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _tensorflow_tfjs from '@tensorflow/tfjs';
2
2
 
3
3
  /** Bumped with package.json version (keep in sync). */
4
- declare const SDK_VERSION = "0.1.0";
4
+ declare const SDK_VERSION = "0.3.0";
5
5
  declare const SDK_NAME: "posetracker-web";
6
6
 
7
7
  /**
@@ -132,6 +132,8 @@ interface EngineBundleDescriptor {
132
132
  minSdkVersion: string;
133
133
  /** True when the version sent in `localVersions.engine` is already current. */
134
134
  upToDate?: boolean;
135
+ /** Which interpreter this descriptor is. Absent on older backends = v3. */
136
+ channel?: 'v3' | 'v4';
135
137
  }
136
138
  interface PoseRuntimePartDescriptor {
137
139
  /** Download URL of this part (`GET /api/sdk/pose-runtime?part=...&v=...`). */
@@ -172,6 +174,11 @@ interface ConfigureRequest {
172
174
  poseRuntime?: string | null;
173
175
  engine?: string | null;
174
176
  };
177
+ /**
178
+ * Which remote engine to download. Default / omitted = v3 (production).
179
+ * `v4` is opt-in (heuristic catalog: squat, shoulder_roll, …).
180
+ */
181
+ engineChannel?: 'v3' | 'v4';
175
182
  }
176
183
  interface PlanInfo {
177
184
  plan: string;
@@ -202,6 +209,13 @@ interface SdkManifest {
202
209
  expiresAt: number;
203
210
  }
204
211
 
212
+ /** Opt-in remote engine channel. Default is production V3. */
213
+ type EngineChannel = 'v3' | 'v4';
214
+ /** Movements that exist only in the V4 catalog (not in V3 FSM / Strapi). */
215
+ declare const V4_ONLY_EXERCISE_IDS: readonly ["shoulder_roll", "shoulder_deep_breath", "chair_forward_fold"];
216
+ declare function normalizeEngineChannel(raw?: string | null): EngineChannel;
217
+ declare function requiresEngineV4(exerciseId: string): boolean;
218
+
205
219
  /**
206
220
  * Handshake client: `configure(apiToken)` → Strapi `SdkManifest`.
207
221
  * Same endpoint as RN light; `targetPlatform: 'web'`, `sdkName: posetracker-web`.
@@ -213,6 +227,11 @@ interface ConfigureOptions {
213
227
  poseModelProfile?: PoseModelProfile;
214
228
  locale?: string;
215
229
  localVersions?: ConfigureRequest['localVersions'];
230
+ /**
231
+ * Opt-in V4 heuristic engine. Default `'v3'` (production FSM).
232
+ * Set `'v4'` at init — the handshake downloads `engine-v4.bundle.js`.
233
+ */
234
+ engine?: EngineChannel;
216
235
  }
217
236
  declare class ConfigureError extends Error {
218
237
  readonly code: 'invalid_token' | 'quota_exceeded' | 'network' | 'internal';
@@ -310,7 +329,7 @@ type PoseTrackerStatus = 'idle' | 'configuring' | 'downloading' | 'warming' | 'r
310
329
  * restarting the camera pipeline, via `configure()` or a preload retry.
311
330
  */
312
331
  type PoseTrackerMode = 'keypoints-only' | 'full-engine';
313
- type InitializationStep = 'configuring' | 'downloading' | 'warming' | 'accessing_webcam' | 'loading_pose_model' | 'ready';
332
+ type InitializationStep = 'configuring' | 'downloading' | 'warming' | 'accessing_webcam' | 'loading_media' | 'loading_pose_model' | 'ready';
314
333
  interface InitializationEvent {
315
334
  type: 'initialization';
316
335
  /**
@@ -359,7 +378,7 @@ interface ErrorEvent {
359
378
  /** Unknown exercise id (WebView parity: `invalid_exercise`). */
360
379
  | 'invalid_exercise'
361
380
  /** jump_analysis requires `userHeightCm` (WebView parity). */
362
- | 'jump_analysis_missing_height' | 'model_load_failed' | 'engine_load_failed' | 'integrity_check_failed' | 'webview_error' | 'device_too_slow' | 'backend_fallback_wasm' | 'camera_denied' | 'camera_unavailable' | 'internal';
381
+ | 'jump_analysis_missing_height' | 'model_load_failed' | 'engine_load_failed' | 'integrity_check_failed' | 'webview_error' | 'device_too_slow' | 'backend_fallback_wasm' | 'camera_denied' | 'camera_unavailable' | 'media_load_failed' | 'media_unavailable' | 'internal';
363
382
  message: string;
364
383
  }
365
384
  /**
@@ -716,6 +735,13 @@ interface PoseTrackerEngine {
716
735
  createSession(options: EngineSessionOptions, emit: EventSink): EngineSession;
717
736
  /** Engine >= 1.2.0: custom exercises shipped in the bundle (jump analysis…). */
718
737
  listCustomExercises?(): CustomExerciseDescriptor[];
738
+ /** Engine V4 catalog (opt-in channel). Absent on V3 bundles. */
739
+ listExercises?(): Array<{
740
+ id: string;
741
+ displayName: string;
742
+ type: string;
743
+ description?: string;
744
+ }>;
719
745
  /** Engine >= 1.2.0: start a custom exercise session (placement + jump_* events). */
720
746
  createCustomSession?(options: CustomSessionOptions, emit: EventSink): EngineSession;
721
747
  }
@@ -811,6 +837,52 @@ declare class UsageTracker {
811
837
  private enqueue;
812
838
  }
813
839
 
840
+ /**
841
+ * Input source for pose estimation (camera / uploaded video / still image).
842
+ * Default remains camera for quickstart compatibility.
843
+ */
844
+ type PoseSourceType = 'camera' | 'video' | 'image';
845
+ type CameraFacingMode = 'user' | 'environment';
846
+ interface CameraPoseSource {
847
+ type: 'camera';
848
+ facingMode?: CameraFacingMode;
849
+ }
850
+ /**
851
+ * Uploaded or remote video. `src` may be a URL string, File/Blob (object URL),
852
+ * or an existing HTMLVideoElement (SDK uses it as the frame source).
853
+ */
854
+ interface VideoPoseSource {
855
+ type: 'video';
856
+ src: string | File | Blob | HTMLVideoElement;
857
+ /** Autoplay when attached. Default true. */
858
+ autoplay?: boolean;
859
+ /** Loop the file. Default true for continuous inference demos. */
860
+ loop?: boolean;
861
+ muted?: boolean;
862
+ }
863
+ /**
864
+ * Still image — single-shot estimate (re-run via `analyze()`).
865
+ */
866
+ interface ImagePoseSource {
867
+ type: 'image';
868
+ src: string | File | Blob | HTMLImageElement | ImageBitmap;
869
+ }
870
+ type PoseSource = CameraPoseSource | VideoPoseSource | ImagePoseSource;
871
+ /** Narrow helper for prop-style APIs (`source` + `sourceUrl` / `sourceFile`). */
872
+ interface PoseSourceProps {
873
+ source?: PoseSourceType;
874
+ sourceUrl?: string;
875
+ sourceFile?: File | Blob;
876
+ facingMode?: CameraFacingMode;
877
+ }
878
+ /** Frame types accepted by detector adapters. */
879
+ type PoseEstimateInput = HTMLVideoElement | HTMLImageElement | HTMLCanvasElement | ImageBitmap;
880
+ declare function normalizePoseSource(source?: PoseSource | PoseSourceType | null, extras?: {
881
+ sourceUrl?: string;
882
+ sourceFile?: File | Blob;
883
+ facingMode?: CameraFacingMode;
884
+ }): PoseSource;
885
+
814
886
  /**
815
887
  * Online pose-model catalog (web) — mirrors RN light `poseModels.ts`.
816
888
  *
@@ -954,6 +1026,20 @@ interface PoseTrackerClientOptions extends ConfigureOptions {
954
1026
  onDiagnostic?: (message: string) => void;
955
1027
  /** Alias of preload coldStart when using start(). Default full on camera screens. */
956
1028
  coldStart?: ColdStartMode;
1029
+ /**
1030
+ * Input source. Default `{ type: 'camera' }` (webcam).
1031
+ * Use `{ type: 'video', src }` or `{ type: 'image', src }` for file / URL / element.
1032
+ */
1033
+ source?: PoseSource | PoseSourceType;
1034
+ /** Convenience with `source: 'video' | 'image'` (string / File / Blob). */
1035
+ sourceUrl?: string;
1036
+ sourceFile?: File | Blob;
1037
+ /**
1038
+ * Still-image inference. Default `single`: one full-frame SinglePose pass
1039
+ * (no EMA / no ROI). `tracked`: treat analyze() as video frames — EMA +
1040
+ * previous-pose crop so each shot can refine the last skeleton.
1041
+ */
1042
+ stillMode?: 'single' | 'tracked';
957
1043
  }
958
1044
  /** @deprecated Prefer PoseTrackerClientOptions — kept for vanilla DX. */
959
1045
  type PoseTrackerOptions = PoseTrackerClientOptions;
@@ -989,6 +1075,10 @@ declare class PoseTrackerClient {
989
1075
  private opts;
990
1076
  private shell;
991
1077
  private stream;
1078
+ private poseSource;
1079
+ private objectUrlRevoke;
1080
+ private estimateInput;
1081
+ private imageShotPending;
992
1082
  private adapter;
993
1083
  private resolved;
994
1084
  private running;
@@ -1013,6 +1103,8 @@ declare class PoseTrackerClient {
1013
1103
  getAccelerationDiagnostics(): AccelerationDiagnostics;
1014
1104
  getResolvedModel(): ResolvedPoseModel;
1015
1105
  getColdStartMode(): ColdStartMode;
1106
+ /** Active pose input source (`camera` | `video` | `image`). */
1107
+ getSource(): PoseSource;
1016
1108
  addEventListener(listener: PoseTrackerEventListener): () => void;
1017
1109
  on(type: PoseTrackerEvent['type'] | '*', listener: PoseTrackerEventListener): () => void;
1018
1110
  addMessageListener(listener: ClassicMessageListener): () => void;
@@ -1024,14 +1116,35 @@ declare class PoseTrackerClient {
1024
1116
  */
1025
1117
  preload(options?: PreloadOptions): Promise<void>;
1026
1118
  warmup(options?: PreloadOptions): Promise<void>;
1027
- /** Mount + load model + open camera + start loop (camera-screen convenience). */
1119
+ /**
1120
+ * Mount + load model + open source + start inference.
1121
+ * Camera / video stream continuously; image runs a single shot (re-run with {@link analyze}).
1122
+ */
1028
1123
  start(): Promise<void>;
1124
+ /**
1125
+ * Switch input source. Stops the current media, attaches the new source, and
1126
+ * restarts the loop when previously running.
1127
+ */
1128
+ setSource(source: PoseSource | PoseSourceType, extras?: {
1129
+ sourceUrl?: string;
1130
+ sourceFile?: File | Blob;
1131
+ facingMode?: 'user' | 'environment';
1132
+ }): Promise<void>;
1133
+ /**
1134
+ * Re-run pose estimation on the current still image (no-op for camera/video
1135
+ * while the loop is already running — for those, call {@link start}).
1136
+ */
1137
+ analyze(): Promise<Pose | null>;
1029
1138
  stop(): void;
1139
+ private stopMediaOnly;
1030
1140
  dispose(): Promise<void>;
1031
1141
  configure(apiToken?: string): Promise<boolean>;
1032
1142
  getAvailableExercises(): ExerciseConfig[];
1143
+ getEngineChannel(): EngineChannel;
1144
+ private v4ExerciseConfig;
1033
1145
  getAvailableCustomExercises(): CustomExerciseDescriptor[];
1034
1146
  startExercise(exerciseId: string, options?: StartExerciseOptions): void;
1147
+ private beginEngineSession;
1035
1148
  private startCustomExercise;
1036
1149
  stopExercise(): void;
1037
1150
  getCurrentExerciseId(): string | null;
@@ -1042,8 +1155,13 @@ declare class PoseTrackerClient {
1042
1155
  private doPreload;
1043
1156
  private ensureColdStartMode;
1044
1157
  private ensureAdapter;
1045
- private ensureCamera;
1158
+ private ensureSource;
1159
+ private scheduleReveal;
1160
+ private attachVideoSource;
1161
+ private attachImageSource;
1046
1162
  private beginLoop;
1163
+ private frameReady;
1164
+ private runOneFrame;
1047
1165
  private loop;
1048
1166
  private resolveSkeletonFromOptions;
1049
1167
  private resolveManifestOnce;
@@ -1078,6 +1196,9 @@ interface Letterbox {
1078
1196
  drawH: number;
1079
1197
  vw: number;
1080
1198
  vh: number;
1199
+ /** Window top-left in original media pixels (still-image video simulation). */
1200
+ originX?: number;
1201
+ originY?: number;
1081
1202
  }
1082
1203
  interface DetectorFrameResult {
1083
1204
  /** Raw model output used for skeleton mapping (MoveNet: Float32Array length 51). */
@@ -1095,18 +1216,24 @@ interface DetectorFrameResult {
1095
1216
  letterbox: Letterbox;
1096
1217
  }
1097
1218
  type Float32ArrayLike = ArrayLike<number>;
1219
+
1098
1220
  interface PoseDetectorAdapter {
1099
1221
  readonly modelId: string;
1100
1222
  load(): Promise<void>;
1101
1223
  /**
1102
- * Run one frame. `video` must have non-zero dimensions.
1224
+ * Run one frame. Input must have non-zero dimensions
1225
+ * (HTMLVideoElement, HTMLImageElement, canvas, or ImageBitmap).
1103
1226
  * Returns null when the frame should be skipped.
1104
1227
  */
1105
- estimate(video: HTMLVideoElement, options: {
1228
+ estimate(input: PoseEstimateInput, options: {
1106
1229
  facingMode: 'user' | 'environment';
1107
1230
  displayWidth: number;
1108
1231
  displayHeight: number;
1232
+ /** EMA across frames. Default true. Stills may pass true to simulate a short clip. */
1233
+ temporalSmooth?: boolean;
1109
1234
  }): Promise<DetectorFrameResult | null>;
1235
+ /** Optional: clear temporal filters when the media source changes. */
1236
+ resetTemporal?(): void;
1110
1237
  dispose(): void;
1111
1238
  }
1112
1239
  interface CreateAdapterContext {
@@ -1126,6 +1253,9 @@ declare class MoveNetGraphAdapter implements PoseDetectorAdapter {
1126
1253
  private offscreen;
1127
1254
  private offCtx;
1128
1255
  private smoothed;
1256
+ private lastVideoKps;
1257
+ private stillPass;
1258
+ private inferLb;
1129
1259
  private letterbox;
1130
1260
  constructor(ctx: CreateAdapterContext);
1131
1261
  getBackend(): string | null;
@@ -1133,11 +1263,14 @@ declare class MoveNetGraphAdapter implements PoseDetectorAdapter {
1133
1263
  private poseCanvasCtx;
1134
1264
  private prepareInput;
1135
1265
  private smooth;
1136
- estimate(video: HTMLVideoElement, options: {
1266
+ estimate(input: PoseEstimateInput, options: {
1137
1267
  facingMode: 'user' | 'environment';
1138
1268
  displayWidth: number;
1139
1269
  displayHeight: number;
1270
+ temporalSmooth?: boolean;
1140
1271
  }): Promise<DetectorFrameResult | null>;
1272
+ /** Clear EMA state (call when the still / clip changes). */
1273
+ resetTemporal(): void;
1141
1274
  dispose(): void;
1142
1275
  }
1143
1276
  /** Map video keypoints → object-fit:cover display pixels for drawing. */
@@ -1162,11 +1295,14 @@ declare class BlazePoseAdapter implements PoseDetectorAdapter {
1162
1295
  constructor(_ctx: CreateAdapterContext);
1163
1296
  getBackend(): string | null;
1164
1297
  load(): Promise<void>;
1165
- estimate(video: HTMLVideoElement, options: {
1298
+ estimate(input: PoseEstimateInput, options: {
1166
1299
  facingMode: 'user' | 'environment';
1167
1300
  displayWidth: number;
1168
1301
  displayHeight: number;
1302
+ temporalSmooth?: boolean;
1169
1303
  }): Promise<DetectorFrameResult | null>;
1304
+ /** Clear cached ROI / landmark filters (call when the still changes). */
1305
+ resetTemporal(): void;
1170
1306
  dispose(): void;
1171
1307
  }
1172
1308
 
@@ -1266,6 +1402,8 @@ declare function drawSkeleton(ctx: CanvasRenderingContext2D, kps: DrawKeypoint[]
1266
1402
  interface DomShell {
1267
1403
  root: HTMLElement;
1268
1404
  video: HTMLVideoElement;
1405
+ /** Still-image element for `source: image` mode. */
1406
+ image: HTMLImageElement;
1269
1407
  canvas: HTMLCanvasElement;
1270
1408
  boot: HTMLElement;
1271
1409
  bootMsg: HTMLElement;
@@ -1274,10 +1412,12 @@ interface DomShell {
1274
1412
  placement: HTMLElement;
1275
1413
  setBootMessage(text: string, isError?: boolean): void;
1276
1414
  setCameraVisible(visible: boolean): void;
1415
+ /** Show video preview, still image, or neither (boot only). */
1416
+ setMediaMode(mode: 'video' | 'image' | 'none'): void;
1277
1417
  setWatermarkVisible(visible: boolean): void;
1278
1418
  setHud(text: string, debug: boolean): void;
1279
1419
  setPlacementVisible(visible: boolean, paddingPercent?: number): void;
1280
- applyMirror(facingMode: 'user' | 'environment'): void;
1420
+ applyMirror(facingMode: 'user' | 'environment' | 'none'): void;
1281
1421
  destroy(): void;
1282
1422
  }
1283
1423
  declare function mountDomShell(host: HTMLElement, options?: {
@@ -1322,4 +1462,4 @@ declare function findExerciseByIdOrAlias<T extends {
1322
1462
  id: string;
1323
1463
  }>(exerciseId: string, exercises: readonly T[]): T | undefined;
1324
1464
 
1325
- export { type AccelerationDiagnostics, type AccelerationState, type AngleValue, type AnglesEvent, BRAND_COLORS, BlazePoseAdapter, type BlazePoseModelType, COCO_KEYPOINT_NAMES, COMBINED_REFERENCE_EXERCISE_MESSAGE, type CameraOptions, type ClassicMessageListener, type ClassicNativeMessage, type CocoKeypointName, type ColdStartMode, ConfigureError, type ConfigureOptions, type ConfigureRequest, type CounterEvent, type CounterFormScore, type CustomExerciseDescriptor, type CustomSessionOptions, DEFAULT_BASE_URL, DEFAULT_FEATURES, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, DEFAULT_SKELETON, DEFAULT_SKELETON_DEFINITION, type DetectorFrameResult, type DiagnosticListener, EXERCISE_ALIASES, type EngineBundleDescriptor, type EngineLoadResult, EngineLoader, type EngineLoaderOptions, type EngineSession, type EngineSessionFeatures, type EngineSessionOptions, type ErrorEvent, type EventSink, type ExerciseConfig, type ExerciseSummaryEvent, FREE_PLAN_FEATURES_MESSAGE, type FetchSkeletonOptions, type FileStore, type FormGrade, type FormScoreEvent, INVALID_TOKEN_MESSAGE, type InferenceRuntime, type InitialPosture, type InitializationEvent, type InitializationStep, type JumpCalibrationEvent, type JumpDiscardedEvent, type JumpHeightEvent, type JumpResultEvent, type JumpStartedEvent, type JumpSummaryEntry, type JumpSummaryEvent, type KeyValueStore, type Keypoint, type KeypointName, type KeypointsEvent, type MinGrade, type ModelDescriptor, type ModelFormat, type ModelsByProfile, MoveNetGraphAdapter, type MovementDefinition, type MovementRecommendation, type MovementStep, type MovementStepParameter, ONLINE_POSE_DETECTION_VERSION, ONLINE_TFJS_VERSION, POSETRACKER_LOGO_URL, type PerformanceWarningEvent, type PlanInfo, type Pose, PoseCamera, PoseCamera_mount, type PoseDetectionModule, type PoseDetectorAdapter, type PoseModelAlias, type PoseModelKind, type PoseModelProfile, type PoseRuntimeDescriptor, type PoseRuntimePartDescriptor, type PoseTracker, type PoseTrackerCallbacks, PoseTrackerClient, type PoseTrackerClientOptions, type PoseTrackerEngine, type PoseTrackerEvent, type PoseTrackerEventListener, type PoseTrackerEventType, type PoseTrackerFeatures, type PoseTrackerMode, type PoseTrackerOptions, type PoseTrackerStatus, type PostureEvent, type PreloadOptions, type ProgressionEvent, type QualityChangedEvent, type RecommendationsEvent, type ReferenceMovementDescriptor, type RepSummary, type ResolvePoseModelOptions, type ResolvedFeatures, type ResolvedPoseModel, type RuntimeDownloadProgressEvent, SDK_NAME, SDK_VERSION, type SdkManifest, type SkeletonAnglesStyle, type SkeletonCirclesStyle, type SkeletonDefinition, SkeletonFetchError, type SkeletonLinesStyle, type StartExerciseOptions, type StatsEvent, type TfModule, type TfjsCdnUrls, TrackError, type TrackRequest, type TrackResponse, UsageTracker, type UsageTrackerOptions, type VisibleHipsInfo, type WarningEvent, configure, createLocalFileStore, createLocalKeyValueStore, createMemoryFileStore, createPoseAdapter, createPoseTracker, createWebFileStore, defaultPoseDetectionCdnUrl, defaultTfjsCdnUrls, drawSkeleton, featureNotSupportedMessage, fetchSkeletonDefinition, findExerciseByIdOrAlias, freeBlockedFeatures, initWebGlBackend, isPaidPlan, mapVideoKeypointsToDisplay, mountDomShell, openCameraStream, resolveExerciseName, resolveFeatures, resolvePoseDetection, resolvePoseModel, resolveTf, shouldShowWatermark, stopMediaStream, toClassicNativeMessage };
1465
+ export { type AccelerationDiagnostics, type AccelerationState, type AngleValue, type AnglesEvent, BRAND_COLORS, BlazePoseAdapter, type BlazePoseModelType, COCO_KEYPOINT_NAMES, COMBINED_REFERENCE_EXERCISE_MESSAGE, type CameraFacingMode, type CameraOptions, type CameraPoseSource, type ClassicMessageListener, type ClassicNativeMessage, type CocoKeypointName, type ColdStartMode, ConfigureError, type ConfigureOptions, type ConfigureRequest, type CounterEvent, type CounterFormScore, type CustomExerciseDescriptor, type CustomSessionOptions, DEFAULT_BASE_URL, DEFAULT_FEATURES, DEFAULT_LOADING_TEXT, DEFAULT_MOVENET_LIGHTNING_URL, DEFAULT_SKELETON, DEFAULT_SKELETON_DEFINITION, type DetectorFrameResult, type DiagnosticListener, EXERCISE_ALIASES, type EngineBundleDescriptor, type EngineChannel, type EngineLoadResult, EngineLoader, type EngineLoaderOptions, type EngineSession, type EngineSessionFeatures, type EngineSessionOptions, type ErrorEvent, type EventSink, type ExerciseConfig, type ExerciseSummaryEvent, FREE_PLAN_FEATURES_MESSAGE, type FetchSkeletonOptions, type FileStore, type FormGrade, type FormScoreEvent, INVALID_TOKEN_MESSAGE, type ImagePoseSource, type InferenceRuntime, type InitialPosture, type InitializationEvent, type InitializationStep, type JumpCalibrationEvent, type JumpDiscardedEvent, type JumpHeightEvent, type JumpResultEvent, type JumpStartedEvent, type JumpSummaryEntry, type JumpSummaryEvent, type KeyValueStore, type Keypoint, type KeypointName, type KeypointsEvent, type MinGrade, type ModelDescriptor, type ModelFormat, type ModelsByProfile, MoveNetGraphAdapter, type MovementDefinition, type MovementRecommendation, type MovementStep, type MovementStepParameter, ONLINE_POSE_DETECTION_VERSION, ONLINE_TFJS_VERSION, POSETRACKER_LOGO_URL, type PerformanceWarningEvent, type PlanInfo, type Pose, PoseCamera, PoseCamera_mount, type PoseDetectionModule, type PoseDetectorAdapter, type PoseEstimateInput, type PoseModelAlias, type PoseModelKind, type PoseModelProfile, type PoseRuntimeDescriptor, type PoseRuntimePartDescriptor, type PoseSource, type PoseSourceProps, type PoseSourceType, type PoseTracker, type PoseTrackerCallbacks, PoseTrackerClient, type PoseTrackerClientOptions, type PoseTrackerEngine, type PoseTrackerEvent, type PoseTrackerEventListener, type PoseTrackerEventType, type PoseTrackerFeatures, type PoseTrackerMode, type PoseTrackerOptions, type PoseTrackerStatus, type PostureEvent, type PreloadOptions, type ProgressionEvent, type QualityChangedEvent, type RecommendationsEvent, type ReferenceMovementDescriptor, type RepSummary, type ResolvePoseModelOptions, type ResolvedFeatures, type ResolvedPoseModel, type RuntimeDownloadProgressEvent, SDK_NAME, SDK_VERSION, type SdkManifest, type SkeletonAnglesStyle, type SkeletonCirclesStyle, type SkeletonDefinition, SkeletonFetchError, type SkeletonLinesStyle, type StartExerciseOptions, type StatsEvent, type TfModule, type TfjsCdnUrls, TrackError, type TrackRequest, type TrackResponse, UsageTracker, type UsageTrackerOptions, V4_ONLY_EXERCISE_IDS, type VideoPoseSource, type VisibleHipsInfo, type WarningEvent, configure, createLocalFileStore, createLocalKeyValueStore, createMemoryFileStore, createPoseAdapter, createPoseTracker, createWebFileStore, defaultPoseDetectionCdnUrl, defaultTfjsCdnUrls, drawSkeleton, featureNotSupportedMessage, fetchSkeletonDefinition, findExerciseByIdOrAlias, freeBlockedFeatures, initWebGlBackend, isPaidPlan, mapVideoKeypointsToDisplay, mountDomShell, normalizeEngineChannel, normalizePoseSource, openCameraStream, requiresEngineV4, resolveExerciseName, resolveFeatures, resolvePoseDetection, resolvePoseModel, resolveTf, shouldShowWatermark, stopMediaStream, toClassicNativeMessage };