Skip to content

Repository files navigation

MTG Cheaper Deck

Sugeridor de cartas más baratas para mazos de Magic: The Gathering. Pegás el enlace de un mazo público de Moxfield y te sugiere alternativas más baratas y funcionalmente similares para cada carta, con puntaje de similitud y ahorro real (no solo "misma categoría de precio", sino cartas que realmente hacen algo parecido).

Qué hace

  1. Lee el mazo completo desde Moxfield (comandante + mainboard).
  2. Sincroniza una base local con todas las cartas de Magic desde el bulk data de Scryfall (una vez al día, no carta por carta).
  3. Para cada carta del mazo busca candidatas más baratas: mismo color identity, tipo compatible, legal en el formato del mazo, sin repetir cartas que ya están en el mazo.
  4. Puntúa cada candidata por similitud real: keywords compartidas, solapamiento de texto de reglas (oracle text), cercanía de costo de maná, popularidad en EDHREC.
  5. Muestra las mejores sugerencias por carta, con precio original, precio sugerido, ahorro en $ y %, y la razón de la similitud.

Interfaces

  • webapp.py — app web local (Flask). Pensada para revisar el mazo entero de una: imágenes reales de Scryfall, orden y filtro por categoría, reemplazo con un click sin recargar la página, y el total del mazo actualizándose en vivo. La más cómoda para uso normal.
  • interactive.py — modo interactivo de terminal (usa rich). Recorre el mazo carta por carta, deja elegir un reemplazo o pasar a la siguiente.
  • main.py — reporte de una sola pasada. Tabla en consola o --json para integrarlo con otra cosa.

Setup

python -m venv .venv
# Windows: .venv\Scripts\activate — Linux/Mac: source .venv/bin/activate
pip install -r requirements.txt

Crear un archivo .env en la raíz:

DATABASE_URL=sqlite:///./data/cards.db

Sincronizar la base de Scryfall (necesario antes de la primera corrida, y después una vez al día si querés precios frescos):

python sync_scryfall.py

Uso

# App web (abre http://127.0.0.1:5000 en el navegador)
python webapp.py

# Modo interactivo de terminal
python interactive.py "https://moxfield.com/decks/TU-DECK-ID"

# Reporte de una sola pasada
python main.py "https://moxfield.com/decks/TU-DECK-ID" --top-n 5 --json

Cómo se calcula el puntaje

puntaje = 3 × similitud de keywords
        + 2.5 × similitud de texto (oracle text)
        + 1 × cercanía de costo de maná
        + 1 × popularidad en EDHREC

Cada término va de 0 a 1, así que el máximo teórico es 7.5 (en la práctica casi nunca se acerca, haría falta texto casi idéntico).

  • 3.0 o más: coincidencia fuerte — comparten mecánica real.
  • 1.5 a 3.0: coincidencia moderada — algo en común, no es un calco.
  • Menos de 1.5: coincidencia débil — sobre todo mismo tipo/color/popularidad.

Arquitectura

  • No pega a la API de búsqueda de Scryfall carta por carta. Sincroniza el bulk data (oracle-cards, ~38k cartas) una sola vez y lo guarda en una base local. El motor de base de datos es intercambiable con solo cambiar DATABASE_URL (ver db.py, usa SQLAlchemy Core) — SQLite por defecto, sin instalar nada extra.
  • El cliente de Moxfield (moxfield_client.py) usa el endpoint no oficial api2.moxfield.com, aislado del resto del pipeline — si Moxfield cambia su API interna, el fallo queda contenido ahí.
  • El scoring (scoring.py) es reglas + SQL, sin machine learning: overlap de keywords, overlap de texto tokenizado, cercanía de cmc, popularidad EDHREC. Filtra por color identity con un bitmask precalculado (rápido y portable entre motores de DB).
  • sync_scryfall.py corre aparte, pensado para cron diario — no bloquea el flujo del usuario.

Limitaciones conocidas

  • El endpoint de Moxfield no es oficial y puede cambiar sin aviso.
  • Los precios vienen del snapshot diario de Scryfall, no son en tiempo real.
  • Pensado para uso local de un solo usuario — sin autenticación ni manejo de sesiones concurrentes, no exponer a internet sin cambios.

Créditos y aviso legal

Este es un proyecto de fan, sin afiliación con Wizards of the Coast, Moxfield o Scryfall. Los datos de cartas e imágenes provienen de la API de Scryfall, y la lectura de mazos usa un endpoint no documentado de Moxfield. Magic: The Gathering es marca registrada de Wizards of the Coast LLC.

Licencia

MIT

About

Sugeridor de cartas más baratas para mazos de Magic (Moxfield + Scryfall)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages