Imports chat logs from the vanilla F-Chat 3.0 Android app (net.f_list.fchat, ../chat3clientForAndroid) into Solstice (../Solstice), which cannot read them itself because Android sandboxes each app's data.
import_vanilla_logs.py does the whole trip in one run:
- Extract the binary logs off the device with ADB (
run-asfor debuggable builds -> root ->adb backup, first that works). - Convert them to the Horizon export format v2 restricted to logs (
../Horizon/docs/export-format.md) - the vanilla binary record layout is byte-identical to Horizon/Solstice, so this is a binary -> JSON-zip decode. - Serve the desktop side of the Horizon Device Sync protocol (
../Solstice/mobile/sync/) on the LAN and show the QR code; scan it in Solstice via Data Manager -> Device Sync.
./import_vanilla_logs.py # asks for your F-List account name, or pass --accountUseful flags: --dry-run --out logs.zip (convert only; the zip also imports through Horizon's Data Manager), --from-dir/--from-tar/--from-ab (skip ADB), --character NAME (filter), --qr-png qr.png, --save-upload phone.zip (keep the logs Solstice uploads back; discarded by default), --self-test.
Requires python3 and adb; the Python dependencies (cryptography, and qrcode when the qrencode CLI is absent) install themselves on first run into a private venv under ~/.cache/vanilla-importer/ (disable with --no-bootstrap). The script also carries PEP 723 metadata, so uv run import_vanilla_logs.py works too. Without any QR renderer, paste the printed sync code into Solstice's "Enter code manually".
Verified against Solstice's real sync client (mobile/sync/client.ts driven by Node against this server), the AES-256-GCM known-answer vector from crypto.test.ts, and zbarimg decoding of the generated QR.