---
title: "Pose keypoint playground"
canonical: "https://aifitnessapi.com/tools/keypoint-playground"
markdown: "https://aifitnessapi.com/tools/keypoint-playground.md"
type: "tool"
last_reviewed: "2026-10-17"
description: "Click a joint and see its index in BlazePose 33, COCO 17, OpenPose, ML Kit and Apple Vision, then copy a TypeScript or Python index map. Name matches only."
publisher: "AIFitnessAPI — funded by KinesteX; first-party pages disclose it"
cite_as: "\"Pose keypoint playground\", AIFitnessAPI, https://aifitnessapi.com/tools/keypoint-playground"
---

# Pose keypoint playground

> Pick a keypoint scheme, click a joint, and see the index and name the same point carries in each of the 9 schemes this site reads from source (BlazePose 33, ML Kit 33, COCO 17, Halpe26, COCO-WholeBody 133, OpenPose BODY_25, OpenPose COCO 18, Apple Vision 2D, Apple Vision 3D), or “not in this scheme”. Then copy a TypeScript or Python dict that maps one scheme’s indices to another’s. Two points are paired only when their names match once lowercased with separators removed, which gives 391 pairs across 34 of the 36 scheme pairs; everything else is listed as unmapped, not guessed.

- Canonical: https://aifitnessapi.com/tools/keypoint-playground
- Last reviewed: 2026-10-17
- Publisher: AIFitnessAPI (https://aifitnessapi.com)
- Cite as: "Pose keypoint playground", AIFitnessAPI, https://aifitnessapi.com/tools/keypoint-playground

---

*[Interactive: the clickable body and the snippet builder, in the browser at https://aifitnessapi.com/tools/keypoint-playground; not reproduced in this mirror.]*

## What the mapping is built from

Every index and name comes from this site’s [pose keypoint reference](https://aifitnessapi.com/pose-keypoints), which reads each scheme from the model’s own source file or documentation (321 points, read on 2026-10-17). The pairing rule is that reference’s crosswalk, unchanged: Two points share a crosswalk row only when their names are identical after lowercasing and removing every character that is not a letter or a digit. left_knee, LEFT_KNEE and leftKnee all become leftknee and share a row; MOUTH_LEFT and LEFT_MOUTH, or RShoulder and right_shoulder, do not, and stay unmapped rather than guessed.

So a pair says the two sources use the same name. It does not say the two models put the point in the same place on the body, and it does not join points whose names differ only in style. OpenPose spells sides as L and R (LShoulder), so its points pair with its own two schemes and little else; ML Kit writes LEFT_MOUTH where MediaPipe writes MOUTH_LEFT, so those two stay apart. OpenPose BODY_25 and Apple Vision 3D; OpenPose COCO 18 and Apple Vision 3D share no name at all, and the snippet says so. If you decide two differently named points are the same joint for your model, that is your call to write down; this tool will not make it for you.

## Pairs per scheme

How many points of the row’s scheme have a name match in the column’s. The table is symmetric because each crosswalk row holds at most one point per scheme.

| Scheme | BlazePose 33 | ML Kit 33 | COCO 17 | Halpe26 | COCO-WholeBody 133 | OpenPose BODY_25 | OpenPose COCO 18 | Apple Vision 2D | Apple Vision 3D |
|---|---|---|---|---|---|---|---|---|---|
| [BlazePose 33](https://aifitnessapi.com/pose-keypoints/blazepose-33) | – | [31](https://aifitnessapi.com/tools/keypoint-playground?from=blazepose-33&to=ml-kit) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=blazepose-33&to=coco-17) | [19](https://aifitnessapi.com/tools/keypoint-playground?from=blazepose-33&to=halpe-26) | [19](https://aifitnessapi.com/tools/keypoint-playground?from=blazepose-33&to=coco-wholebody-133) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=blazepose-33&to=openpose-body-25) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=blazepose-33&to=openpose-coco-18) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=blazepose-33&to=apple-vision-2d) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=blazepose-33&to=apple-vision-3d) |
| [ML Kit 33](https://aifitnessapi.com/pose-keypoints/ml-kit) | [31](https://aifitnessapi.com/tools/keypoint-playground?from=ml-kit&to=blazepose-33) | – | [17](https://aifitnessapi.com/tools/keypoint-playground?from=ml-kit&to=coco-17) | [19](https://aifitnessapi.com/tools/keypoint-playground?from=ml-kit&to=halpe-26) | [19](https://aifitnessapi.com/tools/keypoint-playground?from=ml-kit&to=coco-wholebody-133) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=ml-kit&to=openpose-body-25) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=ml-kit&to=openpose-coco-18) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=ml-kit&to=apple-vision-2d) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=ml-kit&to=apple-vision-3d) |
| [COCO 17](https://aifitnessapi.com/pose-keypoints/coco-17) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=coco-17&to=blazepose-33) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=coco-17&to=ml-kit) | – | [17](https://aifitnessapi.com/tools/keypoint-playground?from=coco-17&to=halpe-26) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=coco-17&to=coco-wholebody-133) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=coco-17&to=openpose-body-25) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=coco-17&to=openpose-coco-18) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=coco-17&to=apple-vision-2d) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=coco-17&to=apple-vision-3d) |
| [Halpe26](https://aifitnessapi.com/pose-keypoints/halpe-26) | [19](https://aifitnessapi.com/tools/keypoint-playground?from=halpe-26&to=blazepose-33) | [19](https://aifitnessapi.com/tools/keypoint-playground?from=halpe-26&to=ml-kit) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=halpe-26&to=coco-17) | – | [23](https://aifitnessapi.com/tools/keypoint-playground?from=halpe-26&to=coco-wholebody-133) | [2](https://aifitnessapi.com/tools/keypoint-playground?from=halpe-26&to=openpose-body-25) | [2](https://aifitnessapi.com/tools/keypoint-playground?from=halpe-26&to=openpose-coco-18) | [18](https://aifitnessapi.com/tools/keypoint-playground?from=halpe-26&to=apple-vision-2d) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=halpe-26&to=apple-vision-3d) |
| [COCO-WholeBody 133](https://aifitnessapi.com/pose-keypoints/coco-wholebody-133) | [19](https://aifitnessapi.com/tools/keypoint-playground?from=coco-wholebody-133&to=blazepose-33) | [19](https://aifitnessapi.com/tools/keypoint-playground?from=coco-wholebody-133&to=ml-kit) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=coco-wholebody-133&to=coco-17) | [23](https://aifitnessapi.com/tools/keypoint-playground?from=coco-wholebody-133&to=halpe-26) | – | [1](https://aifitnessapi.com/tools/keypoint-playground?from=coco-wholebody-133&to=openpose-body-25) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=coco-wholebody-133&to=openpose-coco-18) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=coco-wholebody-133&to=apple-vision-2d) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=coco-wholebody-133&to=apple-vision-3d) |
| [OpenPose BODY_25](https://aifitnessapi.com/pose-keypoints/openpose-body-25) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-body-25&to=blazepose-33) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-body-25&to=ml-kit) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-body-25&to=coco-17) | [2](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-body-25&to=halpe-26) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-body-25&to=coco-wholebody-133) | – | [18](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-body-25&to=openpose-coco-18) | [2](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-body-25&to=apple-vision-2d) | [0](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-body-25&to=apple-vision-3d) |
| [OpenPose COCO 18](https://aifitnessapi.com/pose-keypoints/openpose-coco-18) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-coco-18&to=blazepose-33) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-coco-18&to=ml-kit) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-coco-18&to=coco-17) | [2](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-coco-18&to=halpe-26) | [1](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-coco-18&to=coco-wholebody-133) | [18](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-coco-18&to=openpose-body-25) | – | [2](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-coco-18&to=apple-vision-2d) | [0](https://aifitnessapi.com/tools/keypoint-playground?from=openpose-coco-18&to=apple-vision-3d) |
| [Apple Vision 2D](https://aifitnessapi.com/pose-keypoints/apple-vision-2d) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-2d&to=blazepose-33) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-2d&to=ml-kit) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-2d&to=coco-17) | [18](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-2d&to=halpe-26) | [17](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-2d&to=coco-wholebody-133) | [2](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-2d&to=openpose-body-25) | [2](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-2d&to=openpose-coco-18) | – | [13](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-2d&to=apple-vision-3d) |
| [Apple Vision 3D](https://aifitnessapi.com/pose-keypoints/apple-vision-3d) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-3d&to=blazepose-33) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-3d&to=ml-kit) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-3d&to=coco-17) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-3d&to=halpe-26) | [12](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-3d&to=coco-wholebody-133) | [0](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-3d&to=openpose-body-25) | [0](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-3d&to=openpose-coco-18) | [13](https://aifitnessapi.com/tools/keypoint-playground?from=apple-vision-3d&to=apple-vision-2d) | – |

## Using the snippet

- The dict maps the first scheme’s index to the second’s. Apple Vision joints have no numeric index, so on that side the key or value is the joint name string as Apple spells it.
- Points with no name match are named in a comment under the dict and given no value, so a lookup for one of them fails loudly in your code instead of returning a plausible wrong joint.
- Each snippet carries the source date and a link back to the exact view, so a reviewer can check where it came from. The address bar holds the same state (`?from=&to=&joint=`) for sharing.
- A name match does not settle which side a source means. In [ML Kit 33](https://aifitnessapi.com/pose-keypoints/ml-kit), the source’s own description of RIGHT_EYE_INNER reads “The landmark which corresponds to the inner left eye.” (and 2 more like it). Read the scheme page before converting a trained model’s output.

## How this works, and what it sends

The page is static. The 9 schemes and the 53-row crosswalk are built into it at deploy time, and every lookup and snippet is computed in your browser by the same module this site’s tests check against the dataset: that every pair emitted is a crosswalk row and that mapping A to B and back returns every point it started from. Nothing is sent anywhere.

The body is a drawing. Dots are placed from the words in each point’s name and are not measurements or any model’s output. COCO-WholeBody’s face and hand points are listed under the figure rather than drawn, because names like face-12 do not say where the point sits. The dataset has names and indices but no skeleton connections, so no lines are drawn between points.

The underlying data is published under CC BY 4.0 on [open datasets](https://aifitnessapi.com/datasets), and choosing a model in the first place is covered in [pose estimation models compared](https://aifitnessapi.com/motion/pose-estimation-models-compared).

## The other 15 tools

- [Which error is this?](https://aifitnessapi.com/tools/error-diagnoser): Paste an error string and get the matching HKError.Code case in Apple's wording, plus the guide that covers it.
- [Sum it or average it?](https://aifitnessapi.com/tools/aggregation-checker): Whether Apple describes a quantity type as cumulative or discrete, with the sentence that says so.
- [Apple type, Android record](https://aifitnessapi.com/tools/identifier-translator): Two-way lookup between HealthKit identifiers and Health Connect records — verified pairs only.
- [HealthKit permission builder](https://aifitnessapi.com/tools/permission-builder): Pick the types your app touches: the Info.plist keys, the toShare/toRead Swift, and the Health Connect record names.
- [HealthKit query generator](https://aifitnessapi.com/tools/query-generator): Pick a quantity type and a window; get the HKStatisticsQuery with the aggregation option Apple's own prose states.
- [Fitness app stack generator](https://aifitnessapi.com/tools/stack-generator): Answer four questions and get the HealthKit types and APIs that survive them, with the exclusions shown.
- [Synthetic health data generator](https://aifitnessapi.com/tools/sample-data): Seeded synthetic HealthKit, Health Connect and Google Health API fixtures as JSON or CSV, with per-record UTC offsets.
- [Is this webhook real?](https://aifitnessapi.com/tools/webhook-verifier): Paste an Oura, WHOOP, Terra, Polar, Strava, Withings, Wahoo or Google Health API webhook: the vendor's documented check, run in your browser.
- [Wearable OAuth playground](https://aifitnessapi.com/tools/oauth-playground): Pick Oura, WHOOP, Strava, Polar, Withings, Wahoo, Dexcom, Suunto or Google Health: documented endpoints and scopes, an authorize URL, a PKCE pair and token curl. Sends nothing.
- [Starter scaffold generator](https://aifitnessapi.com/tools/starter-scaffold): Pick Express, Next.js or FastAPI and Oura, WHOOP, Polar, Strava or Wahoo: a tested project skeleton with OAuth routes, a token store and verified webhooks, as a .zip.
- [Exercise form rules](https://aifitnessapi.com/tools/exercise-form-rules): The joint-angle thresholds open-source exercise trackers use for squats, push-ups, lunges, planks, curls and presses, each quoted from its code; null where none says.
- [Exercise taxonomy crosswalk](https://aifitnessapi.com/tools/exercise-taxonomy-crosswalk): free-exercise-db, wger and ExerciseDB v1 categories, equipment and muscles against HealthKit and Health Connect workout types, matched by name only.
- [Health data schema converter](https://aifitnessapi.com/tools/schema-converter): Paste a HealthKit export row, Health Connect record or Google Health API data point and see it in one unified schema, each field traced to its source.
- [Fitbit to Google Health API map](https://aifitnessapi.com/tools/fitbit-to-google-health): Search every Fitbit Web API endpoint and see its Google Health API data type, method and scopes from Google's migration tables, or that none is listed.
- [Deprecation scanner](https://aifitnessapi.com/tools/deprecation-scanner): Paste code or a manifest and find Fitbit Web API, Google Fit and other retired fitness API calls, each with its replacement. Also a GitHub Action.

The planners and demos — the API picker, the cost planner, the side-by-side comparison, the day-boundary demo, the pose-model benchmark, the Bluetooth heart-rate lab and the step lab — are listed with these on [free tools for health-app builders](https://aifitnessapi.com/tools).

A free tool from AIFitnessAPI. The full index tables are on the [pose keypoint maps](https://aifitnessapi.com/pose-keypoints); every topic in camera-based tracking is at [AI motion tracking](https://aifitnessapi.com/motion).

## Next step

Turning this into a choice of API:

- [The Best AI Workout & Motion-Tracking APIs (2026)](https://aifitnessapi.com/fitness-apis/ai-workout-tracking-apis)
- [Pose Estimation Model Licenses: Which Can You Ship Commercially?](https://aifitnessapi.com/motion/pose-estimation-model-licenses)
