Labs · Card checkup

Drop in a character card,
get a checkup.

A downloaded card won’t import — or imports and then plays wrong. Often the card itself carries the problem. Drop a .png / .json / .charx here: your browser reads the spec version, weighs every field in tokens, audits the embedded lorebook, and flags known pitfalls with fixes. The file never leaves your machine.

Drop a character card here, or click to choose

.png · .json · .charx

Parsed locally in your browser — nothing uploaded, nothing stored. Works offline once the page loads.

The checkup report will appear here.

Where the rules come from

None of these checks are guesses. While building Foreverse's card import pipeline we ran 34 real community cards — V1 flat relics, a 97,602-character greeting, a 126-entry lorebook, dual-chunk PNGs, full-width CJK names — through PNG / JSON / charx import and into live chats, and verified reader behavior against the SillyTavern 1.18 source: ccv3 over chara, empty-greeting promotion of the first alternate, example dialogue dropped first. Every red and yellow item here maps to a failure or degradation that actually occurred in that testing.

What it can't check (the honest part)

Three things up front. One: token counts are character-ratio estimates, not a tokenizer — real models differ by 20–30%, so read them as magnitudes. Two: passing the checkup doesn't mean the card is good — whether the persona holds up and the greeting hooks anyone is a content question, out of reach for structural checks. Three: embedded regex, beautify HTML and TavernHelper scripts aren't executed here; we inspect data, we don't simulate runtime.

How many tokens does a character card actually cost?

More than its file size suggests: description, personality and the embedded lorebook ride along with every single message, while greetings and example dialogue bill differently. Drop the card above and the checkup weighs every field separately, splits permanent tokens from one-off ones, and flags dead lorebook entries that add weight without ever firing.

FAQ

Is my card file uploaded when I check it?

No. The parser runs entirely in your browser — PNG chunks, JSON, and charx zip entries are all decoded locally with browser APIs. Nothing is sent to any server, and the page keeps working offline once loaded.

What card formats does it support?

Three containers: PNG card images (chara / ccv3 data in tEXt, iTXt or zTXt chunks, with ccv3 preferred like SillyTavern does), plain JSON (V1 flat legacy cards, V2, and V3), and .charx zip containers (the card.json inside is read in the browser). Standalone worldbook JSON and group-chat exports are recognized and reported honestly as not-a-card.

Why is the token count different from other tools?

It's a character-ratio estimate, not a real tokenizer: CJK at roughly 1.6 characters per token and English at roughly 4 characters per token — a common ballpark for DeepSeek and GPT-family models. Real tokenizers differ by model and can deviate 20–30%. Read the numbers as magnitudes, not exact counts.

What is a .charx file?

The zip container defined by the chara_card_v3 spec: a card.json at the root plus optional assets (avatar, sprites, backgrounds) referenced via embedded paths. This tool reads the card.json for the checkup; asset unpacking is an import-time job for a full frontend. One web-side limit: zip64 archives (4GB+ entry tables, rare for real cards) aren't supported here — the tool says so honestly instead of guessing, and the Foreverse app imports them fine.

Related tools

← All free tools

Character Card Token Counter & Checker — Free Import Checkup for SillyTavern Cards · Foreverse · Xinmeng