PoseTracker is a real-time pose estimation SDK and API for fitness and rehab apps. It runs MoveNet on-device on React Native, iOS, Android and the web. Keypoints are free. An optional API key adds rep counting, joint angles and a form score.
Guide: https://www.posetracker.com/news/javascript-react-pose-estimation-sdk
Docs: https://docs.posetracker.com/web-sdks
React Native: https://www.posetracker.com/news/react-native-pose-estimation-expo
Thin React wrapper over @pose-tracker/pose-estimation-web.
Mirrors RN light naming: PoseTrackerProvider, PoseCamera, usePoseTracker.
npm install @pose-tracker/pose-estimation-web-react @pose-tracker/pose-estimation-web @tensorflow/tfjsimport {
PoseTrackerProvider,
PoseCamera,
usePoseTracker,
} from '@pose-tracker/pose-estimation-web-react';
function Screen() {
usePoseTracker({ onKeypoints: (e) => console.log(e.keypoints.length) });
return <PoseCamera style={{ height: 480 }} />;
// Video / image: <PoseCamera source="image" sourceFile={file} />
// or sourceUrl — see docs/MEDIA_SOURCES.md · https://docs.posetracker.com/media-sources
}
export function App() {
return (
<PoseTrackerProvider options={{ model: 'movenet' }}>
<Screen />
</PoseTrackerProvider>
);
}Full guide: https://docs.posetracker.com/external-frames
Optional. Skip <PoseCamera /> and push your own frames. The SDK draws
nothing and returns the same data as the camera flow (keypoints,
posture/placement, counter, form score). See the
pose-estimation-web README
for the rules: one frame in flight, small frames, no mixing with the camera.
const { warmupExternal, startExercise, processFrame } = usePoseTracker({
onCounter: (e) => setReps(e.count),
});
await warmupExternal();
startExercise('squat');
const { dropped, pose, events } = await processFrame({
image: bitmap,
width: bitmap.width,
height: bitmap.height,
timestampMs: performance.now(),
});