Docker-based sync backend for the Anki app (afrima/anki-sync-server, the official Rust sync server). Supports multiple independent accounts per instance, the repo's multi-instance pattern, port collision avoidance, Caddy wiring, and update/fresh/cancel reinstall detection. No Authelia gate — this is a raw sync API the Anki client talks to, not a browser session, so a forward_auth portal in front of it would just break every sync request; SYNC_USER1/SYNC_USER2/... is its own auth boundary. Companion services/anki-sync-server.md covers client setup (Desktop, AnkiDroid, AnkiMobile) and the Quizlet import/export walkthrough. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014DyceEVVeQ33EeS6C1PDv5
83 lines
3.9 KiB
Markdown
83 lines
3.9 KiB
Markdown
## Client setup — pointing Anki at this server instead of AnkiWeb
|
|
|
|
Every client below needs the **Sync URL** and one of the **accounts** shown
|
|
higher up in this README. Do this on every device you want synced — a client
|
|
still pointed at AnkiWeb won't see collections synced here, and vice versa.
|
|
|
|
### Anki Desktop (2.1.66 and newer)
|
|
1. **Preferences → Network**
|
|
2. Tick **"Self-hosted sync server"**
|
|
3. Paste the Sync URL into the field that appears
|
|
4. **Sync → log in** with one of the accounts above
|
|
|
|
### Anki Desktop (older than 2.1.66)
|
|
There's no GUI field yet — set an environment variable before launching Anki
|
|
instead, then sync normally:
|
|
```bash
|
|
# Linux/macOS
|
|
export SYNC_ENDPOINT="https://your-sync-url/"
|
|
anki
|
|
|
|
# Windows (Command Prompt)
|
|
set SYNC_ENDPOINT=https://your-sync-url/
|
|
anki.exe
|
|
```
|
|
Upgrading Anki to 2.1.66+ is the easier long-term fix — do that if you're
|
|
setting this up for anyone who isn't comfortable with environment variables.
|
|
|
|
### AnkiDroid
|
|
**Settings → Advanced → Custom sync server**, then enter the Sync URL and
|
|
log in with one of the accounts above (AnkiDroid 2.16+; update the app if
|
|
this option isn't there).
|
|
|
|
### AnkiMobile (iOS)
|
|
**Settings → Advanced → Custom Sync Server**, same as AnkiDroid — enter the
|
|
Sync URL and log in.
|
|
|
|
### First sync on each device
|
|
The very first sync from a device that already has a local collection will
|
|
ask whether to upload local data or download from the server — pick upload
|
|
from whichever device has your real collection, and download on every other
|
|
device, or you'll end up with two different collections that never merge.
|
|
|
|
## Importing your existing Quizlet sets
|
|
|
|
This server only handles syncing already-existing Anki collections — it
|
|
doesn't import anything itself. Quizlet import happens once, locally, in the
|
|
Anki desktop app, before your first sync:
|
|
|
|
1. **In Quizlet:** open the set → **Export** → choose the plain-text /
|
|
tab-separated format (Quizlet's export dialog lets you pick the delimiter
|
|
between term and definition, and between rows — tab and newline are the
|
|
Anki-friendly defaults) → copy the exported text or download it as a
|
|
`.txt`/`.csv` file.
|
|
2. **In Anki Desktop:** **File → Import**, pick the file (or paste the text
|
|
into a `.txt` file first if you copied it to the clipboard).
|
|
3. Map the two columns to **Front** and **Back** in the import dialog, pick
|
|
or create the deck and note type, and import.
|
|
4. For **math facts or other simple front/back cards**, the Basic note type
|
|
is enough. For **more complex cards** (extra example fields, images,
|
|
audio, cloze deletions), switch the note type in the import dialog to a
|
|
template with more fields, or convert cards afterward — Anki's own
|
|
built-in note types (Basic, Basic (and reversed card), Cloze) cover most
|
|
of what Quizlet's own card types can do.
|
|
5. Sync from this device once the import looks right, so the imported deck
|
|
becomes the copy every other device downloads.
|
|
|
|
### Exporting back out (Anki → Quizlet or anywhere else)
|
|
**File → Export**, choose "Notes in Plain Text" and pick the deck — this
|
|
produces the same tab-separated format Quizlet's own import expects, so the
|
|
round trip works in both directions.
|
|
|
|
## Why spaced repetition here actually reschedules failed cards
|
|
|
|
Anki's scheduler (FSRS, the default since recent Anki versions) tracks a
|
|
per-card memory-strength estimate and schedules the next review right before
|
|
you'd be expected to forget it. Answering "Again" on a card doesn't just
|
|
requeue it for later the same session — it lowers that card's estimated
|
|
strength, which shortens every subsequent interval for it until you've
|
|
proven you know it again, so a card you keep failing gets shown far more
|
|
often than one you consistently get right. This is scheduling logic inside
|
|
the Anki client itself; this sync server only stores and syncs the resulting
|
|
review history, it doesn't change how reviews are scheduled.
|