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

scenri

v0.16.0

Published

The open studio for brand-consistent AI visuals. Runs locally, on your own AI accounts.

Downloads

7,444

Readme

The open studio for brand-consistent AI visuals. Define a client's brand once. Then generate, branch, and art-direct on-brand images through a version tree, running entirely on your own machine and your own AI accounts.

CI npm License: AGPL v3

Get started: one command, no account.

npx scenri

Needs Node.js 22 or newer. New to any of this? The install guide walks through every step.

Pick a product, pick a presenter, pick a scene, then write the direction. That is the brief.


What it is

Most AI image tools give you a prompt box and a slot machine. Scenri gives you the part that actually takes the time: art direction.

Every shot keeps its lineage. Branch an edit from any shot, put the two side by side, and the drift heatmap shows you exactly where the model changed your product when it should not have.

It runs as a local server on your own computer. Your brands, your images, and your keys stay on your disk. To use it from a phone or tablet on the same Wi-Fi, open Settings, Local access, and scan the QR code.

What a brief produces

The film above ends on the shot its brief made: the Selvedge Trucker product, the presenter Maren, the Editorial Walk scene, and a paragraph of written direction. The chips carry the identity; the prose does the art direction. Here are eight more shots from the home wall, each built exactly that way:

All 97 examples on the home wall work the same way. Open one and it loads back into the composer as the brief that made it, ready to change.

What you get out of the box

A library of scenes, presenters and demo products, so the app is useful before you have uploaded anything of your own. Filter by category, bookmark what fits the brand, or build your own from a few reference photos.

The brand kit sits one gesture away in Settings and is the part that keeps output consistent. Name, mark, palette and rules, set once and carried into every shot that asks for them.

Run it

Scenri runs on Node.js, version 22 or newer. If you are not sure you have it, or terminals are not part of your day, the install guide covers every step for macOS, Windows and Linux. With Node in place:

npx scenri

That is the whole install. npm asks once whether to proceed, downloads the current release, and opens http://127.0.0.1:4747. Keep the terminal window open while you work; closing it stops Scenri. Tomorrow the same command opens it again, with everything where you left it. Nothing here needs an administrator.

On Windows, if PowerShell answers npx.ps1 cannot be loaded because running scripts is disabled on this system, that is a stock Windows setting, not a fault: type npx.cmd scenri instead, or use Command Prompt. Still no administrator required.

On macOS and Windows, Scenri then asks once whether to put a Scenri icon on your desktop. Say yes and from then on a double-click starts Scenri and opens it in your browser, no terminal needed; the icon works offline and keeps working across updates. Said no? Settings, then About, then Add to desktop, or npx scenri desktop in a terminal. Scenri stays what it is, a local server and your browser: the icon is a launcher, not an app.

Generation runs on Codex CLI, an official helper from OpenAI that draws on your own ChatGPT plan. No API key to paste, and Scenri never charges you. Each image draws on your plan's Codex usage. You do not have to set it up by hand: if it is missing, Scenri offers to install it and to sign you in, both from the app. No ChatGPT plan? Add your own key from an image provider in Settings instead, see Engines.

Two dependencies (better-sqlite3 and sharp) ship native binaries, so on recent npm you may be asked to approve their install scripts once. Something not starting? See troubleshooting.

git clone https://github.com/tonygorb/scenri.git
cd scenri
pnpm install
pnpm build        # builds the studio UI, required before the first run
pnpm dev          # starts the server on 127.0.0.1:4747

First five minutes

  1. Paste a website URL. Scenri reads the public page and drafts the kit: name, palette, logo, tone.
  2. Describe a shot. In the composer, $ reaches for a product, @ for a presenter, / for a scene, and # for a colour. Everything between them is your own words. The composer compiles a brief you can inspect before it runs.
  3. Generate on Codex CLI. Runs on your own ChatGPT plan, so there is no key and no per-image charge from us.
  4. Branch an edit from any shot, then hit compare. The heatmap shows what moved.
  5. Add your own key in Settings to run on OpenRouter, Replicate or fal instead.

Why it is built this way

  • Iteration is the product. A version tree, not a prompt box. Branch, compare, keep the winners.
  • Your brands are files, not hostages. .brand is an open, documented format under a permissive license. Email one to a client. Any tool can adopt it.
  • Your AI, your cost. Bring your own Codex CLI session or an API key. Experiments cost raw API price, or nothing at all on a local session. No credits that burn on a miss.
  • Local first, and it means it. No account, no telemetry, no upload. The server binds to your machine only. Scenri makes exactly two requests on its own behalf: a version-number check against npm every six hours so updates can announce themselves (and, when one is found, the download of that release from npm, staged locally until you choose to restart), and a one-time download of the library imagery archive, cached locally forever after. Nothing about you or your work is ever sent, and both turn off: in Settings or SCENRI_NO_UPDATE_CHECK=1 for the first, SCENRI_NO_CONTENT_FETCH=1 for the second (how updates work).

Engines

| Engine | What it costs you | Needs | Carries a Product or Presenter | |---|---|---|---| | Codex CLI | your ChatGPT plan | a ChatGPT account; the app installs and signs in for you | yes, up to 6 references | | OpenRouter | about $0.04 a generation | API key | yes, up to 4 references | | Replicate | about $0.003 a generation | API token | no | | fal | about $0.003 a generation | API key | no |

Codex CLI is the default because it needs no key and because it carries the most reference images: a shot that has to keep both a product and a person accurate needs the room.

It is not free. Every ChatGPT plan comes with some Codex usage and each image spends a little of it. OpenAI meters that, not Scenri, so spend caps do not apply to this engine.

Without a ChatGPT plan, use your own provider key. OpenRouter is the one to pick if your shots name a Product or a Presenter. Replicate and fal take no reference images, so Scenri refuses those briefs on them rather than generating something that only looks right.

Keys are stored in your local library folder, sent only to that provider, and never returned by the API. Set a monthly spend cap per engine in Settings.

Your Codex session is yours: Scenri runs the official codex commands on your machine and never reads, copies or stores the credential. That is also why Scenri never pools user plans: a plan is licensed to the person who pays for it, not to a service reselling it to other people. Any hosted version of Scenri, if one ever exists, would run API-priced engines only.

Configuration

| Variable | Default | What it does | |---|---|---| | SCENRI_HOME | ~/.scenri | where brands, images, and keys live | | SCENRI_PORT | 4747 | port | | SCENRI_HOST | 127.0.0.1 | the studio's own listener; 127.0.0.1 given explicitly also turns off phone access, see the note below | | SCENRI_NO_OPEN | unset | set to 1 to skip opening a browser | | SCENRI_NO_UPDATE_CHECK | unset | set to 1 to never ask npm for the latest version | | SCENRI_REGISTRY | npmjs | registry for the update check and downloads (mirrors, forks, airgaps) | | SCENRI_NO_CONTENT_FETCH | unset | set to 1 to never download the library imagery archive | | SCENRI_CONTENT_URL | GitHub releases | where the library archive comes from (mirrors, forks, airgaps) |

OPENROUTER_API_KEY, REPLICATE_API_TOKEN and FAL_KEY are read from the environment as an alternative to entering them in Settings.

Phones and tablets. Scenri also answers on this computer's Wi-Fi or Ethernet address, so a phone on the same network can open it: Settings, Local access shows a QR code. Scenri has no accounts, so every device other than this computer has to bring a six-digit code, which rides inside the QR code and the link; typing the bare address asks for it, wrong guesses are slowed to a crawl, and New code signs every device out. The first time, macOS or Windows may ask whether Node may accept incoming connections: allow it, or phones cannot reach Scenri. Setting SCENRI_HOST=127.0.0.1 keeps Scenri to this computer alone. Over plain http the code travels unencrypted, like everything else, so treat phone access as convenience on a network you trust.

Layout

| Package | Purpose | |---|---| | packages/cli | the scenri command: local server, engine detection, browser open | | packages/brand-spec | the .brand schema, validator, and URL auto-builder | | packages/core | brands, shot history, the version tree, image store, cost ledger (SQLite) | | packages/catalog | product catalog import: Shopify, WooCommerce, Webflow, generic | | packages/engines/* | engine adapters: codex, openrouter, replicate, fal, demo | | apps/studio | the React studio the CLI serves |

One package publishes to npm: scenri, the CLI, which bundles everything else. The rest are internal.

Contributing

Start with CONTRIBUTING.md. Engine adapters are the friendliest surface: one file, one interface, well covered by tests.

Accessibility is tracked in docs/A11Y-BACKLOG.md. Every Biome a11y rule runs at error, so the backlog is currently empty and a new defect fails CI rather than joining a list.

Found a security problem? Please report it privately. See SECURITY.md.

Status

Early. The version is 0.x and interfaces can still move. Everything documented above works today. ROADMAP.md says what is next.

License

The application is AGPL-3.0-only. The .brand format, its schema, and its validator live in packages/brand-spec under Apache-2.0, so any tool may implement or reuse them without taking on copyleft; the npm package carries that license text as LICENSE-APACHE-2.0-brand-spec. Contributions require a CLA.

The bundled imagery and curated content are licensed separately under ASSETS-LICENSE.md: free to use within Scenri, commercial work included; no redistribution or rebundling. The npm package's license field describes the code; the starter imagery inside it stays under those asset terms.

The name and the mark are not part of the code license: TRADEMARKS.md says what a fork may and may not call itself. What the app does and does not send anywhere is written down in PRIVACY.md.


Built in public by Tony Gorb · tonygorb.com · [email protected]