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

motion-skills

v0.1.5

Published

The engine behind Motion Skills: your coding agent writes the film, scores it, and you point at the frame to change it.

Readme

motion-skills

Your coding agent makes the film. You point at the frame to change it.

The engine behind Motion Skills. A skill teaches your agent (Claude Code, Codex, Cursor, Gemini CLI) how to direct a kind of film; this engine is what it builds with. A film is one index.html: HTML, CSS and GSAP, every frame a function of time. No video model, no credits, no upload. It renders in the Chrome you already have.

npx motion-skills doctor          # Node 22+, FFmpeg, Chrome
npx motion-skills new my-film     # a project that follows the film contract
npx motion-skills studio my-film  # live preview: press C, click the frame, write the change

What it does

  • Point at the frame. mo studio opens a live preview. Press C, click anything, write what you want. The agent gets the time, the scene and the element under your cursor, changes only that, and the preview reloads where you were. Every version is kept; mo undo goes back.
  • Music written for the film. The agent writes the score in ABC notation; mo sound fits it to the scenes and plays it on sampled piano, strings and drums (or synths), with an effect on every landing.
  • Fast renders in your own Chrome. Several browsers at once; MP4, MOV with alpha, WebM, GIF, or a share page.
  • Checked before you see it. mo check finds cut-off, covered and low-contrast text; mo audit checks every line on screen against sources.md; mo qa finds single-frame pops, blank and quiet stretches in the render, and for a narrated film measures the pace (words a minute, gaps, breaths, the last hold).
  • Real material. mo harvest collects every image a product page uses; mo shoot takes a sharp 2× picture.
  • References measured, not guessed. mo study ref.mp4 turns a film someone likes into what an agent can read: shots and cuts, the frames around each cut, moves and their ease, palette and tone, tempo and cuts on the beat, contact sheets; --compare puts your render beside it.

Commands

| Command | What it does | |---|---| | mo new · mo templates | start a project | | mo studio | live preview, direct edits, frame comments | | mo inbox --wait · mo look · mo done | the agent's side of a comment | | mo sound · mo voice · mo samples | score and effects, narration, the instrument pack | | mo check · mo audit · mo still · mo qa | before and after rendering | | mo review | a kit for a reviewer who did not make the film | | mo render · mo fork · mo export html | export, a new frame size, a share page | | mo export jianying · mo export capcut · mo export pptx | the film as a 剪映 or CapCut draft, or a slide deck | | mo cut · mo replay | a talking-head take cut clean; a Claude Code or Codex session as a film | | mo series · mo house | one film, many episodes; the house style every skill reads first | | mo harvest · mo shoot · mo music · mo sfx · mo study | material, music and effects, a reference film measured | | mo learn · mo undo · mo doctor | experience, undo, environment |

Requirements

Node 22+, FFmpeg, and Google Chrome (or Chromium / Edge). Optional: mo samples build downloads the instrument pack once (about 60 MB); narration with Kokoro voices needs Python 3.12 and uv.

Privacy

Nothing leaves your machine except, for projects a Motion Skills skill started, one anonymous signal when a render or the setup check finishes: the skill's name, the step, whether it worked (if not, one word for what broke: disk, chrome, ffmpeg, page…), the engine version and a random number the engine keeps in the project's .mo/run, so a film retried five times is not counted as five films. Never a file, a path or any of the film. MOTION_SKILLS_TELEMETRY=0 turns it off.

After a render of a film the free trial skill (motion-director) made, mo render prints one tip, once per project: where the full film of that kind is made (the full-film skill its handoff.md recommends). It is printed from what is on disk, with no network call, and never for any other skill. MOTION_SKILLS_TIPS=0 turns it off.

MIT. GSAP and the bundled fonts keep their own licenses (next to the files and in LICENSES/).

Changelog

0.1.5

  • mo voice --voice say:… works again, and so does the fallback to a macOS voice when Kokoro is not set up: the script's [say …] respellings had taken the name of the say synthesizer, so both stopped with "say is not a function" (since 0.1.1).

0.1.4

  • The site renamed its "directors" to full-film skills named for the film they make (Launch Video, Data Video, …) and Starter Director to Free Trial. mo whoami, mo install and the paid-skill message say "skill"; the tip after a Free Trial render reads "Made with the free trial. …" and names the full-film skill from handoff.md, whose line is now - Full film: <name> (<slug>) (Director:, Skill: and Look: lines from older projects still read); the house-style template says "every skill".

0.1.3

  • mo shoot: --size applies from the first load with no steps too (a phone page at --size 390x844 was laid out ~500 px wide and cut at the right); --user-agent "<ua>"; --selector "<css>" takes just that element's box; an SVG is drawn at its own viewBox size (or --size exactly) with no margin, on a transparent ground (--background).
  • mo new <dir> --skill <path|slug> [--example name] starts from the skill's example film (examples/<name>/index.html and the files it uses, not out/, .mo/ or stills/) when the skill is installed and has one; otherwise the blank starter, with a note saying why.
  • True peak: the master is limited with 4x-oversampled peak detection to −1.5 dBTP (the peaks between samples, from hats and noise, went over −1 dBTP before); mo sound prints it; mo qa measures the delivered sound's true peak and warns over −1 dBTP.
  • mo check: CSS that does not parse is an error (a /* never closed or not closed before the next comment, a stray */ or }, a { never closed, and rules Chrome dropped compared with the rules written); a layer that paints nothing (opacity near 0 with its parents, a clear background, no image or text of its own) no longer "covers" text; an apostrophe in a single-quoted data-composition-variables is reported first, alone, as "variables JSON invalid (apostrophe? write ')", without the unknown-variable and page errors that followed from it.
  • mo audit: a number counts as illustrative only when its source cell marks it so: "illustrative", "invented", "made up", or "sample" written as a label ("sample", "sample: …", "sample content / data / values / figures / text / input / copy"). A source that only mentions a sample ("a sample of 1,200 adults", "sample size", "sampled") is a source. Rows written for 0.1.2 with those marks read the same.
  • mo swatch reads the two-line palette: the — from: … source on the line after Palette:.
  • mo fonts add "<family>" [--weights 400,600] [--italic] [--subsets …]: a family that is not bundled is downloaded (woff2 from Fontsource on jsDelivr, the licence from google/fonts) into assets/fonts with a LICENSES.md row and an @font-face; offline it fails with a clear message and leaves the film as it was.
  • mo render: a browser that stops answering ("Runtime.evaluate timed out", often with <video>) is started again once and redoes the frames it owed; a second stall fails with a message suggesting --workers 1.
  • mo help states the --blur limit: 240 subframes a second (8 at 30 fps, 10 at 24, 4 at 60).
  • After a render of a Free Trial film, the one-time tip above.