FORM CHECK

An AI form check with evidence you can inspect.

Upload one working set. We extract the frame behind each finding, attach a scrub-ready timecode, and package the result as a report link you can share.

MP4 · MOV · WebM · up to 50MB / 30 min · 10 credits per analyzed minute · sign in to run

Run one on this page

The Form Check focus is already selected. Upload a file or paste a YouTube link to start here.

SOURCE
ANALYSIS FOCUS
Form checkLOCKED FOR THIS PAGEInspect movement phases, repeat consistency, visible technique defects, and frame evidence.

Private by default — your video and report are visible only to you, unless you choose to share them.

Not sure it's worth the credits? Signed-in accounts can run the first 60 seconds only, at a lower cost, from the credits dialog.

Film it like this

Camera position, frame rate, and audio directly affect what the pipeline can verify and how precise its timestamps can be.

  1. CAMERA HEIGHT

    Hip to chest height, on something that isn't your hand. A camera that drifts turns every phase boundary into a judgement call.

  2. ANGLE

    Squats: 45° from behind. Deadlift, bench and press: straight side-on. Racket and bat sports: side-on to the contact point, so contact is a silhouette rather than a foreshortened blur.

  3. LOAD

    Use a genuinely challenging weight. A set that never degrades gives the first-rep vs last-rep comparison nothing to compare.

  4. FRAME RATE

    60fps if your phone offers it. Our frame extractor tops out at 60fps, so that is the finest video grid available — about 17ms per frame. At 30fps you get about 33ms. Shooting 240fps slo-mo does not buy you more than the 60fps ceiling here.

  5. SOUND — DON'T MUTE IT

    The millisecond on a contact fault comes from the audio, not the picture. No audio track means no onsets, which means the contact and breathing checks have nothing to anchor to and quietly don't fire.

WHY A WEB TOOL AND NOT AN APP

Your report is a link. That is the entire point.

Most form-check apps keep the result inside the app. This run finishes on a report URL with annotated frames and timecodes, ready to share with a coach or training group.

  1. 01

    Finish a run

    When the analysis completes, your browser lands on the report's own address. You don't publish it or toggle anything — the address exists from the moment the run starts.

  2. 02

    Copy the link

    Hit Copy link at the top of the report. The link opens for anyone you send it to: no account, no sign-in.

  3. 03

    Paste it back

    Into the r/formcheck thread, the group chat, your coach's DMs. They open the same annotated frames at the same timecodes you are looking at, and can argue with a specific frame instead of a vibe.

The report uses a random 16-character id and does not appear in a public directory. Search engines are also instructed not to index report pages. Anyone with the link can open it, so share it only with people you trust.

What we measure. What we don't.

Single-camera video cannot produce calibrated joint angles or 3D kinematics without depth data and calibration. We report qualitative faults only when they can be tied to evidence. The two lists below come from the same constants printed in every form-check report.

We measure

  • Phase timing from ffmpeg frame timestamps
  • Defect evidence frames
  • Rep-to-rep rhythm consistency

We don't claim

  • Joint angle measurements
  • Bar/ball speed
  • 3D kinematics
  • Injury diagnosis

Every millisecond in the report traces to a physical frame or audio onset. Models provide whole-second windows; our code derives sub-second times from ffmpeg frame indices or DSP onsets. Findings without a traceable anchor lose their timecode, and phase rows without both boundary frames are omitted.

How a run works

Three passes. The middle one is why we can put a millisecond on a contact at all.

  1. 01

    Scan the whole video

    One low-frame-rate pass over everything: which exercise this is, how many working sets, roughly how many reps, whether a coach is audible, and where every impact sound falls. This pass may only answer in whole seconds — it is looking for places to come back to, not producing final numbers.

  2. 02

    Drill into the suspicious windows

    We reopen the video at each window and extract real frames — up to 60fps, up to 16 frames per window, across up to 8 windows. Impact windows are re-centred on the nearest audio onset before the frames are cut, because a model's guess at "around 0:42" can miss the contact by more than the window is wide. The onset millisecond is then matched to the frame the model picked as contact, within a 50ms tolerance; when nothing lands inside it, the drill is recorded as unbound rather than fudged.

  3. 03

    Assemble the report

    Faults, a phase-timing table, and the annotated evidence frames. Assembly is deterministic and suspicious of its own model: anything carrying a timecode outside the set of milliseconds we physically produced is stripped before it reaches you.

The checks a form-check run can fire

These five identifiers are the checks used by the pipeline. A silent clip can trigger two; a coached set with audible breathing can trigger all five.

CHECKFIRES WHENWHAT IT PRODUCES
S1_IMPACTEvery impact sound the scan pass hears — plates touching down, bat or racket on ball, foot strike.The first frame where contact is visible, with a box drawn on the contact point, carrying the audio onset millisecond pinned to that exact frame — or marked unbound when no onset lands within tolerance.
S2_CUEOnly when a coach or training partner is audible in the clip.One line per cue: the cue quoted verbatim, whether it was executed, and the frame index the call was made on.
S3_BREATHOnly when breathing is audible — which in practice needs a mic near the lifter, not one three metres away.A verdict on whether the breathing pattern fits the phases: match, mismatch, or inconclusive. This is the one check that gets a real audio-and-video clip instead of stills.
FATIGUE_FIRSTAlways — the first working reps of the first set.Phase decomposition and comparable markers: torso angle tendency, depth reached, bar or implement path drift, tempo as frame counts per phase.
FATIGUE_LASTAlways — the last working reps of the last set.The same markers on the other end of the session, so the two can be read against each other. Note that the comparison itself feeds the fault list — the report does not print a separate first-set-vs-last-set table today.

Two of these five depend entirely on your audio track. Mute the clip, or film from far enough away that the mic hears nothing, and S1 and S3 have nothing to anchor to — you still get a report, it just loses the part that makes it worth more than a slow-motion replay.

Per-movement capture notes

The pipeline is not hard-coded per exercise — the scan pass names the movement itself. What does change per movement is where to stand and whether there is a contact sound worth pinning to.

MOVEMENTCAMERACONTACT SOUNDPHASE VOCABULARY
Barbell squat45° from behindWeak — plates rattle at the turnaroundsetup / descent / bottom / ascent / lockout
DeadliftSide-on, full body in frameStrong — plates touch down every repsetup / pull / lockout / descent
Bench pressSide-on, slightly above bar heightModerate — bar-to-chest contactsetup / descent / chest / press / lockout
Tennis forehand or serveSide-on to the contact pointStrong and clean — ball on stringsbackswing / contact / follow-through
Basketball jump shotSide-on or 45°Release is silent — only the rim gives a soundgather / rise / release / follow-through

Phase names come out of the model's own decomposition, so yours may read a little differently. The rule that does not bend: a phase row appears only when both of its boundaries exist as frames we actually extracted. A boundary we couldn't pin drops the row instead of estimating it.

Real reports from this page

These cards come from completed pipeline runs. Open one to inspect the full report and its source evidence.

VIEW FULL REPORT
SOURCE 2160pSTOCK FOOTAGE

Barbell deadlift · form check

Barbell deadlift · form check00:00:00.000

Controlled conventional deadlift execution with stable spinal neutrality and clean lockout throughout the repetition.

FINDINGS

  • 00:00:03.180infoSynchronized Concentric Pull

    Torso angle opens smoothly as the barbell tracks vertically close to the shins past the knees with synchronized hip and knee extension.

  • 00:00:04.700infoUpright Lockout Posture

    Athlete reaches complete hip and knee extension at the top of the pull with upright spinal alignment and no excessive lumbar hyperextension.

  • 00:00:06.251infoControlled Eccentric Lowering and Impact

    Barbell achieves floor contact under controlled eccentric tension while maintaining braced trunk positioning and neutral spine alignment.

PHASE TIMING

setup (rep 1)00:00:00.48400:00:00.984
concentric (rep 1)00:00:03.18000:00:03.780
ascent (rep 1)00:00:04.18000:00:04.700

EVIDENCE

During this first-set sample of the deadlift concentric…
00:00:03.180
The suspicion of form breakdown during descent is refuted…
00:00:06.251
DURATION
00:06
DRILLS
4
FRAMES
12
FINDINGS
4
SOURCE
3840x2160

Pexels License · Tima Miroshnichenko / Pexels

VIEW FULL REPORT
SOURCE 2160pSTOCK FOOTAGE

Golf drive · form check

Golf drive · form check00:00:00.000

Clean driver swing mechanics highlighted by stable spine angle and complete weight transfer onto lead side.

FINDINGS

  • 00:00:02.967infoClean Club-to-Ball Contact Off Tee

    The clubhead struck the teed golf ball cleanly with the golfer retaining forward trunk lean and head position behind the strike zone as the trail heel lifted into weight transfer.

  • 00:00:05.467infoControlled Post-Shot Balance and Club Lowering

    Following swing completion, the golfer held a balanced finish on the lead leg and lowered the club with upright posture without stepping out of stance.

PHASE TIMING

downswing (rep 1)00:00:02.68000:00:02.960
follow-through (rep 1)00:00:02.96000:00:03.280
post-shot balance (rep 1)00:00:05.46700:00:06.467

EVIDENCE

Suspicion refuted: the golfer demonstrates clean swing…
00:00:02.680
Impact is confirmed at frame 6, where the clubhead strikes…
00:00:02.967
DURATION
00:06
DRILLS
4
FRAMES
12
FINDINGS
3
SOURCE
4096x2160

Pexels License · Ryan Parkland / Pexels

VIEW FULL REPORT
SOURCE 1080pSTOCK FOOTAGE

Barbell squat · form check

Barbell squat · form check00:00:00.000

Consistent squat depth and torso stability maintained across all repetitions.

FINDINGS

  • 00:00:01.180infoConsistent Full Depth and Controlled Ascent

    During the first repetition, the athlete hits full depth with the hip crease below knee level and completes a stable concentric ascent to full lockout with vertical bar tracking.

  • 00:00:05.480infoStable Footing and Torso Angle on Final Repetition

    On the final repetition descent, the athlete maintains a neutral spine, stable torso inclination, and firmly planted heels without ankle collapse or forward torso drop into the hole.

PHASE TIMING

concentric (rep 1)00:00:01.18000:00:01.780
descent (rep 3)00:00:05.48000:00:06.080

EVIDENCE

First repetition baseline established: the athlete reaches…
00:00:01.180
Suspicion of fatigue-induced form breakdown is refuted as…
00:00:05.480
DURATION
00:06
DRILLS
2
FRAMES
6
FINDINGS
2
SOURCE
1920x1080

Pexels License · Harvey Tan Villarino / Pexels

Sample reports — every card links to the real report it was taken from, analyzed with this tool.

Form check questions

Is there a free AI form check?
New accounts start with free credits — enough to see a real report with real evidence frames before you pay for one. After that a run costs 10 credits per analyzed minute, or 4 if we could only deliver scan-level findings. Partial minutes round up. No subscription.
Do you measure my knee angle or bar speed in degrees and metres per second?
No, and we won't. Measuring a joint angle from one handheld camera needs depth information your phone's rear camera doesn't hand over, plus a calibration step nobody performs. Tools printing "142° knee flexion" from a bedroom video are printing a number, not measuring one. We describe technique qualitatively — "knees cave inward", "bar drifts forward" — pinned to a frame you can check yourself.
What can I upload?
MP4, MOV or WebM, up to 50MB and 30 minutes. One or two working sets is the right amount — a whole gym session mostly spends credits on rest periods.
Do I need to film in 240fps slow motion?
No — and it helps less than you'd expect. Our frame extractor tops out at 60fps, the finest video grid a run can use, about 17ms between frames. The sharper number on a contact fault doesn't come from the picture anyway: it comes from the audio onset, detected at roughly 23ms resolution, then pinned to the contact frame.
Which exercises does it cover — squat, deadlift, bench, tennis, golf?
There is no per-exercise model to support or not support. The first pass identifies the movement from the video itself and the drills are written around what it found, so a barbell squat, a tennis forehand and a boxing combination go through the same machinery. What differs is how much there is to pin: a clear contact sound buys sharper timecodes than silence.
Can I send the report to my coach?
Yes — hit Copy link at the top of the report and send it over. It opens for anyone with the link: no account, no app.
Does it work if the video has no sound?
It runs, but loses its best trick. Impact detection and the breathing check are both driven by the audio track — no audio means no onsets, so those checks don't fire and every millisecond comes from the frame grid alone. If you can only send silent video, shoot 60fps to keep that grid fine.
How is this different from just posting on r/formcheck?
It isn't a replacement — it's what you post. Instead of a raw clip and "how's my depth", you post a link where the depth question already has a timecode, a frame and a box on it. People can then disagree with something specific, and it comes back in minutes.
Will it tell me if I'm injured or about to be?
No. Injury diagnosis is on the "we don't claim" list above and it stays there. The report describes what the video shows, at frames you can check. What that means for your body is a conversation for someone qualified who can look at you, not at 40 seconds of footage.
Can I use a YouTube link instead of uploading?
You can, and it goes through the same frame extraction as an upload. For form check we'd still rather have the file: the fetched copy is capped at 480p — enough to watch a bar path drift, thin for anything finer. If the fetch fails, the run falls back to scan-level findings at the lower scan-only rate.

One set. One evidence-backed report.

Upload your video with the Form Check focus already selected.

Run a form check