Bike Fit Analyzer
GitHub

Grade your bike fit — green, amber, red.

Film yourself pedaling for about 20–30 seconds. The analyzer reads your body position in every frame, measures the angles used in bike fitting, and shows you which parts are already right and which ones still need adjusting. Everything runs in your browser. Your video is never uploaded to a server.

Runs in your browser No video upload Open source Any bike
bikefit.doniwirawan.xyz
EXAMPLE · SIDE VIEW · FIT SKELETON 82° 38° 13° SHOULDERKNEEELBOW
Minor tweaks · 5 pedal strokes
Knee at bottom38°  GREEN
Torso from horizontal48°  GREEN
Elbow bend13°  AMBER

How it works

It takes three steps

The analyzer uses Google's MediaPipe Pose, which runs directly in your browser. All the processing happens on your own device, so your video is never sent to a server.

Step 1

Film your ride

Put the camera square to your side, roughly at hip height. Pedal at a steady rhythm for about 20–30 seconds. If you have a turbo trainer, the result is usually more consistent.

Step 2

AI tracks your joints

The AI detects your shoulder, elbow, hip, knee, ankle and other body points in every frame. It automatically picks the side of your body that's most visible and ignores frames that aren't clear enough.

Step 3

Get graded advice

The analyzer then measures the key angles, compares them against the ranges used in bike fitting, and gives you advice in plain language.

dialed borderline fix it

Any bike

Road, MTB, gravel — any bike works

What gets analyzed is your body position, not the bike. You pick the bike you ride (road, MTB, gravel, TT, hybrid, or e-bike) and the target angles adjust to how that bike is normally ridden. The saddle-height measurement uses the same reference on any bike.

Road MTB Gravel TT / Tri Hybrid E-bike

What good looks like

What an ideal fit looks like

A good bike fit isn't only about power. The right position also keeps you comfortable and in control.

Knee at the bottom

30–40°

At the bottom of the stroke your knee should still be slightly bent. Too much bend usually means the saddle is too low. Almost fully straight means it's probably too high, which is when the hips start rocking and the Achilles takes more load.

Back / torso angle

40–50°

Low enough to be efficient and aero, but high enough to breathe and stay comfortable for the length of your ride.

Elbow bend

15–30°

Your elbows shouldn't be locked straight. A slight bend absorbs vibration, makes the bars easier to control, and takes pressure off your hands.

Reach to the bars

80–95°

A reach that fits keeps your shoulders relaxed, without feeling stretched out or cramped.

Stable hips

from the rear

A pelvis that stays level and doesn't rock side to side. Rocking usually means the saddle is a touch too high.

Knee tracking

from the front

Knees driving straight up and down over the pedals, not diving in or bowing out — a cleat and stability cue.

The measurements

Side view — the core fit read

Measurements are taken at the bottom of every pedal revolution, then summarised across all the strokes using the median, so one blurry frame can't affect the final result. Each angle is graded green / amber / red against ranges from the Holmes method and dynamic-fit research.

Side view Primary

The side view is the most accurate, especially for setting saddle height. The reach-related angles are still useful, but they need more careful interpretation because they come from 2D video.

What it measuresTargetReliability
Knee at bottom of strokeSaddle height. Too bent = saddle low; nearly straight = saddle high. You get a specific mm adjustment.30–40°High
Torso from horizontalHow aggressive your position is — front-end height and stack.40–50°Medium
Elbow bendLocked-out vs. softened arms — comfort and shock absorption.15–30°Medium
Shoulder angle (reach)How stretched-out you are to the bars. Treated cautiously — don't swap a stem on one clip.80–95°Soft
Hip at top of strokeInformational reference — depends heavily on flexibility and reach, so it's shown but not graded.85–110°Info

Front & rear views Beta

Treat the front and rear readings as extra hints. For adjustments that really matter, the side view is still the one to rely on.

What it measuresTells youReliability
Knee tracking (FPPA)Frontal-plane projection angle — whether your knee dives in or bows out through the stroke.Cleat / stability cuesBeta
Pelvic rockPeak-to-peak tilt of your hip line across the stroke — often a saddle-too-high sign.Saddle height / stabilityBeta
Left/right symmetryWhether the two sides move evenly.Imbalance cuesBeta

More features

What else the tool does

Three ways to add your clip

  • Drag & drop a video file
  • Browse and pick from your device (.mp4, .mov, .webm)
  • Record straight from your webcam, up to 30 seconds

Your video stays on your device

All the analysis happens directly in your browser, with no upload step.

Fast, with a safe fallback

Uses your GPU via WebGPU when available and automatically falls back to CPU/WASM on older browsers, so it works widely.

Catches bad footage

If your clip isn't square-on — which stretches or squashes the angles, especially reach — it warns you to re-film instead of trusting a skewed reading.

Technology

The technology used

This is what actually runs when you drop in a clip, and the reasoning behind a few of the design choices.

MediaPipe BlazePose

Google's on-device pose model finds 33 body landmarks per frame. It's browser-native and Apache-2.0 licensed — no server, no install.

WebGPU, with WASM fallback

Runs on your GPU where supported for speed, and automatically drops to CPU/WASM elsewhere so it still works.

Deterministic frame stepping

Instead of playing the video, it seeks frame-by-frame so every frame is sampled — no undersampling on slow hardware, no stalls in a background tab.

Median across strokes

Angles are measured at the bottom of every pedal stroke, then the median is taken. One blurry frame or a bad stroke can't move the result.

Near-side lock + visibility gating

It locks onto the leg closest to the camera using confidence over the whole clip, and ignores joints the model isn't sure it can see — so an occluded far leg never poisons the numbers.

Research-based ranges

Green/amber/red thresholds come from the Holmes method and dynamic-fit research, not arbitrary guesses.

How accurate is it, really?

The knee angle is the most consistent measurement, because it's the easiest to read from a side-on video. Torso and elbow are fairly stable too, while the reach-related angles are less precise, because 2D video can't capture depth properly. This is still a proof of concept and it can't replace a 3D bike fitting system. But for finding the clearly visible problems, like a saddle that's too high or too low, it's genuinely useful. If you do adjust something, change one thing at a time and re-film.

FAQ

Frequently asked questions

Is my video uploaded anywhere?

No. All the pose detection and calculation happen directly in your browser, on your own device. Your video is never uploaded to a server, no account is needed, and no data is sent while the analysis runs.

Which bikes does it work with?

Almost any bike — road, mountain (MTB), gravel, TT/triathlon, hybrid, commuter, or e-bike. What gets analyzed is your body position, not the bike. The target angles follow the bike type you select, though very aggressive or very upright positions still have limits when they're only seen through 2D video.

How accurate is it?

Accurate enough to find the obvious problems, like a saddle that's too high or too low. The knee angle is the most consistent measurement, while reach is the least precise. This is still 2D analysis and it can't replace a professional 3D bike fitting.

What kind of clip should I film?

Film about 20–30 seconds with the camera square to your side and at hip height. Pedal as you normally would, at a steady rhythm. With a turbo trainer and enough light, the result is usually more consistent.

Does it work on my phone?

Yes. The analyzer runs in modern browsers on both phones and computers. Devices that support WebGPU will process the video faster, while older ones fall back to the CPU. That can be a little slower, but it still works.

Is it free? Can I see the code?

Yes, it is completely free to use. The full source is published so you can see exactly how it works and check the privacy claims for yourself — read the code on GitHub. It is source-available rather than open source: you are welcome to read it, learn from it and use the tool, but not to build a competing product from it.

Can it replace a professional bike fit?

Not yet. This tool is built to help you run a basic check and find the clearly visible problems, before you adjust anything yourself or go to a bike fitter. For a genuinely precise result — especially if you have pain or specific fitting needs — a professional session is still the better option.

Basic fitting for everyone — not a replacement for a pro fitter

This tool exists to help more people run a basic bike fit check for free. The result is a starting point — something to work from before you adjust things yourself, or before you book a session with a professional fitter. Because it only uses 2D video analysis, it has real limits and it can't replace an in-person bike fitting. If you're a bike fitter, or you have feedback from actually fitting people, I'd be very glad to hear it on GitHub.

Made by

Doni Wirawan

I ride, and I was curious whether basic bike fitting could be made easier to get to. This project came out of that curiosity and turned into something anyone can use for free.

Follow on Strava

Also by the creator

Ascent Analytics

Ascent Analytics

Deeper cycling data and performance analytics to turn your rides into insight. If this fit tool is useful, you'll want to check out Ascent.

Explore Ascent Analytics

Ready to see your numbers?

Drop a clip and get a graded read in under a minute — free, in your browser.

Launch the analyzer