AI Gait and Form Analysis From Phone Video
Your training plan has no idea what your body is doing. Runna knows you completed 32km at 5:15/km. Garmin Coach knows your heart rate drifted 9bpm over the last hour. Neither of them knows that by km 28 your right hip was dropping 4° further than it was at km 5, that your cadence had bled from 168 to 161, and that you were landing with your foot 5cm further in front of your hips than you were an hour earlier. That’s the information that actually predicts whether next week’s step-up is a good idea.
A phone, a tripod and an ai running form analysis app will get you most of that for under £100 a year. The catch is that the output is only as good as the 12 seconds of video you feed it, and most of the metrics these apps report are either noise or irrelevant. This page is about separating the two.
What a phone actually sees, and what it’s guessing
Every consumer gait app works the same way underneath. A pose estimation model (usually Google’s MediaPipe/BlazePose, which outputs 33 body landmarks, or a proprietary variant) finds joint centres frame by frame. The app then converts pixel coordinates into angles and distances, smooths them, and hands you a report.
Two consequences follow, and they determine everything else.
First: one camera gives you one plane. A side-on clip can measure knee flexion, trunk lean, foot strike angle, shank angle at contact, and how far in front of your hips you land. It cannot measure pelvic drop, knee valgus, foot crossover or pronation, no matter how confidently the app presents a number. Those live in the frontal plane and need a rear view. If your app gives you a “pronation” score from a sagittal clip, it is extrapolating from a model, not measuring you.
Second: accuracy is mediocre but repeatability is decent. Markerless 2D pose estimation typically lands within about 3-7° of marker-based lab systems on sagittal joint angles, and noticeably worse on anything involving rotation. So the absolute number for your knee flexion at midstance is soft. But if you film the same way twice, the difference between the two clips is far more trustworthy than either value on its own. That’s the whole game: stop chasing correct numbers and start chasing consistent ones.
Here’s roughly what I’d trust from a single 1080p/120fps side-on clip:
| Metric | Trust from side view | Notes |
|---|---|---|
| Cadence | High | Countable by hand; app just automates it |
| Foot strike angle | Medium-high | ±3-4°; sensitive to camera height |
| Overstride (horizontal ankle-to-hip at contact) | Medium-high | ±1.5cm between repeat clips |
| Knee flexion at midstance | Medium | Shorts must be above the knee |
| Trunk lean | Medium | Depends on where the app puts the shoulder marker |
| Vertical oscillation | Medium-low | Compare to your watch, not to other runners |
| Pelvic drop | None | Needs a rear view |
| Pronation | None | Needs a rear view, ideally 240fps |
| “Running economy score” | None | Composite of the above, hiding the errors |
The tools worth paying for
Ochy is the default recommendation and the closest thing to a purpose-built AI running form analysis app for consumers. You film side-on and rear, upload, and get back foot strike angle, cadence, vertical oscillation, knee flexion at midstance, trunk inclination, overstride distance, and a set of flagged “limiting factors” with drills attached. Around £10-13 a month, less annually. The drills are generic, but the measurements are consistent between uploads, which is what you need.
Kinovea is free, Windows only, and is what a physio would use if they weren’t billing you. You import your own clip, step through it frame by frame, and drop angle and distance tools on the video by hand. It’s slow. It’s also the only way to be certain what’s being measured, because you place the joint centres. If an Ochy number looks wrong, Kinovea is how you check it.
Hudl Technique and OnForm sit in the middle: frame-by-frame scrubbing, angle tools, side-by-side comparison of two clips, drawing on top. Neither computes anything automatically. Both have usable free tiers. Side-by-side comparison of a fresh clip against a fatigued one is genuinely the single highest-value feature in any of these apps, and it’s free.
Roll your own if you’re technical. MediaPipe Pose runs on a laptop in Python in about 40 lines, gives you 33 landmarks per frame as normalised coordinates, and you can compute whatever you want from them and dump it to CSV. The advantage isn’t accuracy, it’s that you control the smoothing and you can batch-process 20 clips from the same session without paying per upload.
Worth knowing: Coach’s Eye, which was the standard recommendation for years, was discontinued. If you find a tutorial recommending it, the tutorial is stale, and probably so is the rest of its advice.
Filming is 80% of the result
Two clips of the same runner, filmed from slightly different heights, can differ by 6° on trunk lean. That’s larger than any real change you’ll make in a training block. Camera placement is not a detail, it’s the measurement.
The essentials: film at 1x, never the ultrawide (0.5x on an iPhone barrel-distorts the edges of frame, which is exactly where your foot strikes). Camera at hip height, perpendicular to your path, roughly 5-7m away. Shoot at 120fps minimum, ideally 240fps for rear-view foot contact. Wear shorts above the knee and a fitted top, because the model is finding your hip by looking at your silhouette and a baggy t-shirt makes the hip joint centre wander. Mark a fixed spot on the ground so you’re in the same part of frame every time.
Frame rate matters more than people expect. At 30fps, each frame is 33ms. Stance phase at easy pace is about 240ms, so you get seven frames of ground contact, and initial contact might be a full frame before or after what you see. At 240fps you get roughly 58 frames and can actually identify the exact frame the foot touches down. Foot strike angle measured at 30fps is close to meaningless.
The full setup, including how to get a repeatable rear view without a second person, is covered in how to film your own running gait at home. Do that once, properly, write down the tripod height and the distance, and every future clip becomes comparable.
A worked example: reading a fatigue comparison
Here’s the case that matters for this audience. A 34-year-old on week 9 of a 16-week Runna marathon block, 5K PB 23:30, long run scheduled at 32km. She filmed twice in the same session: km 3, and km 30, both at 5:40/km, same tripod, same spot on the same path.
METRIC km 3 km 30 Δ
------------------------------------------------------
Cadence (spm) 168 161 -7
Foot strike angle (°) +12 +18 +6
Overstride, ankle→hip (cm) 11.0 16.2 +5.2
Knee flex @ midstance (°) 41 47 +6
Trunk lean from vertical (°) 6.1 3.4 -2.7
Vertical oscillation (cm) 9.1 9.8 +0.7
GCT, Garmin HRM-Pro (ms) 252 279 +27
Every one of those changes is larger than the repeat-clip noise floor, and they all tell the same story. Cadence dropped, so step length went up, so she’s reaching further in front of her body. The foot strike angle climbing to +18° with a 5cm increase in overstride means a longer braking impulse on every step. Knee flexion at midstance increasing by 6° is the knee absorbing more load rather than the hip and calf sharing it. The trunk straightening up while hip flexion increases is the classic “sitting in the bucket” pattern: she’s not leaning back exactly, she’s collapsing at the hip while the torso stays upright.
Note what isn’t alarming here. Vertical oscillation moved 0.7cm, which is inside noise. The absolute foot strike angle of +12° is a rearfoot strike, and that is fine, it’s what roughly three quarters of recreational runners do and there’s no good evidence it needs changing.
What this runner does with it: nothing about her foot strike, and nothing about her cadence in isolation. The actionable finding is that her form holds together for roughly two hours and then degrades sharply. So she films again at km 24 the following week to find where the cliff starts. If the numbers are still clean at 24 and wrecked at 30, the plan’s long run progression is outrunning her durability, and the fix is to cap the long run and add a second medium-long run rather than pushing to 35km because the app says so.
That’s the conversation you can now have with your plan. Runna lets you swap or shorten sessions directly. If you’re running a ChatGPT-built plan, paste the two columns in and tell it the drift point, and it has something concrete to work with instead of “long run felt hard.”
Cross-check the video against your watch
Your watch is measuring some of the same things with completely different physics, which makes it a useful independent check.
Garmin’s running dynamics (from an HRM-Pro, HRM-Run, RD Pod, or wrist-based on a Forerunner 265/965 and up) give cadence, ground contact time, GCT balance, vertical oscillation and vertical ratio. Vertical ratio is the one to watch: it’s vertical oscillation divided by stride length, and it’s more informative than oscillation alone, because a tall runner bouncing 9cm while covering 1.4m per step is more efficient than a short runner bouncing 8cm over 1.0m. Garmin’s own distribution puts roughly 6.1% or below in the top 5% of runners and above about 10.1% in the bottom 5%. Most recreational runners sit around 7.5-9%.
GCT balance is worth a look but not worth obsessing over. A persistent 51.5/48.5 split that only appears in the last 40 minutes of long runs is a different signal from a 51.5/48.5 that’s there from step one. The first suggests one side fatiguing faster. The second is probably just how you’re built.
Stryd adds leg spring stiffness, typically 8-14 kN/m for recreational runners, which drops as you fatigue. It’s a reasonable proxy for the same thing the video is showing you, and it has the advantage of being continuous rather than a spot check.
When the video and the watch disagree sharply on cadence, the video is right and your footpod is probably miscounting. When they disagree on vertical oscillation, neither is right in an absolute sense, so pick one and track it over time.
Changes actually worth making
Cadence is the highest-leverage adjustment available, and it’s the only one most runners need. Increasing step rate by around 10% has been shown to cut energy absorbed at the knee by roughly a third and at the hip by about a fifth, mostly by shortening the stride and reducing the braking impulse. If you’re at 162 and chronically dealing with knee pain, target 172-175 for easy runs. Use a metronome app for 10 minutes at the start of each easy run rather than trying to hold it for the whole session, and retest in three weeks.
Contralateral pelvic drop is the metric most strongly associated with running injury in the literature, with one study finding that each additional degree of drop came with substantially higher odds of being in the injured group. It needs a rear view to measure. Typical is 5-8°; consistently above 10° is worth acting on. Conveniently, increasing cadence reduces pelvic drop too, so you often get both for one intervention.
Overstride is worth reducing only if it’s large, meaning your ankle is landing more than about 15cm ahead of your hip at contact at easy pace. And you reduce it by raising cadence, not by consciously landing closer to your body, which just produces a stiff, shuffling gait that costs more energy.
Foot strike is the thing everyone wants to change and almost nobody should. Switching from rearfoot to forefoot moves load off the patellofemoral joint and onto the Achilles and calf. It doesn’t reduce total load. If you have a history of Achilles trouble, that trade is actively bad for you. Leave it alone unless a physio who has watched you run tells you otherwise.
What to ignore
The 180 spm rule comes from a count of elite runners at the 1984 Olympics, running near race pace. Cadence scales with speed and inversely with leg length. A 1.85m runner at 6:00/km pace running 168 is completely normal, and forcing them to 180 makes them worse. Track your own number against your own baseline at a matched pace.
Composite scores (“form score: 74/100”) stack five noisy measurements into one number and lose all the diagnostic information. If your score moves from 74 to 79, you have no idea which input changed or whether it changed at all.
Arm carriage, unless something is grossly wrong, is not where your injuries come from. Neither is mild arm crossover. A slight crossover is often the arm compensating for a pelvis issue, so fixing it at the arm fixes nothing.
Comparing yourself to the elite reference overlay that some apps show you is a category error. Kipchoge’s gait is an output of Kipchoge’s tendons, mass and training age. It’s not a target.
A testing cadence that fits a 16-week block
Film four times across a block, always at a matched pace and in the same spot: week 1 fresh, week 6 at the end of a long run, week 11 at the end of a long run, and week 15 fresh. That’s enough to establish a baseline, catch fatigue drift twice during the heaviest weeks, and confirm you’ve arrived at the taper in better shape than you started.
Two clips per session, back to back, is non-negotiable. The second clip is how you find out what your noise floor is. If your two fresh clips differ by 4° on trunk lean, then a 3° change in week 11 means nothing and you need to stop reading it as a finding.
One change at a time, tested over at least three weeks. If you add cadence work and a hip strength routine in the same fortnight and your pelvic drop improves by 3°, you’ve learned nothing about which one did it, and you’ll keep doing both forever.
If the video shows something structural rather than fatigue-driven, meaning it’s there at km 3 as well as km 30, that’s when the phone has done its job and a human should take over. Bring the clips to the physio. A gait assessment that starts with 16 weeks of your own footage is a much better use of an hour than one that starts with you jogging on a treadmill for 90 seconds in a room you’ve never been in before.
In this section
The supporting pages under this subject.