Skip to content

anilist-to-mal

Populate MyAnimeList manga from your AniList list (status + chapter progress).

manifold migrate anilist-to-mal [flags]

One-shot list → list importer: reads your AniList manga library and writes matching entries onto MAL (status, is_rereading, and num_chapters_read). Anime is never touched. The registry and continuous MAL backup projector are not involved.

MAL is a disposable downstream backup. Prefer wiping MAL first, then importing from AniList while every other MAL writer stays disconnected.

Prerequisites

  1. login anilist and login mal
  2. Pause or disconnect every MAL writer (including Manifold’s MAL backup)
  3. Optional clean slate: mal wipe manga --apply --backup-paused
  4. Dry-run this command, review unmatched titles, then --apply

Flags

--anilist-token <token>

Optional AniList access token override. Resolve order: flag → MANIFOLD_ANILIST_TOKEN → login anilist keychain.

Example:

manifold login anilist
manifold migrate anilist-to-mal

--mal-token <token>

Optional MAL access token override. Resolve order: flag → MANIFOLD_MAL_TOKEN → login mal keychain. A supplied token does not refresh.

--apply

Write list status and chapter progress to MAL. Without this flag the command only reports matches.

  • Default: false

Example:

manifold migrate anilist-to-mal --apply --backup-paused

--backup-paused

Acknowledge that every other MAL writer is paused or disconnected. Required with --apply. When MANIFOLD_TOKEN is set, the command also GETs /v1/auth/mal and refuses --apply while Manifold’s backup connection is still active. --backup-paused does not bypass that check.

--skip-progress

Do not seed num_chapters_read from AniList progress. Status (and reread flag) still write.

  • Default: false

--limit <n>

Only process the first N AniList entries after export. Useful for smoke dry runs on large libraries.

--api-origin <url> / --api-token <token>

Personal API origin and token for the backup-connection check. Fall back to MANIFOLD_API_ORIGIN and MANIFOLD_TOKEN.

Matching

  1. AniList idMal when the media carries a MAL cross-link
  2. Title search via the public MAL client id (MANIFOLD_MAL_CLIENT_ID or the client id stored in the keychain session): unique exact normalized title (including synonyms), then a unique conservative partial. MAL accepts search q only when it is 3–64 characters — shorter titles are skipped, longer ones are truncated for the query. Search failures count as errors on the progress line (no per-error console spam) and stay unmatched; they do not abort the run.
  3. Ambiguous or empty candidate sets stay unmatched — never forced

Status map

AniList MAL
CURRENT reading
PLANNING plan_to_read
COMPLETED completed
DROPPED dropped
PAUSED on_hold
REPEATING reading + is_rereading=true

Chapter progress floors to an integer and becomes num_chapters_read unless --skip-progress is set.

Behaviour

  • Dry-run by default; no MAL PATCH until --apply --backup-paused
  • Title search and list writes both pace at 1.5 s between HTTP calls (~40/min floor; same as wipe). 429/5xx retry up to three times.
  • Per-entry write failures are reported; successful entries still commit
  • Exit code 1 when any entry is unmatched or fails to write
  • Does not change tracker authority, registry bindings, or the continuous backup projector (which remains status-only after reconnect)

Typical flow

manifold login anilist
manifold login mal
# disconnect Manifold MAL backup in admin / credentials
bun run manifold mal wipe manga --apply --backup-paused
bun run manifold migrate anilist-to-mal
bun run manifold migrate anilist-to-mal --apply --backup-paused
# reconnect MAL backup only after the import looks right
Navigation

Type to search…

↑↓ navigate↵ selectEsc close