Labs · Card diff
The card updated.
What actually changed?
“v1.1 — reworked!” Reworked how? Drop the old and new versions side by side: every field diffed with word-level highlights, lorebook entries matched and sorted into added / removed / modified, and a token delta so you know if the update made the card heavier. Both files stay in your browser.
Old version (before)
Old version (before)
.png · .json · .charx
New version (after)
New version (after)
.png · .json · .charx
Both files are parsed and compared locally in your browser — nothing uploads, nothing is stored. Works offline once loaded.
Drop a card on each side and the report appears here.
How do you tell what a card update changed?
Card sites show a version number and maybe a changelog line; neither tells you whether the author fixed a typo or rewrote the personality. The reliable way is to diff the data itself: parse both files with the same reader importers use (PNG chunks, JSON, charx — ccv3 over chara, V1 promotion, the works), then compare normalized field against normalized field. That’s what this page does, and where the diff can’t be precise — a block rewritten wholesale, an entry with no confident match — it degrades to an honest “removed + added” instead of decorating noise with highlights.
What it can’t see (the honest part)
The field-level view covers what the spec defines: card text fields, tags, greetings, the embedded lorebook. What lives in extensions — embedded regex scripts, beautify HTML payloads, frontend-private settings — isn’t expanded field by field. It isn’t invisible either: the raw-layer verdict compares the complete original JSON and will tell you “something changed outside the visible fields”, so a silent script change can’t masquerade as “no changes”. One genuine gap: .charx files get field-level comparison only, since raw extraction for that container is an app-side capability.
FAQ
What exactly does it compare?
Three layers. Field level: every card text field (description, personality, greeting, examples, system prompt…) gets a word-level diff with deletions and insertions highlighted. Lorebook level: entries are matched across versions and grouped into added / removed / modified / unchanged, with per-entry change chips (keys, content, constant/enabled flips, renames). Token level: the same estimate ruler as our Card Checkup, old → new → delta per field.
It says “no visible changes” but the files aren't identical. What gives?
That's the honest three-state verdict doing its job. If the raw JSON is byte-identical, it says so. If only key order or whitespace differ (an editor re-serialized the file), it says the content is the same. And if the raw JSON differs somewhere this tool doesn't display — usually extensions: embedded regex scripts, beautify payloads, frontend-private fields — it tells you a change is hiding there rather than pretending nothing happened.
How are lorebook entries matched between versions?
Five passes, strictest first: full identity, identical content, unique matching name, unique matching keyword signature, then content similarity — with a stricter threshold for very short entries, because two five-word entries sharing three words shouldn't be declared “the same entry, modified”. Anything that survives no pass is honestly reported as added or removed, not force-paired.
Are my cards uploaded?
No. Both files are parsed and diffed entirely in your browser. Nothing is sent anywhere, and the page works offline once loaded.