Tool · arriving with the closed beta

Character card converter for Tavern V1, V2, V3, Chub, Risu and SillyTavern.

Translate Tavern V1 ↔ V2 ↔ V3 character cards between Chub.ai, RisuAI, and SillyTavern. Embed or extract the PNG tEXt chunk, keep your lorebook intact, and stop hand-patching JSON at midnight.

V1 · V2 · V3·PNG tEXt embed / extract·JSON ⇄ PNG·lorebook-safe
fol. ii.v

The matrix

Source on the left, target on the top. A scroll in every cell we promise to keep faithful.

from / toTavern V1Tavern V2Tavern V3PNG tEXt
Tavern V1 JSONupgradeupgradeembed
Tavern V2 JSONdowngradeupgradeembed
Tavern V3 JSONdowngrade*downgrade*embed
Chub.ai exportlossyconvertconvertembed
RisuAI .charxlossyconvertconvertembed
SillyTavern card.pngextractextractextract

* V3-only fields (assets, character_book groups, decorators) are preserved as side-car metadata when downgrading, so a future re-upgrade is lossless.

fol. iii.r

Not yet open

The converter rides with the main workbench, which is currently in closed beta. Leave a sealed scroll below and you'll be among the first to convert a card without opening a JSON editor.

One scroll, sealed in wax. No spam — one letter when the gates open.

Already on the list? Read the field guide on V2 vs V3 differences while you wait.

fol. iii.v

Common pitfalls

Five places hand-rolled converters quietly bleed your card.

  1. png tEXt order

    The tEXt chunk before IDAT

    The Tavern PNG spec requires the chara tEXt chunk before the first IDAT. Many naive encoders append it after, and SillyTavern silently refuses to load the card.

  2. base64 boundary

    UTF-16 vs base64 in tEXt

    V1 cards base64-encode a JSON string; V2 / V3 keep the keyword chara but switch the payload shape. Re-encoding without re-base64ing yields a corrupt scroll.

  3. character_book

    Lorebook entry shape drift

    V2 stores entries as a numbered object; V3 promotes character_book into a first-class scroll with groups. A naïve copy loses position, depth and selective keys.

  4. alternate_greetings

    Greeting arrays vs first_mes

    V1 had a single first_mes; V2 added alternate_greetings; V3 keeps both plus group_greetings. Flattening these into one string strips half your opening lines.

  5. assets[]

    Asset URIs that point at nothing

    V3 introduces an assets array with URIs (embedded:// or external). Converting back to V2 must inline or drop these — silent dropping is what loses voice samples.