Memindahkan karakter antaraplikasi berbeda dengan memindahkan datamu keluar dari sebuah aplikasi. Percakapan, memori, dan pengaturan ada di basis data layanan; karakter biasanya berupa artefak mandiri yang bisa kamu pegang sebagai berkas. Perbedaan itulah yang membuat kartu layak dipahami — kartu yang benar-benar kamu miliki adalah satu-satunya bagian dari setup-mu yang bertahan ketika sebuah aplikasi tutup, mengubah harga, atau berubah menjadi sesuatu yang tak lagi ingin kamu pakai.
Kartu karakter sebagai sebuah berkas
Menurut spesifikasi komunitas, kartu adalah berkas PNG (atau APNG) biasa dengan definisi karakter ditulis ke dalam chunk tEXt — blok teks berlabel yang diabaikan penampil gambar tetapi dibaca aplikasi yang mengenali kartu. JSON-nya disimpan dalam UTF-8 yang dikodekan base64. Kartu versi 1 dan 2 memakai chunk bernama chara; kartu versi 3 memakai chunk terpisah bernama ccv3. Sebagian aplikasi juga mengizinkanmu mengekspor objek yang sama sebagai berkas .json polos, yang isinya identik tetapi tanpa gambar avatar.
Spesifikasi V3 menambahkan wadah kedua, CHARX (ekstensi file .charx): arsip ZIP dengan card.json di akar dan direktori assets/ di sebelahnya, dirujuk dari kartu lewat URI embeded://. CHARX ada karena kartu modern bisa membawa satu set gambar ekspresi, ilustrasi latar, atau audio — dan tak satu pun dari itu muat di dalam chunk teks pada ukuran yang masuk akal.
Konsekuensi praktis dari desain dua chunk ini: sebuah kartu bisa tampak lengkap sekaligus kosong, tergantung siapa yang membacanya. Aplikasi yang hanya mengenal chunk chara tidak melihat apa pun di berkas yang murni V3. Dalam praktiknya, perkakas yang menulis V3 umumnya menulis kedua chunk sekaligus supaya satu berkas tetap terbuka di klien lama maupun baru — tetapi itu kebaikan hati aplikasi pengekspor, bukan jaminan formatnya.
Tiga generasi, kolom demi kolom
Mengetahui generasi kartumu memberi tahu apa saja yang mungkin selamat saat impor, bahkan sebelum kamu mengujinya.
| Format | Tempatnya | Isinya | Batas utama |
|---|---|---|---|
| V1 | chunk chara | Enam kolom datar: nama, deskripsi, kepribadian, skenario, pesan pertama, contoh dialog | Tanpa lorebook, tanpa system prompt, tanpa variasi sapaan |
| V2 | chunk chara, kolom bersarang di bawah data | Semua kolom V1 plus catatan pembuat, system prompt, instruksi pasca-riwayat, sapaan alternatif, character book tertanam, tag, pembuat, versi karakter, dan objek extensions bebas bentuk | Tanpa daftar aset; extensions memang bersifat khas aplikasi |
| V3 | chunk ccv3 | Semua isi V2 plus daftar aset, nickname, catatan pembuat multibahasa, daftar sumber, sapaan khusus grup, serta dekorator lorebook seperti kedalaman penyisipan dan aturan aktivasi | Tak terlihat oleh pembaca yang hanya melirik chara |
| CHARX | ZIP berisi card.json + assets/ | Kartu V3 plus berkas gambar dan audio yang dirujuknya | Hanya berguna bila aplikasi penerima bisa membongkarnya |
Ada dua detail dalam spesifikasi yang lebih penting daripada kelihatannya. Pertama, V2 mewajibkan editor tidak boleh merusak pasangan kunci-nilai yang tidak dikenal — objek extensions dimaksudkan tetap dipertahankan bahkan oleh aplikasi yang tidak memahaminya, dengan kunci diberi ruang nama per aplikasi agar tidak bentrok. Kedua, V3 adalah superset ketat dari V2, sehingga ada jalur turun: sebuah aplikasi bisa mengisi ulang objek V2 dari kartu V3, tetapi dekoratornya harus dibuang dalam prosesnya. Pembuangan itulah yang membuat perilaku berubah tanpa ada satu pun kolom yang tampak hilang. Fungsi masing-masing kolom dibahas di Anatomi Kartu Karakter.
Yang selamat, yang melemah, yang tak pernah ikut
Memilah isi kartu ke dalam tiga keranjang membuat risikonya kelihatan konkret.
| Keranjang | Isi | Alasan |
|---|---|---|
| Ikut dengan andal | Nama, deskripsi, kepribadian, skenario, pesan pertama, contoh dialog | Ini kolom V1; praktis semua aplikasi yang mengenali kartu membacanya |
| Ikut kalau pembacanya cukup baru | System prompt, instruksi pasca-riwayat, sapaan alternatif, lorebook tertanam, tag, metadata pembuat | Tambahan V2 — importer yang hanya mengerti V1 sekadar mengabaikannya |
| Melemah diam-diam | Dekorator lorebook, aset dan ilustrasi ekspresi, sapaan khusus grup, extensions beruang nama | Dibuang atau diratakan saat kartu V3 dibaca sebagai V2, atau saat CHARX diimpor klien yang hanya paham PNG |
| Tak pernah ikut | Riwayat chat, memori bentukan aplikasi, pilihan model, pengaturan sampler, status langganan | Semuanya bukan bagian dari kartu; semuanya ada di layanan |
Baris terakhir itulah yang mengejutkan orang di tengah migrasi. Mengekspor karakter bukan berarti mencadangkan sebuah hubungan — transkrip dan memori jangka panjang yang dibangun aplikasi untukmu adalah hal terpisah, biasanya lebih sulit didapat, dan sering tidak portabel dalam bentuk yang bisa dipakai. Sisi itu dibahas di Ekspor Data Aplikasi Pendamping, sedangkan alasan memori berperilaku seperti itu ada di Memori & Kesinambungan.
Ada dua hal yang berubah tanpa disentuh siapa pun. Kartu V3 menyimpan creation_date dan modification_date sebagai stempel waktu Unix, dan spesifikasinya meminta aplikasi menulis tanggal modifikasi saat ekspor — jadi kartu yang cuma kamu pindahkan akan terlihat seperti sudah diedit, dan satu-satunya jejak asal-usul yang masih bisa dipercaya adalah tanggal pembuatan aslinya. Kalau kamu menyimpan arsip kartu buatan sendiri, catat tanggalnya sebelum ekspor, bukan sesudahnya.
Impor yang ditolak juga belum tentu berarti kartunya rusak. Spesifikasi mengizinkan aplikasi langsung menolak file CHARX kalau ukurannya terlalu besar, filenya rusak, dienkripsi tanpa cara dekripsi yang didukung, atau memang bukan zip yang valid. Kalau satu aplikasi menolak file yang di aplikasi lain terbuka dengan lancar, coba buka dulu sebagai zip sebelum menyimpulkan karakternya hilang.
Kenapa kartu yang terimpor sempurna pun terasa berbeda
Anggap perpindahannya nirsusut dan setiap kolom tiba utuh. Karakternya tetap bisa terasa seperti orang lain, karena kartu hanyalah satu masukan di antara beberapa. Aplikasi penerima menyuntikkan system prompt dasarnya sendiri, menjalankan model berbeda, menerapkan pengaturan sampler sendiri, dan membagi jendela konteks dengan porsi berbeda antara lorebook dan percakapan berjalan. Kartu yang menganggarkan seribu token detail dunia di satu aplikasi bisa melihat sebagian besarnya terpotong di aplikasi lain.
Ini perlu dinyatakan terang-terangan, karena reaksi biasanya adalah mulai menyunting kartu — yang lalu merusaknya di aplikasi asal. Diagnosis konfigurasinya lebih dulu. Metode pembanding di Menulis Ulang Karakter Roleplay berlaku tanpa perubahan: pesan pembuka yang tetap, satu variabel sekali jalan. Kalau entri lorebook-mu berhenti terpicu, penyebab yang paling mungkin adalah perbedaan pemicu atau anggaran token, bukan teks yang hilang — lihat Membangun Dunia untuk Roleplay AI.
Aplikasi yang sama sekali tak punya pintu
Semua di atas mengandaikan kedua aplikasi bisa berbahasa kartu. Sebagian besar aplikasi pendamping untuk konsumen tidak. Karakternya hidup sebagai baris dalam basis data, editornya cuma menyodorkan kotak deskripsi pendek, dan tidak ada tombol ekspor — bukan karena datanya rumit, melainkan karena portabilitas bukan tujuan produk. Menilainya secara adil itu penting: aplikasi tertutup tidak otomatis lebih buruk, dan banyak orang memang tak pernah ingin pindah. Tetapi hal itu mengubah apa yang kamu pertaruhkan ketika menghabiskan berminggu-minggu memoles sebuah persona di dalamnya.
Periksa pintunya sebelum kamu membutuhkannya, bukan sesudah. Kalau sebuah aplikasi menyediakan ekspor kartu, biasanya hal itu disebut di pengaturan atau halaman bantuan, dan ekspornya akan menyebut nama format. Kalau kata "ekspor" tidak muncul di mana pun, anggap karakternya tak bisa diselamatkan dan simpan sendiri salinan teks yang kamu tulis — dokumen biasa berisi deskripsi, kepribadian, dan sapaan adalah cadangan kasar tapi efektif yang tak bisa dirusak perubahan format apa pun. Seberapa besar kendali penyuntingan yang diberikan tiap aplikasi sejak awal termasuk hal yang kami nilai di peringkat aplikasi, dan ulasan MusePick membahas satu aplikasi berorientasi roleplay pada dimensi ini.
Daftar periksa sebelum pindah
- Ekspor dalam format terkaya yang tersedia. Kalau PNG dan JSON sama-sama ada, ambil keduanya — JSON lebih mudah diperiksa dan diperbaiki, PNG membawa avatarnya.
- Catat generasinya. Dialog ekspor biasanya menyebut V2, V3, atau CHARX. Kalau tidak, asumsi teraman adalah V2.
- Jangan sentuh berkas aslinya. Mengekspor ulang dari aplikasi penerima bisa diam-diam menurunkan kartu V3 menjadi V2, dan dekorator tak bisa dipulihkan dari salinan yang sudah turun versi.
- Impor, lalu baca editornya kolom demi kolom. Bandingkan dengan kartu sumber: deskripsi, kepribadian, contoh dialog, sapaan, jumlah entri lorebook. Yang hilang ketahuan di sini, bukan di chat.
- Jalankan tiga pesan pembuka yang tetap. Satu ringan, satu bermuatan emosi, satu yang meminta karakter mengambil inisiatif — tiga yang sama di kedua aplikasi, supaya perbedaannya berarti.
- Bangun ulang yang tak terbawa format. Avatar dan gambar ekspresi, variasi sapaan, dan entri lorebook yang gagal tiba. Kerjakan paling akhir, setelah kamu tahu apa yang benar-benar hilang.
Dikerjakan dengan urutan itu, migrasi memakan waktu kurang dari sejam dan memberitahumu sesuatu yang bertahan lama: bagian mana dari karaktermu yang ada di dalam berkas, dan bagian mana yang ada di dalam aplikasi. Pembedaan itulah isi sebenarnya dari portabilitas, dan layak diketahui sebelum kamu membutuhkannya. Kalau kamu membangun karakter dari nol dengan rencana pindah di kemudian hari, Membuat Karakter Roleplay Pertamamu dan Cara Kerja Pembuat Karakter AI membahas apa yang sebaiknya ada di kartu, bukan di aplikasi.
Terkait di CompanionRank
Anatomi Kartu Karakter Ekspor Data Aplikasi Pendamping Membangun Dunia untuk Roleplay AIPertanyaan yang sering diajukan
Bisakah saya memindahkan kartu karakter dari satu aplikasi ke aplikasi lain?
Hanya kalau kedua aplikasi berbicara dalam format kartu yang sama. Aplikasi yang dibangun di atas spesifikasi kartu karakter komunitas membaca dan menulis berkas PNG dengan JSON kartu tertanam di dalamnya, jadi kartu yang diekspor dari satu aplikasi biasanya terbuka di aplikasi lain. Banyak aplikasi pendamping konsumen tidak pernah menampilkan berkas kartu sama sekali, dan pada aplikasi seperti itu karakternya tidak bisa dikeluarkan lewat jalur resmi mana pun.
Apa bedanya kartu karakter V2 dan V3?
V2 membungkus enam kolom V1 asli ke dalam objek data dan menambahkan system prompt, instruksi pasca-riwayat, sapaan alternatif, lorebook tertanam, tag, metadata pembuat, serta objek extensions. V3 adalah superset dari V2: ia mempertahankan seluruh kolom V2 dan menambah daftar aset, nickname, catatan pembuat multibahasa, daftar sumber, sapaan khusus grup, dan dekorator lorebook. V3 disimpan di chunk terpisah, sehingga kartu yang hanya V3 bisa terlihat kosong bagi pembaca yang hanya mengerti V2.
Kenapa karakter yang saya impor berperilaku berbeda di aplikasi baru?
Kartu hanyalah satu dari beberapa masukan. Aplikasi baru menyuntikkan system prompt, model, pengaturan sampler, dan anggaran konteksnya sendiri, dan bisa memangkas atau mengabaikan kolom yang tidak diimplementasikannya. Karakter yang isinya terbaca identik di kedua editor tetap bisa menghasilkan balasan berbeda, dan itu perbedaan konfigurasi, bukan impor yang gagal.