Appearance
Ingest Magic the Gathering
Comment Magic a été branché sur le pipeline scan le 2026-05-07.
TL;DR
- Source de données : Scryfall, bulk-data
default_cards(toutes les éditions, ~85 k cartes physiques après filtrage des cartes digital-only MTGO/Arena). - Aucune migration nécessaire — le schéma multi-TCG (
cards.tcg,cards.base_id,cards.variant) ajouté pour One Piece accueille MTG sans changement. - MTG ne passe pas par
tcg-vision(Tormknd n'a pas d'index FAISS pour Magic) — les scans MTG résolvent via/scan-lab(notre pipeline pgvector + DINOv2). - Throughput observé : ~213 cartes/seconde côté ingest (download CDN Scryfall en concurrence 12), ~9 cartes/seconde côté embedding (DINOv2 small CPU).
Comment lancer l'ingest
bash
# Catalogue complet (default-cards Scryfall, ~85 k cartes, ~13 GB d'images)
docker compose --env-file .env -f docker/compose.yml run --rm \
-e INGEST_TCG=mtg ingest
# Un seul set (smoke test — Limited Edition Alpha = 295 cartes / ~80 MB)
docker compose --env-file .env -f docker/compose.yml run --rm \
-e INGEST_TCG=mtg -e INGEST_SETS=lea ingest
# Smaller alternative — `unique_artwork` (1 ligne par illustration, ~57 k)
docker compose --env-file .env -f docker/compose.yml run --rm \
-e INGEST_TCG=mtg -e INGEST_MTG_BULK=unique_artwork ingestPuis pour peupler les embeddings :
bash
docker compose --env-file .env -f docker/compose.yml run --rm \
--entrypoint "node dist/embedCatalogLab.js" \
-e INGEST_LAB_TCG=mtg ingestVariants MTG (vs One Piece)
Contrairement à OPTCG (qui retourne plusieurs entrées partageant le même card_set_id pour les arts parallèles), Scryfall dé-duplique déjà les éditions via des collector_number distincts au sein d'un même set. Donc pas besoin de assignVariantIds côté Magic — chaque ligne Scryfall est déjà une édition unique avec son propre id PK.
Le seul cas qui génère plusieurs lignes pour une même carte physique : les double-faced cards (transform / mdfc). Le recto reçoit l'id de base ; le verso reçoit ${baseId}_back avec variant='back'. Les deux faces sont indexées indépendamment dans card_embeddings_lab parce qu'elles sont scannables séparément.
Pourquoi pas tcg-vision ?
tcg-vision (le sidecar de Tormknd) embarque un index FAISS pré-calculé qui couvre Pokémon (~26 k) + One Piece (~4 k) + un peu de Lorcana. Magic n'en fait pas partie. Deux options :
- Demander à Tormknd de l'ajouter à son
tgc-appet rebuild son index FAISS — pas de code de notre côté, mais on dépend de son rythme. - Utiliser notre pipeline pgvector — ingest via Scryfall, embed avec notre sidecar
embeddings:, query via/scan-lab. Aucune dépendance externe, mais c'est la première vraie utilisation prod du chemin pgvector.
On a pris l'option 2 parce que (a) on voulait de toute façon valider notre pipeline pour s'affranchir de Tormknd à terme, et (b) MTG est l'occasion idéale — c'est un TCG complet qui n'existe nulle part ailleurs côté backend.
Voir aussi
tcg-collector-backend/docs/INGEST.md§Magic the Gathering — doc technique complète (schéma, mapping de champs, quirks)- Architecture du scan de cartes — vue d'ensemble du pipeline backend
- Plan — validation pgvector via /scan-lab — historique des phases A → D