Apple Vision 3D body pose: the 17 joint names
17 joints · from VNHumanBodyPose3DObservation.JointName · read 2026-10-17
Apple Vision 3D has 17 named joint constants, topHead to spine, on VNHumanBodyPose3DObservation.JointName; Apple gives them no numeric index. The sources tie it to Apple Vision VNDetectHumanBodyPose3DRequest. 13 of the 17 names match a point in another scheme once lowercased with separators removed; the other 4 stay unmapped. Read from the sources on 2026-10-17.
Models that output it
- Apple Vision VNDetectHumanBodyPose3DRequest · Apple Vision body poseEvidence: VNDetectHumanBodyPose3DRequest says “This request generates a collection of VNHumanBodyPose3DObservation objects that describe the position of each body the request detects.” (source).
All 17 joints
Names are copied exactly from the static joint-name constants of VNHumanBodyPose3DObservation.JointName. Apple gives these constants no numeric index, so the rows follow the order of Apple’s documentation. The last column says whether another scheme on this site spells the same name, by the crosswalk rule.
| Name | Apple’s group | The source’s description | Same name in |
|---|---|---|---|
| topHead | Getting the Head Joint Names | A joint name that represents the top of the head. | Unmapped |
| centerHead | Getting the Head Joint Names | A joint name that represents the center of the head. | Unmapped |
| centerShoulder | Getting the Arm Joint Names | A joint name that represents the point between the shoulders. | Unmapped |
| leftShoulder | Getting the Arm Joint Names | A joint name that represents the left shoulder. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| rightShoulder | Getting the Arm Joint Names | A joint name that represents the right shoulder. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| leftElbow | Getting the Arm Joint Names | A joint name that represents the left elbow. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| rightElbow | Getting the Arm Joint Names | A joint name that represents the right elbow. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| leftWrist | Getting the Arm Joint Names | A joint name that represents the left wrist. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| rightWrist | Getting the Arm Joint Names | A joint name that represents the right wrist. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| leftHip | Getting the Leg Joint Names | A joint name that represents the left hip. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| rightHip | Getting the Leg Joint Names | A joint name that represents the right hip. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| leftKnee | Getting the Leg Joint Names | A joint name that represents the left knee. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| rightKnee | Getting the Leg Joint Names | A joint name that represents the right knee. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| leftAnkle | Getting the Leg Joint Names | A joint name that represents the left ankle. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| rightAnkle | Getting the Leg Joint Names | A joint name that represents the right ankle. | BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, Apple Vision 2D |
| root | Getting the Root Joint Name | A joint name that represents the point between the left hip and right hip. | Apple Vision 2D |
| spine | Getting the Spine | A joint name that represents the spine. | Unmapped |
What the sources say about the output
Copied from the sources, whitespace collapsed.
- VNHumanBodyPose3DObservation.JointName: The joint names for a 3D body pose. (VNHumanBodyPose3DObservation.JointName)
- This request generates a collection of VNHumanBodyPose3DObservation objects that describe the position of each body the request detects. If the system allows it, the request uses AVDepthData information to improve the accuracy. (VNDetectHumanBodyPose3DRequest)
- pointInImage(_:): Returns a 2D point for the joint name you specify, relative to the input image. (VNHumanBodyPose3DObservation)
- cameraRelativePosition(_:): Returns a position relative to the camera for the body joint you specify. (VNHumanBodyPose3DObservation)
- bodyHeight: The estimated human body height, in meters. (VNHumanBodyPose3DObservation)
- cameraOriginMatrix: A transform from the skeleton hip to the camera. (VNHumanBodyPose3DObservation)
How this list was checked
- no joint constant is marked deprecated
- Apple files the constants under 5 topic groups: Getting the Head Joint Names, Getting the Arm Joint Names, Getting the Leg Joint Names, Getting the Root Joint Name, Getting the Spine
- 13 of 17 names are shared with another scheme; the rest are listed as unmapped.
Apple lists the joint-name type as available from iOS 17.0, iPadOS 17.0, Mac Catalyst 17.0, macOS 14.0, tvOS 17.0 and visionOS 1.0.
Other schemes
Questions
What are the 17 Apple Vision 3D body pose joint names?
Apple documents topHead, centerHead, centerShoulder, leftShoulder, rightShoulder, leftElbow, rightElbow, leftWrist, rightWrist, leftHip, rightHip, leftKnee, rightKnee, leftAnkle, rightAnkle, root and spine, filed under the topic groups Getting the Head Joint Names, Getting the Arm Joint Names, Getting the Leg Joint Names, Getting the Root Joint Name and Getting the Spine. They are named constants with no numeric index.
Which pose models output Apple Vision 3D joints?
Apple Vision VNDetectHumanBodyPose3DRequest: VNDetectHumanBodyPose3DRequest says “This request generates a collection of VNHumanBodyPose3DObservation objects that describe the position of each body the request detects.” Only models a fetched source ties to this scheme are listed.
How do Apple Vision 3D joints map to other pose keypoint schemes?
By name only. 13 of the 17 share an identical name, once lowercased with separators removed, with a point in BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133 and Apple Vision 2D; topHead, centerHead, centerShoulder and spine 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 Apple Vision 3D joints?
In the sources' words: “This request generates a collection of VNHumanBodyPose3DObservation objects that describe the position of each body the request detects. If the system allows it, the request uses AVDepthData information to improve the accuracy.” (VNDetectHumanBodyPose3DRequest); “pointInImage(_:): Returns a 2D point for the joint name you specify, relative to the input image.” (VNHumanBodyPose3DObservation); “cameraRelativePosition(_:): Returns a position relative to the camera for the body joint you specify.” (VNHumanBodyPose3DObservation); “bodyHeight: The estimated human body height, in meters.” (VNHumanBodyPose3DObservation); “cameraOriginMatrix: A transform from the skeleton hip to the camera.” (VNHumanBodyPose3DObservation).
Sources
- VNHumanBodyPose3DObservation.JointName · read 2026-10-17 · sha256 0f03e72204ce
- VNDetectHumanBodyPose3DRequest · read 2026-10-17 · sha256 926efd6c2c85
- VNHumanBodyPose3DObservation · read 2026-10-17 · sha256 8fff13ea2364
Generated by scripts/fetch-pose-keypoints.mjs and compiled by AIFitnessAPI. The sources remain the authority.