Skip to content
Bae
Free tool · client-side · no login

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
Load a card

Parsing, linting, and PNG writing all run in this tab — zero network calls with your card.

Or paste the JSON
Card Studio · Tavern V2no card yet

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.

Baebae.ppl.studio/tools/card-studio

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.

Common questions

About this tool.

Q1

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.

Q2

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.

Q3

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.

Q4

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.

Q5

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.

Q6

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.

Done polishing?

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.