For whatever you do next — R, Python, a spreadsheet, a report

Take the data with you

JSON and CSV for everything, with the provenance attached

Angles, landmarks and notes all download as JSON or CSV. Every file records where its numbers came from, what section of the video it covers, and what was done to it.

Formats
JSON and CSV
Angles
Per frame, per joint, with summaries
Landmarks
All 33 points, with depth and visibility where available
Also
Tags CSV, and the overlay video

What is in the files

The angles JSON is the richest single file: per-joint minimum, maximum and range, every frame's angle for every joint, your tags with their timecodes, and a plain-English definition of what each angle actually measures. The angles CSV is the flat version — one row per frame, one column per joint, with a time column.

The landmarks exports carry all thirty-three tracked points per frame, with depth and visibility per point where the engine provides them, in normalised coordinates with the frame size recorded so you can put them back into pixels.

Provenance travels with the numbers

Every file says what it is. Which joints were measured by the engine and which were calculated from the landmarks. Which smoothing filter was applied, with its exact settings, or nothing if the numbers are raw. Which section of the original video the file covers, with the parent's own frame numbers and timecodes rather than a fresh count from zero. Which landmark source was used, and the engine version that produced it.

A file that has been processed and does not say so is a file nobody downstream can check. So a download always tells on itself.

And for the developers

A rep counter exports as JSON any pose engine can run: the stages, the joint angles each one requires, the corrective cues attached to them, and the definition of every angle in terms of body keypoints. The Export tab hands you a ready-made runtime for your engine — QuickPose, Apple Vision, ML Kit, MediaPipe, TensorFlow.js or a COCO-17 model — in Swift, Kotlin, TypeScript or Python.

Next

Try it on one of your own clips.