MediaPipe pose landmarks: the 33 BlazePose indices
33 landmarks · from MediaPipe Tasks pose_landmarker.py (branch master) · read 2026-10-17
BlazePose 33 has 33 landmarks, numbered from 0 NOSE to 32 RIGHT_FOOT_INDEX, as the PoseLandmark enum in MediaPipe's Tasks pose_landmarker.py defines them. The sources tie it to MediaPipe Pose Landmarker (Tasks API), MediaPipe Pose (legacy Solutions API) and BlazePose in TF.js pose-detection. 31 of the 33 names match a point in another scheme once lowercased with separators removed; the other 2 stay unmapped. Read from the sources on 2026-10-17.
Models that output it
- MediaPipe Pose Landmarker (Tasks API) · MediaPipe Pose Landmarker: lite vs full vs heavyEvidence: the PoseLandmark enum in MediaPipe Tasks pose_landmarker.py is documented as “The 33 pose landmarks.” (source).
- MediaPipe Pose (legacy Solutions API)Evidence: the PoseLandmark enum in MediaPipe legacy Pose solution pose.py is documented as “The 33 pose landmarks.” (source).
- BlazePose in TF.js pose-detectionEvidence: TF.js pose-detection README says “MediaPipe BlazePose returns 33 keypoints.” (source).
All 33 landmarks
Names are copied exactly from the PoseLandmark enum in MediaPipe's Tasks pose_landmarker.py. The index is the position the source assigns. The last column says whether another scheme on this site spells the same name, by the crosswalk rule.
| Index | Name | Also spelled | Same name in |
|---|---|---|---|
| 0 | NOSE | nose (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, OpenPose BODY_25, OpenPose COCO 18, Apple Vision 2D |
| 1 | LEFT_EYE_INNER | left_eye_inner (TF.js pose-detection constants.ts) | ML Kit 33 |
| 2 | LEFT_EYE | left_eye (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| 3 | LEFT_EYE_OUTER | left_eye_outer (TF.js pose-detection constants.ts) | ML Kit 33 |
| 4 | RIGHT_EYE_INNER | right_eye_inner (TF.js pose-detection constants.ts) | ML Kit 33 |
| 5 | RIGHT_EYE | right_eye (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| 6 | RIGHT_EYE_OUTER | right_eye_outer (TF.js pose-detection constants.ts) | ML Kit 33 |
| 7 | LEFT_EAR | left_ear (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| 8 | RIGHT_EAR | right_ear (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| 9 | MOUTH_LEFT | mouth_left (TF.js pose-detection constants.ts) | Unmapped |
| 10 | MOUTH_RIGHT | mouth_right (TF.js pose-detection constants.ts) | Unmapped |
| 11 | LEFT_SHOULDER | left_shoulder (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 12 | RIGHT_SHOULDER | right_shoulder (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 13 | LEFT_ELBOW | left_elbow (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 14 | RIGHT_ELBOW | right_elbow (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 15 | LEFT_WRIST | left_wrist (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 16 | RIGHT_WRIST | right_wrist (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 17 | LEFT_PINKY | left_pinky (TF.js pose-detection constants.ts) | ML Kit 33 |
| 18 | RIGHT_PINKY | right_pinky (TF.js pose-detection constants.ts) | ML Kit 33 |
| 19 | LEFT_INDEX | left_index (TF.js pose-detection constants.ts) | ML Kit 33 |
| 20 | RIGHT_INDEX | right_index (TF.js pose-detection constants.ts) | ML Kit 33 |
| 21 | LEFT_THUMB | left_thumb (TF.js pose-detection constants.ts) | ML Kit 33 |
| 22 | RIGHT_THUMB | right_thumb (TF.js pose-detection constants.ts) | ML Kit 33 |
| 23 | LEFT_HIP | left_hip (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 24 | RIGHT_HIP | right_hip (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 25 | LEFT_KNEE | left_knee (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 26 | RIGHT_KNEE | right_knee (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 27 | LEFT_ANKLE | left_ankle (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 28 | RIGHT_ANKLE | right_ankle (TF.js pose-detection constants.ts) | ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D |
| 29 | LEFT_HEEL | left_heel (TF.js pose-detection constants.ts) | ML Kit 33, Halpe26, COCO-WholeBody 133 |
| 30 | RIGHT_HEEL | right_heel (TF.js pose-detection constants.ts) | ML Kit 33, Halpe26, COCO-WholeBody 133 |
| 31 | LEFT_FOOT_INDEX | left_foot_index (TF.js pose-detection constants.ts) | ML Kit 33 |
| 32 | RIGHT_FOOT_INDEX | right_foot_index (TF.js pose-detection constants.ts) | ML Kit 33 |
What the sources say about the output
Copied from the sources, whitespace collapsed.
- The pose landmarks detection result from PoseLandmarker, where each vector element represents a single pose detected in the image. (MediaPipe Tasks pose_landmarker.py)
- pose_landmarks: Detected pose landmarks in normalized image coordinates. (MediaPipe Tasks pose_landmarker.py)
- pose_world_landmarks: Detected pose landmarks in world coordinates. (MediaPipe Tasks pose_landmarker.py)
- num_poses: The maximum number of poses can be detected by the PoseLandmarker. (MediaPipe Tasks pose_landmarker.py)
- num_poses: int = 1 (MediaPipe Tasks pose_landmarker.py)
- "pose_world_landmarks" field that contains the pose landmarks in real-world 3D coordinates that are in meters with the origin at the center between hips. (MediaPipe legacy Pose solution pose.py)
- For the
keypoints, x and y represent the actual keypoint position in the image. (TF.js pose-detection README) - For the
keypoints3D, x, y and z represent absolute distance in meters in a 2 x 2 x 2 meter cubic space. The range for each axis goes from -1 to 1 (therefore 2m total delta). The z is always perpendicular to the xy plane that passes the center of the hip, so the coordinate for the hip center is (0, 0, 0). (TF.js pose-detection README) - The README's BlazePose keypoint list continues past 32 with 33: bodyCenter, 34: forehead, 35: leftThumb, 36: leftHand, 37: rightThumb, 38: rightHand; BLAZEPOSE_KEYPOINTS in constants.ts, whose comment says the order "needs to be consistent with the model keypoint result list", stops at 32. (TF.js pose-detection README)
How this list was checked
- MediaPipe Tasks PoseLandmark values run 0 to N-1 in declaration order
- the legacy solutions/pose.py PoseLandmark enum declares the same names at the same values
- TF.js BLAZEPOSE_KEYPOINTS lists the same names in the same order (lowercase)
- the TF.js README's BlazePose keypoint list agrees for every index the enum defines
- 31 of 33 names are shared with another scheme; the rest are listed as unmapped.
Other schemes
Questions
What are the 33 MediaPipe BlazePose landmarks in index order?
The PoseLandmark enum in MediaPipe's Tasks pose_landmarker.py numbers them 0 NOSE, 1 LEFT_EYE_INNER, 2 LEFT_EYE, 3 LEFT_EYE_OUTER, 4 RIGHT_EYE_INNER, 5 RIGHT_EYE, 6 RIGHT_EYE_OUTER, 7 LEFT_EAR, 8 RIGHT_EAR, 9 MOUTH_LEFT, 10 MOUTH_RIGHT, 11 LEFT_SHOULDER, 12 RIGHT_SHOULDER, 13 LEFT_ELBOW, 14 RIGHT_ELBOW, 15 LEFT_WRIST, 16 RIGHT_WRIST, 17 LEFT_PINKY, 18 RIGHT_PINKY, 19 LEFT_INDEX, 20 RIGHT_INDEX, 21 LEFT_THUMB, 22 RIGHT_THUMB, 23 LEFT_HIP, 24 RIGHT_HIP, 25 LEFT_KNEE, 26 RIGHT_KNEE, 27 LEFT_ANKLE, 28 RIGHT_ANKLE, 29 LEFT_HEEL, 30 RIGHT_HEEL, 31 LEFT_FOOT_INDEX, 32 RIGHT_FOOT_INDEX.
Which pose models output MediaPipe BlazePose landmarks?
MediaPipe Pose Landmarker (Tasks API): the PoseLandmark enum in MediaPipe Tasks pose_landmarker.py is documented as “The 33 pose landmarks.”; MediaPipe Pose (legacy Solutions API): the PoseLandmark enum in MediaPipe legacy Pose solution pose.py is documented as “The 33 pose landmarks.”; BlazePose in TF.js pose-detection: TF.js pose-detection README says “MediaPipe BlazePose returns 33 keypoints.” Only models a fetched source ties to this scheme are listed.
How do MediaPipe BlazePose landmarks map to other pose keypoint schemes?
By name only. 31 of the 33 share an identical name, once lowercased with separators removed, with a point in ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, OpenPose BODY_25, OpenPose COCO 18, Apple Vision 2D and Apple Vision 3D; 9 MOUTH_LEFT and 10 MOUTH_RIGHT do not and stay unmapped. A shared row means the names match, not that two models place the point in the same spot.
What coordinates come with MediaPipe BlazePose landmarks?
In the sources' words: “pose_landmarks: Detected pose landmarks in normalized image coordinates.” (MediaPipe Tasks pose_landmarker.py); “pose_world_landmarks: Detected pose landmarks in world coordinates.” (MediaPipe Tasks pose_landmarker.py); “"pose_world_landmarks" field that contains the pose landmarks in real-world 3D coordinates that are in meters with the origin at the center between hips.” (MediaPipe legacy Pose solution pose.py); “For the keypoints, x and y represent the actual keypoint position in the image.” (TF.js pose-detection README); “For the keypoints3D, x, y and z represent absolute distance in meters in a 2 x 2 x 2 meter cubic space. The range for each axis goes from -1 to 1 (therefore 2m total delta). The z is always perpendicular to the xy plane that passes the center of the hip, so the coordinate for the hip center is (0, 0, 0).” (TF.js pose-detection README).
Sources
- MediaPipe Tasks pose_landmarker.py · google-ai-edge/mediapipe, branch master · read 2026-10-17 · sha256 bb49f0c12742
- MediaPipe legacy Pose solution pose.py · google-ai-edge/mediapipe, branch master · read 2026-10-17 · sha256 dcf9bdcfc1f4
- TF.js pose-detection constants.ts · tensorflow/tfjs-models, branch master · read 2026-10-17 · sha256 2463578c8dd9
- TF.js pose-detection README · tensorflow/tfjs-models, branch master · read 2026-10-17 · sha256 805c17684646
Generated by scripts/fetch-pose-keypoints.mjs and compiled by AIFitnessAPI. The sources remain the authority.