FAQ
Does it use an AI image model?
No, and it never will. Output has to be deterministic and brand exact. The same facts, brand, template and version produce the same bytes. Image models cannot promise that, and they mangle text.
Do I need an API key?
No. Deterministic rules write good default copy. An optional LLM can improve headline wording if you enable it, and even then it only writes words.
Does it run a headless browser?
No. Rendering uses Takumi, a Rust engine with no browser involved. A 1200x630 card renders in a few milliseconds.
What gets sent anywhere?
Without the LLM enabled, nothing leaves your machine except public API reads for stars and download counts. There is no Shipseal server and no telemetry. With the LLM enabled, only changelog lines, your tagline and names are sent, never source code or secrets.
Does this website track me?
The two are separate, so it is worth being precise. The CLI sends nothing, has no telemetry and needs no account. That is what "no telemetry" in the README means.
This website is different. It uses Vercel Web Analytics and Speed Insights, which count page views and page load timings. They set no cookies, do not follow you across sites, and do not build a profile of you. If you block them nothing on the site breaks.
Can I use my own fonts?
Yes. Point fonts.*.file at a TTF, OTF, WOFF or WOFF2. Geist ships as the default and Geist Mono is bundled for code cards.
Does it work in a monorepo?
Yes. Use --package <path> to pick a workspace package. Shipseal also looks for a changelog under packages/* and apps/*, and ignores the name of a private workspace root, since that is plumbing rather than a brand.
A number on a card is wrong
Open manifest.json and find the fact. Its ref names exactly where the value came from, so you can check the source. Numbers are never generated, so a wrong number always means a wrong source. See the manifest reference.
Can I write my own template?
Not as a stable public interface yet. Templates live in the package and the contract is still moving. Open an issue describing what you need and it will inform the design.
How is this different from the other ways of making release images?
Browser screenshot tools drive Puppeteer or Playwright over a page you built. That means a browser in CI, a page to maintain, and images that change when the page does. Shipseal renders directly and needs neither.
Image models write text badly and invent numbers. A card claiming a star count nobody can trace is worse than no card. Shipseal only lets a model write words, and only when you turn it on: every number comes from git, the GitHub API, npm or your own CI, and lands inmanifest.json with the command that produced it.
Generic OG image generators take whatever you hand them. Shipseal reads the release itself, so the version, the changelog entries, the commit count and the contributors are already there, and the brand kit means they look like your project rather than a template.
Doing it in Figma produces better one-off images. It does not produce them on every release without you.
What does it cost?
MIT licensed and free. No account, no hosted service, no metering.