How to Move AI Characters Between Apps: Character Cards, Chat Logs and What Actually Transfers

To move an AI character, preserve the character definition, original conversation and current scene separately. Then check what the destination can actually read. Moving those text assets does not transfer the model, its hidden state or a guarantee of identical replies.
For writers who want to resume original-character roleplay without managing an inference backend, a practical hosted route is to rebuild your AI character in CrushOn AI. Its distinct Personality, Greeting, Scenario and Example Conversation fields make the manual mapping understandable. For native character cards and explicit chat-file management, SillyTavern and KoboldAI Lite provide different workflows. The right route depends on whether you need to preserve the writing, the original application's structure, or both.
Published October 21, 2026 (PDT). Disclosure: Produced for a CrushOn AI promotional content initiative with AI-assisted writing and source review. This independently operated site is not the official KoboldAI or KoboldCpp project. The guide combines official documentation, version-specific source inspection, a small local file check and one unsaved CrushOn draft-import observation; it is not a cross-product import benchmark.
Quick answer for the material you want to move
| What you need | Keep this asset | Do not assume |
|---|---|---|
| The same character premise and voice | Owned character fields or the original supported card export | The destination uses the same prompt order or model |
| The exact words of a conversation | Original transcript plus a readable copy | A summary contains the full exchange |
| A scene that can continue coherently | A reviewed checkpoint of facts, unknowns and pending choices | A new chat knows where the old one stopped |
| Branches, variants and attachments | Native files and separately preserved media where permitted | A compatible text importer preserves every relationship or file |
| The same world reference behavior | Lorebook text together with its triggers and settings | Copying the words transfers retrieval behavior |
A successful move is therefore not simply a file that opens. It is a destination you can reopen and inspect, with the essential character and scene facts in the right places and any losses understood.
Step 1 Preserve an unchanged original before converting anything
Use the source application's own export or save option where available. Keep that original in a private folder and work on a copy. Also record the application version, export format, selected character and date. If the export is an account archive, inspect what it contains before treating it as a character card.
Save a readable transcript if exact dialogue matters. Keep relevant avatars, images or voice files separately when you have permission to retain them. An original character belongs in your migration plan; another creator's hidden definition does not become yours to extract or republish just because you can chat with it. Preserve attribution and reuse terms for any licensed material.
Avoid uploading a private chat archive to a public repository or an unfamiliar converter. Account exports can include more than the story you intended to move. A local copy is a useful starting point, but access to that computer, synchronized folders and backups still matters.
Step 2 Identify the file instead of trusting its extension
A character card is not a chat history
Character cards describe a persona and its setup. They can contain a name, description, personality, scenario, opening message and dialogue examples, alongside creator metadata and optional instructions. SillyTavern's character-design guide explains why these fields have different jobs.
SillyTavern's inspected character import and export implementation supports JSON and PNG routes. A PNG card is not merely an avatar: the card parser reads machine-readable character data from PNG text chunks. Keep the original export. A screenshot, recompressed image or image-editor copy should not be assumed to preserve those chunks.
Likewise, a file ending in .json can be a character card, a story save, an account archive or an unrelated document. Match the schema and version to the destination, not just the extension. Unknown extension fields deserve review, especially if they contain instructions or refer to external resources.
JSONL and TXT solve different problems
According to SillyTavern's chat-file documentation, its JSONL chat export can be re-imported with chat metadata, but excludes images and file attachments. Its simplified TXT export is readable but loses metadata required for native chat re-import.
Use JSONL when the supported application workflow needs it, and TXT as a reading or reference copy. Renaming a TXT file to .jsonl does not restore lost structure. A conversation displayed as alternating names and messages may still be missing turn identifiers, chosen variants or branch relationships.
A KoboldAI Lite story save may contain more than prose
The upstream KoboldAI Lite project documents support for Tavern-style cards, KoboldAI saves and other story formats. Its save implementation includes memory, author notes and world information; inclusion of additional assets or settings depends on the save options.
The important limitation is semantic, not just technical. In the inspected card-import implementation, multiple card fields are combined into a memory string. That is evidence of a supported mapping, not evidence that the destination keeps every field separate or gives each instruction the same priority. These source links pin the inspected versions; check your installed version before relying on a particular path.
Step 3 Make a small character and scene handoff
Our example reuses Iris Vale, an original adult SFW museum conservator. A useful migration brief keeps her durable personality apart from the immediate mystery.
Character: Iris Vale, 32. Precise, skeptical and quietly kind. She asks for evidence, handles artifacts carefully and leaves the visitor's speech, actions and decisions to the visitor.
Scene: Iris has placed an inventory sheet on the desk. The blue cabinet has no label. Its contents and the key's location are unknown. Iris has asked what the visitor noticed; the visitor has not answered.
Those unknowns are part of the state. A summary that adds “the cabinet contains a stolen painting” is not a better summary; it changes the story. The pending decision also matters. If the destination starts by narrating the visitor opening the cabinet, it has skipped a choice that was supposed to remain open.
Download the original fictional Iris migration brief. It contains the character fields, checkpoint and manual CrushOn mapping. This is a neutral migration brief for manual review, not a native import file for any product. Open it as text and adapt the fields you need; do not assume an app's Import button accepts this schema.
The greeting in the brief starts a new scene. If you are resuming a later point, preserve that original greeting as part of the character and supply the reviewed continuation note separately. Otherwise, a migration can accidentally restart the story while appearing to preserve its character.
Step 4 Map the writing into CrushOn AI deliberately
CrushOn is useful here because a hosted character editor lets you focus on the writing instead of configuring a model server. Its current web creation screen offers a PNG/JSON character-file import option under Character Photo & File. It also separates character Visibility from Public definition; choose Private and review definition visibility before saving a test.
What one JSON import populated and what needed review
On October 21, 2026 (PDT), we selected this original Iris Vale V2 JSON test card in the creation screen. The name, greeting and scenario populated in the draft. Introduction displayed the source file's creator_notes. However, Personality remained empty even though the source's personality field contained text. The file's separate description field was empty; this single observation does not establish the importer's mapping for every card format. Age was also blank, but the source had no dedicated age field—it mentioned 32 only inside the personality prose.
We did not click Create and Chat, save the character or generate a reply. This was a draft-field check, not a completed migration or a model-quality test. It demonstrates an available import route and why you should compare the resulting fields against your original. It does not establish support for every PNG, every card version, or a full chat transcript.
The test card above is different from the neutral handoff brief linked earlier. The card was the actual selected input; the handoff brief is a readable planning format, not an import file. If you try the card, inspect Personality and fill the explicit adult age before considering a private save. Do not turn creator notes into a public introduction without reviewing them.
Fill or repair the fields after import
Whether you start from an imported card or a blank character, the Basic Single Character Guide provides the field distinctions below. Manual mapping is useful for missing fields, incompatible source formats and deliberate changes to the new scene.
| Source material | Manual destination | What to check |
|---|---|---|
| Name and explicit adult age | Name and Age | Keep the intended identity; do not infer age from the avatar |
| Personality and physical description | Personality and Appearance as appropriate | Do not put all model-facing behavior only in Introduction |
| First message or chosen alternate greeting | Greeting | Decide whether this is a fresh start or a continuing scene |
| Premise and setting | Scenario | Keep durable setup separate from the latest checkpoint |
| Owned dialogue examples | Example Conversation | Demonstrate voice without pasting the full archive or inventing examples |
| System instructions and prompt overrides | Review intent and adapt to supported controls | Identical wording does not establish identical placement or priority |
| Lorebook or character book | Keep the original; select currently relevant facts | Trigger keys, ordering and retrieval settings do not automatically transfer |
| Transcript, branches and attachments | External archive plus a reviewed continuation note | This manual route does not import native chat history |
For Iris, place the evidence-seeking behavior and visitor-agency rule in Personality. Put the museum premise in Scenario. Use the opening question in Greeting. If the original has no example conversation, leave that absence deliberate rather than inventing a past exchange and calling it history.
Introduction is the reader-facing description. A polished profile blurb is useful, but it is not the only place to store instructions the character should follow. Also inspect placeholders from the source application. A macro that substitutes a user name in one frontend may remain literal text elsewhere.
CrushOn's Saved Memories is an in-app save, load and summarization workflow with its own sharing choices. Character-file import and Saved Memories should not be confused with verified import of another service's complete chat archive. Use the field review and checkpoint workflow even when a character card loads.
Step 5 Reopen the destination and test a small scene
Save a separate private copy, then reopen it. Check the name, greeting, personality, scenario and any media you intended to keep. Confirm that public-facing fields contain only material you intend that audience to see. For the broader distinction, our hosted and local roleplay comparison explains which responsibilities remain with you.
Use one short continuation probe for Iris: “Before we touch the cabinet, what do we know, and what remains unknown? Leave my next action to me.” Inspect whether the cabinet's contents remain unknown and the visitor's decision remains open. This is a suggested acceptance check, not a newly recorded model result or proof of long-term memory.
Do not try to judge an entire platform from one reply. If the scene fails, first check the mapping: did you paste the behavior into a display-only field, put an old ending into the new scenario, or omit a negative fact such as “the key has not been found”? Correct that specific input before assuming a larger context window is the answer.
When a native import is available, also inspect branches, selected alternatives, lorebook settings and attachments. List what survived, what changed and what you intentionally excluded. A completed move can be useful without being lossless, provided the missing material is not a surprise.
A reproducible local check of the downloadable brief
A file that parses can still contain the wrong facts. Save the downloaded example as iris-migration-example-v1.json, place this code beside it as check.mjs, and run node check.mjs with a current Node.js runtime. It uses only built-in modules and makes no network requests.
import {readFileSync} from "node:fs";
import assert from "node:assert/strict";
const brief = JSON.parse(readFileSync("iris-migration-example-v1.json", "utf8"));
const restored = JSON.parse(JSON.stringify(brief));
assert.deepEqual(restored, brief);
assert.equal(restored.character.age, 32);
assert.equal(restored.character.example_conversation, "");
assert.equal(restored.scene_checkpoint.unknowns.cabinet_contents, null);
assert.equal(restored.scene_checkpoint.pending_decision.answer, null);
console.log("Five local checks passed. These checks do not test an application import.");
The supplied example passed these five checks: JSON round-trip equality, adult age, an intentionally empty example field, unknown cabinet contents and an unanswered visitor decision. This confirms the checked local values, not product compatibility or model recall. It would not catch every kind of migration error; extend the checks to the facts your own story depends on.
Frequently asked questions
Can I transfer a Character.AI conversation directly into CrushOn AI?
This guide does not establish a supported one-click route. Keep the source archive and use the manual character-field and checkpoint workflow above when you want to rebuild your own material. An export being available from one product does not mean another can import it.
Is PNG better than JSON for a character card?
Neither extension alone establishes compatibility. A supported PNG card can combine an image and embedded character data; JSON can make structured fields easier to inspect. Retain the original file, check the destination's supported card version and test a copy. A plain avatar PNG is not a character definition.
Will moving the character preserve its personality exactly?
It can preserve the words you authored. Responses can still change because the model, prompt assembly, memory inputs and generation settings differ. Keep a short voice example and a scene check to evaluate the result, rather than promising the same behavior.
Should I paste my entire history into Personality?
Usually that mixes separate jobs. Personality describes durable behavior; a transcript is an archive; a checkpoint records the current scene. Preserve all three separately and put only the relevant material into the destination's supported fields.
Can a summary replace my original backup?
No. A summary deliberately removes wording and detail. It can help resume a scene, but it cannot reconstruct every exchange, attachment or branch. Keep the unchanged source until you have checked the destination and retain it if the original history matters.
Choose the migration goal before choosing the tool
If your goal is to resume writing with an original character in a hosted app, start hosted AI roleplay with your rebuilt CrushOn AI character. Map the fields, choose private visibility and test a small scene. If preserving native files and controlling the backend are central requirements, examine the specific SillyTavern or KoboldAI Lite import route and its losses instead.
For larger worlds, our lorebook organization guide covers what to keep as focused world reference. Good migration preserves the distinctions that make a story usable, not simply the largest amount of text.
