Docs / Developer / Saucepan format
Saucepan format
Saucepan (saucepan.ai) imports characters through its Companion Importer at/labs/companion-importer, which states that it supports "the SillyTavern PNG format (v1 and v2)".
Everything below was read from Saucepan's production bundle (2026-10-24). Saucepan has an owner-only
Backup JSON, but its shape is not yet confirmed against a real backup file, so there is no Saucepan
reader.
The folder src/formats/saucepan/ default-exports two export-only codecs. Both return 0 fromdetect(); the character codec's toCanonical delegates to the SillyTavern reader, which is what its
PNG is.
saucepan, kindcharacter, writes.pngonly.saucepan-lorebook, kindlorebook, writes the SillyTavern world info JSON
(_shared/host-worldbook.ts) for the Lorebook Importer at/labs/lorebook-importer.
The importer mapping below is the co-developer's recorded 2026-10-24 bundle inspection. Current integration tests verify Bunzai's emitted PNG and reports against that mapping; they do not prove a current live import on the external service. Recheck upstream behavior when it changes.
What Saucepan's importer reads
- PNG only,
charakeyword only."data" in jsonselects the V2 path, otherwise V1. Noccv3, JSON
or charx. - Default mapping (the user can remap before saving):
description,personalityandscenario
merge into Information (card);creator_notesbecomes the public Description;first_mesandalternate_greetingsbecome Scenarios 1..N;mes_examplebecomes example dialogue;nameandtagscarry over. System prompt, post-history instructions,character_bookandextensionsare dropped. - The result is a private draft. Oversized fields are clipped with a toast, not rejected.
What the adapter writes
The normal V2 card from the Tavern codec (v2CardObject, so a V3 card yields its V2 backfill),
embedded under chara alone (charaOnlyPng), carried by the inline PNG portrait or else the PNG
the card was imported from. No field is rearranged, because Saucepan's defaults already read a V2
card the way its author meant it. A card with no PNG art at all is refused.
saucepanWarnings adds a report warning for each field the importer would clip, counted in code
points as Saucepan counts them: Information over 120,000, Description over 20,000, example dialogue
over 40,000, any scenario over 30,000, or more than 50 greetings in total.
The importer's default map is a fixed table keyed by card field name with no entry forsystem_prompt or post_history_instructions, so it discards them. Its mapping step offers a
"Select mapping..." choice for every discarded field, and Formatting Instructions accepts them. When
either prompt is non-empty, the report says so and warns if the two together pass Formatting
Instructions' 10,000 limit.
Lorebooks
Saucepan lorebooks are chapters of {title, text} with no keyword activation. The Lorebook Importer
takes any JSON and offers SillyTavern presets that map each entry's comment or keys to the chapter
title and its content to the text. saucepan-lorebook writes ST world info for those presets; trigger
keys survive only as text.
Source of truth
| Concern | File |
|---|---|
| Character adapter and limit warnings | src/formats/saucepan/index.ts |
| Coverage declaration | src/formats/saucepan/coverage.ts |
| V2 card object and chara-only PNG | src/formats/_shared/card-png.ts |
| Lorebook codec | src/formats/_shared/host-worldbook.ts |
| Tests | src/formats/saucepan/saucepan.test.ts |