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

newsreel

v0.2.1

Published

Build narrated videos from a config file: reports, demos, ads, launch films. Playwright drives your real app, narration runs locally, ffmpeg assembles it with cards, a music bed and 36 generated scenes

Readme

newsreel

npm CI licence

Build a narrated video from a config file.

Playwright drives your real app and records one clip per scene. Narration is spoken by a local model. ffmpeg frames every clip, cuts it to the length of its own narration, and assembles the lot with a title card, lower thirds and a music bed. You get an mp4 and a poster image, and one line in the config decides whether the same shot list comes out as a shipping report, a product demo, an ad, or a launch film.

newsreel demo

Every frame above was generated by newsreel — the ad for the tool is made by the tool. Watch the full cut on newsreel.pages.dev.

Try it in two commands

No app, no login, no API keys. 36 generated scenes ship inside the package, and a video made only of those runs on a machine that has just installed it:

npx newsreel init --generated
npx newsreel run

To film your own app instead:

npx newsreel init       # scaffold a commented config; fill in baseUrl, auth, shots
npx newsreel login      # log in once by hand; the session is saved and reused
npx newsreel run        # capture -> cards -> assemble

Working with an agent? npx newsreel prompt --copy puts a self-contained brief on your clipboard (AGENT.md). Paste it into any coding agent and describe the video you want.

What a shot is

Every entry in shots[] is either a captured route — Playwright opens your app, clicks, types and scrolls through the actions you listed — or a generated scene drawn by one of the bundled visuals (the lookbook lists all 36; they all run live on the landing page). Both record the same way and cut together in one timeline.

{ "id": "invoices", "route": "/invoices", "duration": 8,
  "caption": "Invoices", "narration": "Reconciliation now matches on amount and date together.",
  "actions": [ { "type": "waitFor", "selector": "table tbody tr" },
               { "type": "click", "selector": "text=New invoice" } ] }

What a video is for

video.kind sets the palette family, accent, music bed, pacing and title-card layout in one word. The background is rolled from the kind's family, so two ads come out siblings instead of copies.

| kind | for | feels like | | --- | --- | --- | | report | a weekly shipping report | calm, legible, unhurried | | demo | a product walkthrough | confident, focused on the screen | | ad | a short loud piece | heat and pace, ends on a call to action | | launch | a launch film | premium, deliberate, a little cinematic |

Commands

| Command | What it does | | --- | --- | | init | Scaffold a config. --generated for a video that needs no app. | | prompt | Print the agent brief. --copy puts it on the clipboard. | | presets | List the background presets. | | voices | List the bundled narration voices. --install puts them in Voicebox. | | login | Headed browser, manual login, saves the session. | | capture | Record one clip per shot. --only <shotId> re-records one. | | cinema | Debug one shot's camera pass; prints the editable plan. | | cards | Render the title/closing cards and lower thirds. | | assemble | The ffmpeg cut: frames, narration, music, poster. | | compose | The Remotion cut: animated cards, eased motion. | | run | capture -> cards -> assemble. |

Every command takes --config <path>. Paths inside the config resolve against the config file's directory, never the shell's cwd.

Requirements

Node 18+, ffmpeg on PATH (brew install ffmpeg), and Playwright in the project being filmed: npm i -D playwright && npx playwright install chromium. Playwright is an optional peer dependency — your project almost certainly has it, and a second copy would only be a version fight. Narration and music are local and bundled; nothing needs an account.

Documentation

| | | | --- | --- | | Configuration | the full config contract, backgrounds, styling | | Rendering | the pipeline, assemble vs compose, verifying a cut | | Voice and music | the bundled voices and beds, hosted options | | Gotchas and limits | every entry cost real time once | | Development | adding a provider, the skill folder, releasing | | Scene lookbook | all 36 generated scenes, their props, when to use each | | Agent brief | hand this to a coding agent and it can drive newsreel |

Licence

MIT. See LICENSE.

assets/bettershot-presets.json contains colour values and a shadow formula derived from BetterShot (BSD-3-Clause). The values were read from its source and re-expressed as data; no BetterShot code is included. Its licence and copyright notice are reproduced in LICENSE.