Skip to content

Migrating from SillyTavern

Luker is a downstream fork of SillyTavern and maintains full data compatibility. Migrating from SillyTavern to Luker takes just a few simple steps, and all your data can be used seamlessly.

Migration Steps

1. Back Up Your Existing Data

Before migrating, it's recommended to back up SillyTavern's data/ directory:

bash
cp -r SillyTavern/data/ SillyTavern-data-backup/

2. Install Luker

Follow the steps in Getting Started to install Luker.

3. Copy the Data Directory

Copy SillyTavern's data/ directory to Luker's data root (default: ./data):

bash
cp -r SillyTavern/data/* Luker/data/

If you've customized dataRoot in config.yaml, copy to the corresponding path.

4. Migrate the Configuration File

Migrate your customized settings from SillyTavern's config.yaml to Luker's config.yaml. It's recommended to start with Luker's default config file and migrate your custom values one by one, rather than overwriting the entire file.

5. Migrate Third-Party Extensions

If you have third-party extensions installed, copy SillyTavern's global extensions directory to Luker:

bash
cp -r SillyTavern/public/scripts/extensions/third-party/* Luker/public/scripts/extensions/third-party/

6. Copy User Settings (Multi-User Mode)

If you have multi-user mode enabled (enableUserAccounts: true), user data is stored in data/<username>/ subdirectories. The directory structure is identical to SillyTavern's — just copy them over.

7. Start Luker

bash
node server.js

On first launch, Luker will automatically detect the existing data and load it normally.

Data Compatibility

Luker is fully compatible with SillyTavern's data formats. The following data types can be used directly:

Data TypeCompatibilityNotes
Character Cards (PNG/JSON)✅ Fully compatibleSupports V1/V2 specs
Chat Logs (.jsonl)✅ Fully compatibleIncremental sync endpoints are backward compatible
World Info✅ Fully compatibleEntry format unchanged
Presets✅ Fully compatibleLuker automatically separates connection parameters
Personas✅ Fully compatible
Extension Settings✅ Fully compatibleThird-party extensions work as before
Group Chats✅ Fully compatible
API Keys (secrets)✅ Fully compatiblesecrets.json format unchanged

Luker's Additional State Files

During operation, Luker generates some additional state files in the data directory to store data for Luker-exclusive features:

  • .luker-state.<chat_id>.json — Chat state files storing integrity checksums for incremental sync, etc.
  • Character card state files — Storing card-bound presets, Memory Graph data, editing assistant sessions, etc.
  • Preset state files — Storing preset-associated world info and other extension state

These files do not affect SillyTavern's original data. If you need to migrate data back to SillyTavern, simply ignore these state files. SillyTavern won't read them and won't error due to their presence.

Notes

  1. Node.js Version: Luker requires Node.js >= 20. Verify your Node.js version before migrating.

  2. Third-Party Extensions: SillyTavern's third-party extensions work normally in Luker. Luker uses the same extension loading mechanism, with extensions located in public/scripts/extensions/third-party/.

  3. Configuration File: SillyTavern's config.yaml is format-compatible with Luker's, but Luker adds some new configuration sections (such as sso, hostWhitelist, etc.). Settings like requestProxy already exist in SillyTavern and require no additional handling. It's recommended to start with Luker's default config.yaml and migrate your custom settings. See Configuration for details.

  4. Preset Decoupling: Luker separates API connection parameters from presets. After migration, your presets still work normally — Luker automatically handles field classification during loading.

  5. Bidirectional Compatibility: Since Luker doesn't modify SillyTavern's original data formats, you can switch between the two at any time. Just note that data generated by Luker-exclusive features (such as Memory Graph, Orchestrator) won't be available in SillyTavern.

  6. Docker Deployment: If you're using Docker, refer to Luker's provided docker-compose.yml reference configuration and mount the data directory as a volume.

Built upon SillyTavern