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

protoreel

v0.1.2

Published

Frame-stepped video recorder for HTML prototypes — deterministic 60fps click-throughs, no screen capture.

Readme

protoreel

Turns an HTML prototype into a click-through walkthrough video — the kind you put in a case study or send to a stakeholder — without screen-recording anything.

It drives the prototype in a real browser and renders it one frame at a time, so the result is a clean 60fps clip with no dropped frames, no stutter, and no cursor wandering. A touch ripple or cursor shows each interaction, and the whole thing can sit inside a phone or tablet mockup exported from Figma. Run it twice and you get byte-identical output.

Two ways to use it: a command-line tool, or a Claude plugin that asks you six questions and does the rest.

CLI

npm install protoreel                  # in the folder next to your prototype
cp node_modules/protoreel/examples/walkthrough.config.example.mjs walkthrough.config.mjs
npx protoreel inspect walkthrough.config.mjs   # lists the page's buttons/links/inputs with real selectors
npx protoreel walkthrough.config.mjs           # records → out/walkthrough.{webm,mp4} + poster

The config is a small ES module: the settings, plus an async walkthrough() that receives the step verbs.

export default {
  source: './index.html',              // file path or http(s) URL
  view: { w: 390, h: 844 },            // the prototype's own viewport
  frame: { png: null },                // or a Figma device frame — see docs/device-frames.md
  pointer: 'touch',                    // 'touch' | 'cursor' | 'none'
  output: ['webm', 'mp4', 'poster'],   // any of webm, mp4, poster, gif

  async walkthrough({ tap, drag, hold, fadeOut, extent, paint }) {
    await paint();
    await hold(45);
    await tap('#openFilters', 50);           // move, press, click, ripple, hold 50 frames
    await drag('#list', 'y', 220, 34);       // finger-drag a scrollable element
    await fadeOut(18);
    await hold(60);
  },
};

Frames are 1/60 s: 30–50 after a tap reads comfortably, 70–90 after something that changes the whole screen. Every tap is logged to out/taps.json with its frame number and coordinates, so you can open the exact frame and check it.

A 25–30 second clip takes two to three minutes to render — one screenshot per frame is the price of determinism.

Claude plugin

The same engine, wrapped in a skill. Install the plugin, then say what you want:

record a walkthrough of my prototype make a video of this click-through inside the iPhone frame turn this prototype into a clip for the case study

Claude asks for the prototype, the viewport, a device frame (or none), the pointer style, the steps — described, or derived from a screen recording of you clicking through — and the output format. Then it writes the config, records, checks frames around each interaction, and hands you the files. The config stays in your project, so adjusting pacing and re-running is one command.

What you need

  • Google Chrome — install it yourself. Any Chromium works via chromePath in the config or PROTOREEL_CHROME.
  • ffmpegbrew install ffmpeg on macOS, apt install ffmpeg on Debian/Ubuntu. Or set ffmpegPath / PROTOREEL_FFMPEG.
  • Node 18+.

Developed and used on macOS; CI runs the test suite on Ubuntu. The Claude plugin additionally needs a real local shell (the Desktop Commander plugin or equivalent) — Cowork's sandboxed Linux shell can't reach a browser or localhost. For Figma device frames through Claude, the Figma MCP connector must be connected, or point at a PNG you exported yourself.

Why not just screen-record?

A screen recorder samples whatever the browser happened to paint. Dropped frames, compositor stutter and a transition caught mid-flight all end up in the file, and the only fix is re-recording until a take is clean. Here the page's own clocks — CSS animations and setTimeout — are frozen and advanced by exactly 1/60 s per screenshot. Every transition lands on the frame it should, and running it twice gives byte-identical output. docs/frame-stepping.md has the details and the failure modes.

Docs

Contributing

See CONTRIBUTING.md. npm test records a fixture page twice and asserts the frame count, the tap log, the ffprobe spec of the output, that the clocks actually tick, and that the two runs are byte-identical.

MIT — see LICENSE.