Your camera counts the reps and scores your form.

Point your phone at yourself and move. The engine marks 33 points of your body every frame, counts every clean rep, grades your form out of 100 and corrects it while you move.

or browse 386 moves first
Free. No account to start, no ads, no video ever uploaded.
0+1
reps counted live, of this figure

What the camera sees: joints, angles, a full clean cycle. Not a picture of you.

full workout with sets and scores →

OKAY BUT HOW? · IN HUMAN WORDS

is it chatgpt?no. no llm, no api call, no server thinking for you - it's trigonometry running at camera speed. your joints make angles, angles make reps.
okay, not chatgpt - then how do you do it?every move is a spec: which joint drives it, what angle counts as bottom, what counts as lockout, how fast a clean rep should travel. each frame the engine computes your joint angles from 3d coordinates, smooths the jitter, tracks which phase you're in and only counts the rep when the full cycle closes - with hysteresis, so half-hearted wobbles don't count twice.
then what sees me?mediapipe's pose landmarker - an open, already-trained model running on your gpu, on your device. it returns 33 landmarks per frame (x, y, z + visibility), including metric 3d world coordinates, so angles stay honest even when you turn toward the camera.
does it use my photos to train your model?no. each frame goes from your camera to the pose model, lands as a float buffer in wasm memory, gets its math done and is thrown away. nothing is stored, nothing is sent, nothing learns from you - there is no training pipeline to feed you into even if i wanted one.
then how did you train it?i didn't train - i engineered. the pose model came pre-trained; on top of it sits my own hand-written engine: angle thresholds, phase state machines and scoring curves per move, unit-tested in native c++ (92 tests) and calibrated move by move on the person in the photos up there.
who counts?my own engine, written in c++ and compiled to webassembly. landmarks are written straight into the wasm heap once per frame and passed by pointer - one boundary call per frame, so it keeps up with your camera instead of your patience.
why doesn't it upload?there's no upload code in the entire codebase - the math happens in your browser's sandbox. the strictest privacy policy is the one physics enforces.
the score?every rep gets graded 0-100 from three signals: depth (how far you actually went), tempo (how long the rep took vs. the spec) and control (how steady the angle curve was). honest, never mean.
so why is it free?that's exactly why. no llm api, no gpu cluster, no server bill - i don't have to pay for anything, so you don't have to pay for me.

Why would this be worth paying for?

It does the three jobs of a personal trainer.

A trainer in a gym charges by the hour to do exactly this. Here the same three jobs run in your browser, and the price stays zero because no server does the work.

How does it work?

No chatbot, no server. Geometry, running on your phone.

It reads you.

An open pose model marks 33 points of your body every frame, in 3d, on your own screen.

It measures the angle.

A squat is your knee angle closing and opening. The engine watches that curve, not a picture of you.

It counts the rep.

Only a complete cycle through the full range of motion increments the counter.

It forgets the frame.

The math is done, the frame is gone. Nothing stored, nothing sent, nothing kept.

Hand-written in C++, compiled to wasm to keep pace with your camera. 92 native tests. No API bill, which is exactly why it stays free.

So where does the video go?

Nowhere!

There is no upload button, because there is no upload code. The camera feed lives for a blink in your browser and is gone. It cannot leak, because it never exists anywhere but here.

real output

squat · set 3 / 12 reps · tempo 2-1-2
knee angle min 94° · target <110° 
knee cave on reps 4, 7, 11

The whole loop

From browsing to a counted set, in four steps.

  1. Browse 386 moves with zero equipment: pilates, ballet, yoga, bodyweight.
  2. Save the ones you like into a shortlist that is actually yours.
  3. Drop them onto the days you train. Reps for counted moves, seconds for holds.
  4. Open the camera and do it. The engine counts, scores and corrects. Everything reversible, same session.

Open the camera. Do one rep.

No class to book, no account to make, nobody watching. A tab opens in the room you already train in, and the counting starts.