manifold migrate mangadex-to-anilist [flags]Exports your MangaDex library, matches each title to AniList (external links, title search, Vectorize embeddings), then creates private AniList list entries. Optional chapter progress comes from MangaDex read markers.
Flags
--anilist-token <token>
AniList access token override. Resolve order: flag → MANIFOLD_ANILIST_TOKEN → login anilist keychain.
Example:
manifold login anilist
manifold migrate mangadex-to-anilist--mangadex-token <token>
MangaDex personal token with the manga.read scope, used to export the
library. Falls back to MANIFOLD_MANGADEX_TOKEN. If omitted, the command uses the
password-grant flags below.
Example:
manifold migrate mangadex-to-anilist --mangadex-token "$MANIFOLD_MANGADEX_TOKEN"--apply
Create or update AniList entries. Without this flag, the command runs through export and matching but does not write to AniList.
- Default:
false
Example:
manifold migrate mangadex-to-anilist --apply--skip-progress
Create list entries without copying chapter progress from MangaDex read markers.
- Default:
false
Example:
manifold migrate mangadex-to-anilist --skip-progress --apply--use-cache
Reuse the snapshot, match results (including unmatched titles), and read-marker
progress stored in .tmp instead of fetching them again.
- Default:
false
Example:
manifold migrate mangadex-to-anilist --phase match --use-cache--limit <n>
Process only the first n entries after the MangaDex export. Use this for a
small canary run before processing the full library.
- Default: no limit
Example:
manifold migrate mangadex-to-anilist --limit 25--phase <phase>
Run one stage instead of the complete migration. Accepted values are all,
export, match, and push.
- Default:
all
Example:
manifold migrate mangadex-to-anilist --phase export--mangadex-client-id <id>
OAuth client ID for the password-grant fallback. Falls back to
MANIFOLD_MANGADEX_CLIENT_ID.
Example:
manifold migrate mangadex-to-anilist --mangadex-client-id "$MANIFOLD_MANGADEX_CLIENT_ID"--mangadex-client-secret <secret>
OAuth client secret for the password-grant fallback. Falls back to
MANIFOLD_MANGADEX_CLIENT_SECRET.
Example:
manifold migrate mangadex-to-anilist --mangadex-client-secret "$MANIFOLD_MANGADEX_CLIENT_SECRET"--mangadex-username <username>
MangaDex account username for the password-grant fallback. Falls back to
MANIFOLD_MANGADEX_USERNAME.
Example:
manifold migrate mangadex-to-anilist --mangadex-username "$MANIFOLD_MANGADEX_USERNAME"--mangadex-password <password>
MangaDex account password for the password-grant fallback. Falls back to
MANIFOLD_MANGADEX_PASSWORD.
Example:
manifold migrate mangadex-to-anilist --mangadex-password "$MANIFOLD_MANGADEX_PASSWORD"Matching
Per title, matching prefers:
- AniList external link (
links.al) - MAL external link (
links.mal) - Title search
- Vectorize embeddings (Workers AI) when candidates remain ambiguous
Exact title matches can bypass the embedding acceptance bar. AniList writes are spaced (~1.2–2.5 s) with 429 backoff on library-wide passes.
Workflow
- Export — MangaDex library + read markers into
.tmp - Match — cascade above into AniList candidates
- Push —
SaveMediaListEntryas private (+ optional progress)
Phases are resumable. Delete the CLI .tmp directory to force a fresh pass. Long MangaDex runs refresh the token about every 15 minutes.
manifold migrate mangadex-to-anilist # dry-run
manifold migrate mangadex-to-anilist --apply
bun run manifold migrate mangadex-to-anilist --skip-progress --apply
bun run manifold migrate mangadex-to-anilist --phase match --use-cacheMangaDex auth falls back to password-grant credentials in cli/.env, or pass
--mangadex-token with a personal token that has manga.read scope.