Character Card Structure and .chr
This page summarizes character content, archive layout, and import/export behavior.
1. Character Content
Important fields:
schema_id: references the character-private schematags: user-facing labelsfolder: character grouping; an empty string means unfiled
2. Template Variables
Supported variables:
{{char}}{{user}}{{field_name}}
Replacement applies to:
personalitystylesystem_prompt
3. .chr Archive Layout
.chr is a ZIP archive with fixed entries:
manifest.jsoncontent.jsoncover.<ext>
Example:
4. manifest.json
Constraints:
formatmust besillystage_character_cardversionis currently fixed to1content_pathis currently fixed tocontent.jsoncover_pathmust start withcover.character_idmust matchcontent.json.id
Supported cover MIME types:
image/pngimage/jpegimage/webp
5. Create and Import
5.1 Import .chr
POST /upload/character:{character_id}/archive
Rules:
- the body is raw
.chrbytes - clients usually send
Content-Type: application/x-sillystage-character-card - archive
content.idmust match{character_id}
5.2 Create Directly
character.create- optional
POST /upload/character:{character_id}/cover
Cover upload requires image/png, image/jpeg, or image/webp.
6. Read and Export
character.list: summariescharacter.get: full character dataGET /download/character:{character_id}/cover: raw cover bytesGET /download/character:{character_id}/archive: export.chr
JSON payloads expose cover metadata only:
cover_file_namecover_mime_type