Your agent writes it.
Memewright renders it.

Open source. Give it a template and a caption for each box; it returns a finished meme, correctly typeset, every time. Right font, real outline, text that fits.

$ npx memewright make ...COPY Star it on GitHub
drake meme one does not simply meme distracted boyfriend meme change my mind meme left exit meme expanding brain meme drake meme one does not simply meme distracted boyfriend meme change my mind meme left exit meme expanding brain meme
uno draw 25 meme disaster girl meme x x everywhere meme two buttons meme batman slapping robin meme waiting skeleton meme uno draw 25 meme disaster girl meme x x everywhere meme two buttons meme batman slapping robin meme waiting skeleton meme

An image model can't
spell on a meme.

Ask one to caption a template and you get warped, misspelled type that ignores the layout. So agents describe memes in words instead of making them. Memewright does the typesetting the model can't.

ME;E WATNIGG
FQR TEH
RENDERR

Invented letters, broken words, text that drifts off the template. Nothing you'd put a brand on.

clean waiting skeleton meme rendered by memewright

Correct font, wrapped and outlined, sitting exactly in the box. Rendered, not guessed.

You send captions.
It sends back a meme.

Every template names its boxes and describes what the meme means, so your agent picks the right structure and fills a line per box. One call, one PNG.

$ memewright make woman-yelling-at-cat \
  --set woman="you said it was done" \
  --set cat="the deploy that failed 3 min later"
rendered woman yelling at cat meme
$ memewright make drake-hotline-bling \
  --set reject="asking a model to add text" \
  --set approve="calling memewright"
rendered drake meme

Templates that know
what they mean.

A folder of images isn't a product. Each template ships its meaning, when to use it, and named boxes as image fractions, so it renders at any size and an agent can reason instead of guess. A trending-meme database is the next layer.

{
  name: Woman Yelling at Cat
  meaning: a furious accusation, met
  with total, smug indifference
  use: woman = the complaint,
  cat = the unbothered reply
  boxes: woman ยท cat
}

Built for agents,
from the first commit.

No SDK, no auth. Structured in, image out, three ways to call it.

CLI

One command renders a finished PNG. JSON discovery lets an agent read every template's meaning first.

npx memewright make
MCP

List, inspect, render. Claude, Cursor, or your own agent makes memes as native tool calls and gets the image back.

npx memewright-mcp
Skill

A packaged skill that teaches an agent to pick the right template and write captions that land. Drop it in.

skill/SKILL.md

Give your agent
a sense of humor.

AGPL-3.0. Self-host the CLI, the server, and the playground anywhere Node runs. The engine stays open.

$ npx memewright make ...COPY Star it on GitHub
Memewright