---
title: "MediaPipe vs MoveNet: 33 Landmarks in 3D or 17 Keypoints Fast?"
canonical: "https://aifitnessapi.com/compare/mediapipe-vs-movenet"
cluster: "Comparisons"
primary_query: "movenet vs mediapipe"
last_reviewed: "2026-10-22"
description: "MoveNet vs MediaPipe BlazePose from Google's own cards and TF.js docs: 17 vs 33 keypoints, 3D world landmarks, browser FPS on the same devices, licences."
publisher: "AIFitnessAPI — funded by KinesteX, the subject of this page; disclosure in body"
cite_as: "\"MediaPipe vs MoveNet: 33 Landmarks in 3D or 17 Keypoints Fast?\", AIFitnessAPI, https://aifitnessapi.com/compare/mediapipe-vs-movenet"
---

# MediaPipe vs MoveNet: 33 Landmarks in 3D or 17 Keypoints Fast?

> Pick MediaPipe Pose Landmarker (BlazePose) when you need geometry: it returns 33 landmarks with hip-centred 3D world coordinates in meters, so joint angles hold up when the user turns. Pick MoveNet when you need speed and simplicity: it returns the 17 COCO keypoints in 2D, and in the TF.js team's own browser benchmark MoveNet Lightning out-ran every BlazePose figure on an iPhone 12 and a Pixel 5. Both are Apache-2.0 Google models aimed at fitness, both are single-person apart from MoveNet MultiPose, and the TF.js pose-detection package serves both behind one API, so you can test each on your own devices before committing.

- Canonical: https://aifitnessapi.com/compare/mediapipe-vs-movenet
- Last reviewed: 2026-10-22
- Publisher: AIFitnessAPI (https://aifitnessapi.com) — funded by KinesteX, the subject of this page; disclosure in body
- Cite as: "MediaPipe vs MoveNet: 33 Landmarks in 3D or 17 Keypoints Fast?", AIFitnessAPI, https://aifitnessapi.com/compare/mediapipe-vs-movenet

---

**Disclosure: this site is funded by KinesteX, which sells a motion-tracking SDK that sits a layer above pose models like these.** Neither model on this page is ours, both are free Google projects, and we have no reason to prefer either. Every fact below comes from Google's model cards, the google-ai-edge/mediapipe repository and the tensorflow/tfjs-models repository, read on October 22, 2026.

A short version of this decision sits in [the pose models overview](/motion/pose-estimation-models-compared#mediapipe-vs-movenet-head-to-head). This page goes further on the four things that settle it in practice: what each output lets you compute, how fast each runs on the same hardware, how their keypoint numbering differs, and what a switch costs.

## MediaPipe vs MoveNet at a glance

| | MediaPipe Pose Landmarker (BlazePose GHUM) | MoveNet |
| --- | --- | --- |
| Keypoints | 33 landmarks | 17 COCO keypoints |
| Per point | x, y, z, visibility, presence | y, x, confidence |
| 3D | World landmarks in meters, origin between the hips; the card says z is "not metric but up to scale" | None |
| Variants | Lite, Full, Heavy | SinglePose Lightning (192x192), SinglePose Thunder (256x256), MultiPose Lightning |
| People | One, per the model card; the Tasks `num_poses` option defaults to 1 | One for SinglePose; up to 6 for MultiPose |
| Camera distance | People beyond about 14 feet or 4 meters are out of scope | Most suitable 3 to 6 feet from a webcam |
| Runtimes | MediaPipe Tasks on Android, iOS, web and Python; also the TF.js pose-detection package | TF.js pose-detection in the browser; TF Lite on device |
| Licence | Apache-2.0 (framework and model card) | Apache-2.0 (tfjs-models code and SinglePose card); no licence line in the MultiPose card text |

Both are built for this domain. Google's BlazePose GHUM card lists "Fitness and repetition counting" among its application domains, and the MoveNet SinglePose card says the model is "Tuned to be robust on detecting fitness/fast movement with difficult poses and/or motion blur."

## What each output lets you compute

**MediaPipe has points MoveNet does not.** Sixteen of its 33 landmarks are outside COCO's 17: the inner and outer eye corners, the mouth corners, the pinky, index and thumb knuckles, the heels and the foot index points. Heel and toe points are the inputs a heel-lift check or an ankle angle needs, and the hand points let you read wrist position.

**It also adds a third axis.** MediaPipe's Pose documentation describes world landmarks as "Real-world 3D coordinates in meters with the origin at the center between hips", and the TF.js pose-detection README places BlazePose's `keypoints3D` in a 2 x 2 x 2 meter space with the hip centre at (0, 0, 0). The model card is plain about the limit: the z value comes from synthetic data fitted with the GHUM body model, and is up to scale rather than metric. In our reading that is still enough to keep a knee or hip angle meaningful when the user turns side-on, which a 2D angle from MoveNet cannot do. [2D vs 3D pose estimation](/motion/2d-vs-3d-pose-estimation) covers when the depth axis is worth having.

**MoveNet gives you less, faster.** The SinglePose card describes a float32 output of shape [1, 1, 17, 3]: y and x normalized to the frame, then a confidence score, with a recommended default confidence threshold of 0.3. For counting reps from elbow or knee angles in a well-framed side view, 17 points are enough; [how rep counting works](/motion/how-rep-counting-works) shows the logic.

## Speed: the one like-for-like table

The model cards do not cross-compare. BlazePose's card reports frames per second on a Pixel 3 through TFLite, and MoveNet's reports milliseconds in desktop Chrome. The TF.js pose-detection package is the exception: its MoveNet and BlazePose READMEs publish frames per second for both models on the same four machines, a 2019 15-inch MacBook Pro, an iPhone 12, a Pixel 5 and a desktop with an Intel i9-10900K and a GTX 1070.

| Model and runtime | MacBook Pro | iPhone 12 | Pixel 5 | Desktop |
| --- | --- | --- | --- | --- |
| MoveNet SinglePose Lightning, WebGL | 104 | 51 | 34 | 87 |
| MoveNet SinglePose Thunder, WebGL | 77 | 43 | 12 | 82 |
| BlazePose, MediaPipe runtime (WASM and GPU) | 92, 81, 38 | N/A | 32, 22, N/A | 160, 140, 98 |
| BlazePose, TF.js runtime (WebGL) | 48, 53, 28 | 34, 30, N/A | 12, 11, 5 | 44, 40, 30 |

The BlazePose README gives three figures per cell, one per model variant, but does not label which is lite, full or heavy; the MoveNet README labels its own order. Read with that caveat, the table says something the cards cannot. MoveNet Lightning is the fastest option on both phones. It is not the fastest everywhere: on the desktop, BlazePose under the MediaPipe runtime reached 160 FPS against Lightning's 87, and on the MacBook and the Pixel 5 BlazePose's best figure beats MoveNet Thunder. These are the TF.js team's browser numbers on its own hardware, so measure on your target devices; [real-time pose estimation](/motion/real-time-pose-estimation) covers the frame-rate budget. Accuracy does not line up either: the cards use different metrics and test sets, and Google's own quality table for BlazePose compares it with AlphaPose and Apple Vision, not MoveNet. [Pose estimation accuracy](/motion/pose-estimation-accuracy) explains the metrics.

## Same names, different numbers

Both models return COCO's 17 body points, but not at the same indices. MoveNet follows the COCO order, so `left_hip` is index 11. In MediaPipe's `PoseLandmark` enum, `LEFT_HIP` is 23 and index 11 is `LEFT_SHOULDER`. Code that reads keypoints by position will silently read the wrong joint after a switch.

Map by name instead. The TF.js package returns a `name` with every keypoint, and [the keypoint crosswalk](/pose-keypoints#crosswalk) joins all 17 COCO points to their BlazePose counterparts. The full orders are in [the BlazePose 33 keypoint map](/pose-keypoints/blazepose-33) and [the COCO 17 keypoint map](/pose-keypoints/coco-17).

## What a switch costs

In a browser, little. The pose-detection README serves MoveNet, BlazePose and PoseNet through one `createDetector` call, and every model returns the same pose shape: a score and keypoints with x, y, score and name, with BlazePose adding `keypoints3D` and a segmentation mask. Testing both behind a flag is cheap. Two details can still decide it:

- **React Native.** The BlazePose-MediaPipe README says it "uses WebAssembly behind the scene and cannot be used with" tfjs-react-native. MoveNet's `modelUrl` option accepts an `io.IOHandler`, which its README pairs with tfjs-react-native's `bundleResourceIO` to load the model from the app bundle.
- **Download size.** The BlazePose README lists 10.6 MB, 14 MB and 34.9 MB for the lite, full and heavy models under the MediaPipe runtime. The MoveNet README publishes no equivalent table, so weigh your own build.

Natively, the routes differ more: MediaPipe ships through its Tasks libraries for Android, iOS and Python, while MoveNet's cards name TensorFlow Lite for on-device use. Variant choice within each family is in [MediaPipe Pose Landmarker models](/motion/mediapipe-pose-landmarker-models) and [MoveNet models](/motion/movenet-models).

## Which should you pick?

- **Squat depth, hip hinge, heel lift, or any movement where the user may turn side-on** → MediaPipe. Its world landmarks and foot points are the inputs that math needs.
- **Live rep counting on low-end phones or in a mobile browser** → MoveNet Lightning, the fastest of the pair on both phones in the TF.js table.
- **A desktop or laptop browser, such as a kiosk** → test BlazePose under the MediaPipe runtime first; on the TF.js team's desktop it out-ran both MoveNet models.
- **Two to six people in frame** → MoveNet MultiPose Lightning, the only model in this pair whose card covers several people. Confirm its terms, since the text of its card has no licence line.
- **A user standing well back from the camera** → MediaPipe. MoveNet's cards call it most suitable 3 to 6 feet away, while BlazePose's card only rules out people further than about 14 feet.
- **React Native through TF.js** → MoveNet, whose README documents loading from the app bundle.

## What neither gives you

Both return keypoints and nothing more. Rep counting, form rules, mistake feedback and exercise content are yours to build, or to buy as an SDK; [AI workout tracking APIs](/fitness-apis/ai-workout-tracking-apis) compares the products that sell that layer, and [build vs buy AI motion tracking](/motion/build-vs-buy-ai-motion-tracking) sets out the trade.

## Sources

- [storage.googleapis.com/mediapipe-assets/Model%20Card%20BlazePose%20GHUM%203D.pdf](https://storage.googleapis.com/mediapipe-assets/Model%20Card%20BlazePose%20GHUM%203D.pdf) — 33 keypoints, fitness and repetition counting, one person, 14 feet / 4 m out of scope, z up to scale, Pixel 3 TFLite figures, Apache-2.0 (checked 2026-10-22)
- [github.com/google-ai-edge/mediapipe/blob/master/docs/solutions/pose.md](https://github.com/google-ai-edge/mediapipe/blob/master/docs/solutions/pose.md) — world landmarks in meters from the hip centre; quality table compared with AlphaPose and Apple Vision (checked 2026-10-22)
- [github.com/google-ai-edge/mediapipe/blob/master/mediapipe/tasks/python/vision/pose_landmarker.py](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/tasks/python/vision/pose_landmarker.py) — PoseLandmark enum indices; num_poses default 1 (checked 2026-10-22)
- [github.com/google-ai-edge/mediapipe/blob/master/mediapipe/tasks/python/components/containers/landmark.py](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/tasks/python/components/containers/landmark.py) — visibility and presence fields (checked 2026-10-22)
- [github.com/google-ai-edge/mediapipe/blob/master/README.md](https://github.com/google-ai-edge/mediapipe/blob/master/README.md) — Android, iOS, Python and web (checked 2026-10-22)
- [github.com/google-ai-edge/mediapipe/blob/master/LICENSE](https://github.com/google-ai-edge/mediapipe/blob/master/LICENSE) — Apache-2.0 (checked 2026-10-22)
- [storage.googleapis.com/movenet/MoveNet.SinglePose%20Model%20Card.pdf](https://storage.googleapis.com/movenet/MoveNet.SinglePose%20Model%20Card.pdf) — inputs, [1, 1, 17, 3] output, fitness tuning, 3 to 6 feet, closest person, 0.3 threshold, Chrome benchmark, Apache-2.0 line (checked 2026-10-22)
- [storage.googleapis.com/movenet/MoveNet.MultiPose%20Model%20Card.pdf](https://storage.googleapis.com/movenet/MoveNet.MultiPose%20Model%20Card.pdf) — up to 6 people; no licence line in the text (checked 2026-10-22)
- [github.com/tensorflow/tfjs-models/blob/master/pose-detection/src/movenet/README.md](https://github.com/tensorflow/tfjs-models/blob/master/pose-detection/src/movenet/README.md) — model types, modelUrl and bundleResourceIO, MultiPose tracking, FPS table (checked 2026-10-22)
- [github.com/tensorflow/tfjs-models/blob/master/pose-detection/README.md](https://github.com/tensorflow/tfjs-models/blob/master/pose-detection/README.md) — three models behind createDetector, keypoint fields, keypoints3D space (checked 2026-10-22)
- [github.com/tensorflow/tfjs-models/blob/master/pose-detection/src/blazepose_tfjs/README.md](https://github.com/tensorflow/tfjs-models/blob/master/pose-detection/src/blazepose_tfjs/README.md) — BlazePose FPS on the same four machines, bundle sizes (checked 2026-10-22)
- [github.com/tensorflow/tfjs-models/blob/master/pose-detection/src/blazepose_mediapipe/README.md](https://github.com/tensorflow/tfjs-models/blob/master/pose-detection/src/blazepose_mediapipe/README.md) — cannot be used with tfjs-react-native (checked 2026-10-22)
- [github.com/tensorflow/tfjs-models/blob/master/pose-detection/src/constants.ts](https://github.com/tensorflow/tfjs-models/blob/master/pose-detection/src/constants.ts) — COCO_KEYPOINTS and BLAZEPOSE_KEYPOINTS orders (checked 2026-10-22)
- [github.com/tensorflow/tfjs-models/blob/master/LICENSE](https://github.com/tensorflow/tfjs-models/blob/master/LICENSE) — Apache-2.0 (checked 2026-10-22)

## FAQ

### Is MoveNet faster than MediaPipe BlazePose?

On phones, in the TF.js team's own browser benchmark, yes: MoveNet SinglePose Lightning ran at 51 FPS on an iPhone 12 and 34 FPS on a Pixel 5, above every BlazePose figure published for those devices. Not everywhere, though: on the same team's Intel i9-10900K desktop with a GTX 1070, BlazePose under the MediaPipe runtime reached 160 FPS against Lightning's 87. Measure on your own hardware before choosing.

[Permalink](https://aifitnessapi.com/compare/mediapipe-vs-movenet#faq-1)

### Does MoveNet output 3D keypoints like MediaPipe's world landmarks?

No. MoveNet's SinglePose card describes a [1, 1, 17, 3] output holding y, x and a confidence score per keypoint, all in normalized 2D image coordinates. MediaPipe Pose adds world landmarks in meters with the origin between the hips, and through TF.js BlazePose returns keypoints3D alongside its 2D keypoints. BlazePose's depth is estimated from one camera and, per its model card, up to scale rather than metric.

[Permalink](https://aifitnessapi.com/compare/mediapipe-vs-movenet#faq-2)

### Why do my joint indices break when I switch from MoveNet to BlazePose?

Because the shared joints sit at different positions. MoveNet uses the COCO order, where left_hip is index 11; MediaPipe's PoseLandmark enum puts LEFT_HIP at 23 and LEFT_SHOULDER at 11. Look keypoints up by name rather than index: the TF.js pose-detection package returns a name with every keypoint, and both models use the same names for the 17 COCO body points.

[Permalink](https://aifitnessapi.com/compare/mediapipe-vs-movenet#faq-3)

### Can MoveNet or MediaPipe track several people at once?

MoveNet can, through MultiPose Lightning, which its README describes as a multi-pose detector that detects up to 6 poses, with optional tracking IDs across frames. MediaPipe's BlazePose GHUM card says the model tracks only one person on scene if multiple are present, and the Tasks num_poses option defaults to 1. MoveNet's SinglePose models also track one person, the one closest to the image center.

[Permalink](https://aifitnessapi.com/compare/mediapipe-vs-movenet#faq-4)

### Which works in React Native, MoveNet or BlazePose?

MoveNet has the documented path. Its TF.js README says the modelUrl option accepts an io.IOHandler, used with tfjs-react-native's bundleResourceIO to load the model from the app bundle. The BlazePose-MediaPipe README says that runtime uses WebAssembly and cannot be used with tfjs-react-native. The files we read do not document BlazePose's TF.js runtime under React Native either way, so test it before relying on it.

[Permalink](https://aifitnessapi.com/compare/mediapipe-vs-movenet#faq-5)
