Skip to content
AF

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.

IndexNameAlso spelledSame name in
0NOSEnose (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, OpenPose BODY_25, OpenPose COCO 18, Apple Vision 2D
1LEFT_EYE_INNERleft_eye_inner (TF.js pose-detection constants.ts)ML Kit 33
2LEFT_EYEleft_eye (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D
3LEFT_EYE_OUTERleft_eye_outer (TF.js pose-detection constants.ts)ML Kit 33
4RIGHT_EYE_INNERright_eye_inner (TF.js pose-detection constants.ts)ML Kit 33
5RIGHT_EYEright_eye (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D
6RIGHT_EYE_OUTERright_eye_outer (TF.js pose-detection constants.ts)ML Kit 33
7LEFT_EARleft_ear (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D
8RIGHT_EARright_ear (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D
9MOUTH_LEFTmouth_left (TF.js pose-detection constants.ts)Unmapped
10MOUTH_RIGHTmouth_right (TF.js pose-detection constants.ts)Unmapped
11LEFT_SHOULDERleft_shoulder (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
12RIGHT_SHOULDERright_shoulder (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
13LEFT_ELBOWleft_elbow (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
14RIGHT_ELBOWright_elbow (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
15LEFT_WRISTleft_wrist (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
16RIGHT_WRISTright_wrist (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
17LEFT_PINKYleft_pinky (TF.js pose-detection constants.ts)ML Kit 33
18RIGHT_PINKYright_pinky (TF.js pose-detection constants.ts)ML Kit 33
19LEFT_INDEXleft_index (TF.js pose-detection constants.ts)ML Kit 33
20RIGHT_INDEXright_index (TF.js pose-detection constants.ts)ML Kit 33
21LEFT_THUMBleft_thumb (TF.js pose-detection constants.ts)ML Kit 33
22RIGHT_THUMBright_thumb (TF.js pose-detection constants.ts)ML Kit 33
23LEFT_HIPleft_hip (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
24RIGHT_HIPright_hip (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
25LEFT_KNEEleft_knee (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
26RIGHT_KNEEright_knee (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
27LEFT_ANKLEleft_ankle (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
28RIGHT_ANKLEright_ankle (TF.js pose-detection constants.ts)ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D, Apple Vision 3D
29LEFT_HEELleft_heel (TF.js pose-detection constants.ts)ML Kit 33, Halpe26, COCO-WholeBody 133
30RIGHT_HEELright_heel (TF.js pose-detection constants.ts)ML Kit 33, Halpe26, COCO-WholeBody 133
31LEFT_FOOT_INDEXleft_foot_index (TF.js pose-detection constants.ts)ML Kit 33
32RIGHT_FOOT_INDEXright_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

Generated by scripts/fetch-pose-keypoints.mjs and compiled by AIFitnessAPI. The sources remain the authority.