Model: MediaPipe Pose

A person flailing their arms and legs, with a skeleton overlaid above their arms, torso, legs, and face
handsfree.update({pose: true})
  • Full body mode with 33 2D pose landmarks
  • Upper body mode with 25 2D upper pose landmarks
  • Extra helpers and plugins coming soon

This model doesn’t come with any bonuses or plugins yet but they’ll come soon. The API will remain exactly the same, so feel free to started with this model today!


With defaults

const handsfree = new Handsfree({pose: true})

With config

const handsfree = new Handsfree({
  pose: {
    enabled: false,
    // Outputs only the top 25 pose landmarks if true,
    // otherwise shows all 33 full body pose landmarks
    // - Note: Setting this to true may result in better accuracy 
    upperBodyOnly: false,

    // Helps reduce jitter over multiple frames if true
    smoothLandmarks: true,

    // Minimum confidence [0 - 1] for a person detection to be considered detected
    minDetectionConfidence: 0.5,

    // Minimum confidence [0 - 1] for the pose tracker to be considered detected
    // Higher values are more robust at the expense of higher latency
    minTrackingConfidence: 0.5



Pose Landmarks

// An array of landmark points for the face == [
  // Landmark 0
  {x, y, visibility},
  // Landmark 1
  {x, y, visibility},
  // ...
  // Landmark 32
  {x, y, visibility}

// landmark 0[0].x[0].y
// The confidence in this pose landmark[0].visibility

Examples of accessing the data

handsfree = new Handsfree({pose: true})

// From anywhere

// From inside a plugin
handsfree.use('logger', data => {
  if (!data.pose) return


// From an event
document.addEventListener('handsfree-data', event => {
  const data = event.detail
  if (!data.pose) return



The following projects all use MediaPipe Pose or TensorFlow PoseNet, however, they weren’t all necessarily done with Handsfree.js: