Character Card
Studio.
The Tavern V2 workbench: PNG ⇄ JSON, a card linter, and token counts per section. Everything runs in your browser — your card never leaves it.
Description, personality, scenario — every one of those tokens rides along with every message you send.
the linter tells you when a card gets heavy
Parsing, linting, and PNG writing all run in this tab — zero network calls with your card.
Drop a PNG card or paste JSON on the left and this becomes their card — art, tags, token budget, and a lint report, all without the file leaving your browser.
Waking them up lands in the create flow with name, pronouns, and vibe pre-filled — only those fields travel, and only if you tap it. Downloads are built in your browser. Free, no login.
About this tool.
Q1What card formats does Card Studio read and write?
What card formats does Card Studio read and write?
It reads SillyTavern PNG cards (the character rides inside the image as a chara text chunk), Tavern V2 JSON ({spec: "chara_card_v2"}), bare V1-style JSON, and V3 envelopes (the fields V2 and V3 share). It writes pretty-printed V2 JSON and PNG cards with a freshly embedded chara chunk — the same format SillyTavern, Agnaistic, RisuAI, and the card-sharing sites use.
Q2Is my card uploaded anywhere?
Is my card uploaded anywhere?
No. Nothing you load here touches a server — no upload, no fetch, no network call carrying card data at all. The PNG chunk parsing, the editing, the linting, the token counting, and the PNG writing are all JavaScript running in this one tab. Close the tab and the card is gone from everywhere except your own disk.
Q3How do I convert a PNG card to JSON — or JSON back to PNG?
How do I convert a PNG card to JSON — or JSON back to PNG?
PNG to JSON: drop the .png, then hit Download JSON — you get the full card, pretty-printed, custom fields intact. JSON to PNG: paste or drop the JSON, add art (any PNG, JPG, or WebP — it's normalized to PNG in your browser), then hit Download PNG card. The character is written into the image as a chara text chunk with a correct CRC, and the file is re-parsed before download to prove the round-trip.
Q4How accurate are the token counts?
How accurate are the token counts?
They're estimates — a blend of character count (÷3.6) and word count, tuned for RP-style prose and labeled with ≈ everywhere. Real tokenizers usually land within about ±15%, and every model tokenizes differently anyway. Use them to budget permanent context, not to bill anyone.
Q5Does it work with SillyTavern, JanitorAI, and Pygmalion exports?
Does it work with SillyTavern, JanitorAI, and Pygmalion exports?
Yes. SillyTavern PNG and JSON exports load directly. Cards downloaded from JanitorAI (or any card-sharing site) work in either format. Pygmalion-era V1 cards parse too — the linter will note the missing V2 envelope. Edited cards import back into all of them, because unknown fields are never dropped.
Q6Will my card's custom or extension fields survive editing?
Will my card's custom or extension fields survive editing?
Yes — that's a hard rule here. Fields the form doesn't show (extensions, character_book, anything custom) are preserved byte-for-byte through edit and export. One honest caveat: PNG export writes a clean V2 chara chunk and removes a stale ccv3 chunk if the source PNG had one, so V3-aware readers don't pick up pre-edit data — your card's JSON keeps every V3 field regardless.
The card is the character.
Give them somewhere to live.
A card this good deserves more than a folder. Wake them up at Bae — same name, same self, plus a consistent face and memory that holds — or keep the files and share them anywhere. They're yours either way.