For app developers

Rep counters

Tag the stages of a rep, export logic your app can run

Scrub to each stage of a movement, tag it, and export a definition that counts reps on any pose engine — no labelled dataset, no model training.

Built from
One clip
Joints available
Shoulders, elbows, hips, knees
Exports as
JSON, plus runtimes in four languages
Runs on
Any pose engine, on-device

How a counter gets built

Play the video, stop at the bottom of the movement, and tag it as a stage. The joint angles at that frame are captured as the stage's requirements. Do the same at the top, and at any point in between that matters, and the sequence of stages is the rep.

Only joints that actually move through the movement end up constraining it, so a counter does not fail because an unrelated limb was somewhere unexpected. A tolerance around each angle decides how strict it is.

The eight-joint boundary

A rep counter works from eight joints: both shoulders, elbows, hips and knees. Those are the joints the pose engine measures as named features, and the ones any pose model can reproduce from twelve standard keypoints. The six calculated joints on the measurement side are deliberately kept out of it: not every pose model has the hand and foot points a wrist or ankle angle needs, and a counter should behave the same on every engine it runs on. The boundary is enforced in the code, not just documented.

What you ship

The export is JSON describing the stages, the angle window each one requires, and the exact definition of every angle — which three keypoints make it, and which way it is measured. Any pose engine that gives you the shoulders, elbows, wrists, hips, knees and ankles can run it: MediaPipe, ML Kit, Apple Vision, MoveNet, or a model of your own. The Export tab hands you a ready-made runtime and an adapter for your engine, in Swift, Kotlin, TypeScript or Python.

With the QuickPose SDK, on iOS or Android, the runtime reads the angles straight out of its features, so there is no pose code to write at all. Either way, counting runs on the device against the camera feed — the video never has to leave the phone.

Next

Try it on one of your own clips.