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

reshaper-ai

v1.0.0

Published

Command line tool and MCP server for Reshaper AI — turn one piece of content into finished posts from your terminal, Claude, or Codex.

Readme

reshaper-ai

Reshaper AI from your terminal, your scripts, and inside Claude or Codex.

One piece of source material in. Finished LinkedIn posts, Instagram captions, Substack notes and articles, rendered carousels, LinkedIn images and YouTube packaging out, all written in your own brand voice.

Everything here uses the same credits as the app. Nothing is billed twice.

Install

npm install -g reshaper-ai

Or skip the install and use npx reshaper-ai@latest in front of any command below.

Then log in with a key from reshaper.ai/api-keys:

reshaper-ai login rai_live_...

The name is reshaper-ai everywhere — including npm create reshaper-ai@latest, which scaffolds a project built on the API. reshaper works as a shorter alias if you prefer it.

Use it in Claude or Codex

npx reshaper-ai@latest install-mcp

That prints one line per client. Pick yours:

| Client | Command | | --- | --- | | Claude Code | reshaper-ai install-mcp claude-code | | Claude Desktop | reshaper-ai install-mcp claude-desktop | | Codex | reshaper-ai install-mcp codex | | Anything else | reshaper-ai install-mcp manual |

Claude Code talks to the hosted server directly over HTTP. Claude Desktop and Codex launch reshaper-mcp, which pipes stdio to that same server, so both always have the current tool list.

Once connected, you can just ask:

Turn my last YouTube video into a LinkedIn post and a carousel, in my brand voice.

Files work too

The hosted server cannot see your disk, but the local bridge can. Name a file and it is read, prepared and sent for you:

Make a carousel from ~/Downloads/talk.mp4

Video never uploads whole. The bridge strips the video track with ffmpeg and sends only the audio, which is all the transcript needs, exactly as the app does in your browser. A long reel becomes a couple of MB.

That needs ffmpeg on your PATH:

| | | | --- | --- | | macOS | brew install ffmpeg | | Windows | winget install ffmpeg | | Linux | apt install ffmpeg |

Would rather not? Put the video in Google Drive and pass the link as videoUrl instead, and the server fetches it.

Use it from the terminal

# One post
reshaper-ai reshape "we shipped dark mode today" --out "LinkedIn Post"

# From a file, into a file
reshaper-ai reshape @notes.md --out "Substack Notes" > notes.txt

# From a pipe
pbpaste | reshaper reshape - --out "Instagram Caption"

# Everything at once, saved to your library
reshaper-ai all @notes.md --save

# A rendered carousel
reshaper-ai carousel "5 lessons from 2 years of building" --template black

# A YouTube video, packaged
reshaper-ai youtube https://youtube.com/watch?v=... --thumbnail

# A transcript, free
reshaper-ai transcript https://youtube.com/watch?v=... > transcript.txt

# A reel, turned into writing (audio is extracted first)
reshaper-ai reel ~/Downloads/talk.mp4 --out "LinkedIn Post"

# Read someone else's carousel and write your own
reshaper-ai read-carousel ./their-deck.pdf --out "LinkedIn Post"

Teach it your voice

Instead of hand-writing a voice profile, give it your own writing and let it work one out:

reshaper-ai voice add ./post-1.txt
reshaper-ai voice add ./post-2.txt
reshaper-ai voice add ./post-3.txt
reshaper-ai voice analyze

Three samples is the minimum. Add --dry-run to see the voice before it is saved.

For a client workspace, point it at their brand documents instead:

reshaper-ai clients create "Acme Co"
reshaper-ai clients docs <id> ./brand-guide.pdf
reshaper-ai clients logo <id> ./acme-logo.png

Run reshaper-ai help for the full list.

Text input

Every command that takes text accepts three forms:

  • Literal text: reshaper-ai reshape "my idea"
  • A file: reshaper-ai reshape @notes.md
  • stdin: cat notes.md | reshaper-ai reshape -

File input

Anywhere a photo, video, PDF or document is wanted, pass a local path and it is read and sent for you. An https URL works too. Video has its audio extracted first.

Useful flags

| Flag | What it does | | --- | --- | | --in <type> | Source type: Raw Thoughts, LinkedIn Post, Substack Article, YouTube Video | | --out <type> | What to write: LinkedIn Post, Instagram Caption, Substack Notes, Substack Article | | --client <id> | Write in a client workspace's brand voice | | --save | Save the result to your Reshaper library | | --json | Print the raw API response | | --quiet | Hide the credit footer |

Run reshaper options to see every valid type, template and price.

Use it from your own code

import { createClient } from "reshaper-ai/src/client.mjs";

const reshaper = createClient({ apiKey: process.env.RESHAPER_API_KEY });

const result = await reshaper.reshape({
  text: "we shipped dark mode today",
  inputType: "Raw Thoughts",
  outputType: "LinkedIn Post",
});

console.log(result.notes[0]);

Or skip the package and call the REST API directly — see reshaper.ai/docs/api.

Configuration

| Setting | Where | | --- | --- | | API key | reshaper-ai login, or RESHAPER_API_KEY | | Server | RESHAPER_BASE_URL (defaults to https://reshaper.ai) | | Saved config | ~/.reshaper/config.json |

Environment variables win over the saved file, so CI and one-off shells can use a different account without touching your login.

Credits

Generation costs credits; reading and saving does not. reshaper-ai credits shows your balance, and every generating command prints what it spent. A failed generation is refunded automatically.