npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@fabi-play/motion

v0.9.0

Published

Body movements from pose landmarks: jumps, squats, shapes, lanes, freezing, hands as pointers.

Readme

@fabi-play/motion

Body movements from pose landmarks, as Fabi Play reads them: jumps, squats, claps, shapes (arms up, T, V, star), lanes, freezing, the distance from the screen, and hands as pointers.

npm install @fabi-play/motion
import { MotionTracker, shapeOf, hands } from '@fabi-play/motion'
import type { Body } from '@fabi-play/protocol'

declare const body: Body // 33 landmarks × (x, y, visibility), in player space
const shape = shapeOf(body) // 'star', 'arms-up', … or null
const { left, right } = hands(body)

System gestures and menus

  • armsCrossed(body): the arms crossed in an X, Fabi Play's own gesture (held 1.5 s by the app: pause, exit), so games never get it as a move and shapeOf is null while it is made. It counts in front of the chest (the wrists together on the chest, both seen, at the same height, rising gently from elbows out to the sides, the hands along the forearms, standing: what the pose model reports for crossed arms, which is rarely wrists past each other) and as a big X above the head (each wrist past the middle of the body, the forearms crossing, both arms stretched up). Arms up, folded arms, a self-hug, hands joined or clasped and hands on the head are not it. crossOf(body) says which X: 'chest', 'overhead' or null. The thresholds are in CROSS, tuned on a child's proportions. It reads one frame: when holding it, also want it still (arms waving above the head cross now and then). Measured on the pose model's answers for generated still photos of adults (test/fixtures/x-real-poses.json, points only): the chest X in 7 of 10; none of the poses that must not pause. An X turned away from the camera, or held low with the elbows in, isn't read. No children and no live video went into these figures.
  • armOut(body): one arm stretched out sideways at shoulder height, 'left' or 'right' as seen on the screen (player space is a mirror: the side of the stretched wrist), for previous / next in menus. Null when both arms are out (a star, arms wide, also with one drooping) and while the arms are crossed. The thresholds are in ARM_OUT, in arm lengths.
  • menuPointer(body): the raised hand as a cursor; Hold and Dwell for holding a gesture or staying on a button.

Games get these movements as events from @fabi-play/sdk; this package is for tools and for the Fabi Play apps. ESM only, types included; depends on @fabi-play/protocol. Docs: https://docs.fabiplay.app.

License

Fabi Play Kit License: free to use, for making games and tools for Fabi Play only. See LICENSE.