Si buscas un tutorial mira aquí -> https://github.com/Diphendara/MPCFillToPDF/wiki/Tutorial
Puedes buscarme en twitter/bsky como @diphendara o abrirme una issue por github
Convierte un archivo de proyecto de MPCFill (XML) en un PDF listo para imprimir en una imprenta local (A4, 3×3 cartas por página, doble cara).
El XML de MPCFill referencia imágenes alojadas en Google Drive. Esta herramienta las descarga, les quita el sangrado de MPC, las recoloca con un sangrado en espejo de 1 mm y monta el PDF con líneas de corte y marcas de impresora.
También soporta mazos de otros juegos de cartas descargándolos directamente desde webs especializadas (ver Webs soportadas).
| Web | URL de ejemplo |
|---|---|
| onepiece.gg | https://onepiece.gg/decks/nombre-del-mazo |
| deckbuilder.egmanevents.com | https://deckbuilder.egmanevents.com/?deck=CARTA:X,... o https://deckbuilder.egmanevents.com/d/CODIGO |
| deckbuilder.cardkaizoku.com | https://deckbuilder.cardkaizoku.com/?deck=2xOP01-001|3xOP01-002|... |
Pega la URL del mazo en la pestaña One Piece de la interfaz gráfica y pulsa Añadir.
| Web | URL de ejemplo |
|---|---|
| riftbound.gg | https://riftbound.gg/decks/nombre-del-mazo/ |
| piltoverarchive.com | https://piltoverarchive.com/decks/view/<UUID> |
| riftmana.com | https://riftmana.com/decks/nombre-del-mazo |
| riftbinder.com | https://riftbinder.com/decks/<ID> |
| riftdex.com | https://riftdex.com/deck/<UUID> |
Pega la URL del mazo en la pestaña Riftbound de la interfaz gráfica y pulsa Añadir.
Nota: Solo se pueden descargar mazos públicos. Si el mazo no está disponible (privado o eliminado), aparecerá un mensaje de error.
| Web | URL de ejemplo |
|---|---|
| lorcana.gg | https://lorcana.gg/decks/nombre-del-mazo/ |
| inkdecks.com | https://inkdecks.com/lorcana-metagame/deck-nombre-ID |
| dreamborn.ink | https://dreamborn.ink/es/decks/ID |
Pega la URL del mazo en la pestaña Lorcana de la interfaz gráfica y pulsa Añadir.
Nota: dreamborn.ink requiere que Google Chrome esté instalado, ya que la web usa protección anti-bots que solo un navegador real puede superar. El programa abre Chrome minimizado, carga la página y lo cierra automáticamente.
Las imágenes de los XMLs de MPCFill están alojadas en Google Drive. Sin configuración adicional, el programa las descarga usando gdown (peticiones anónimas), que puede recibir errores 429 — rate limit al descargar muchas imágenes seguidas.
Para evitarlo, configura una API Key de Google Drive (gratuita, no requiere OAuth ni cuenta de servicio):
- Ve a Google Cloud Console.
- Crea un proyecto (o usa uno existente).
- Activa la Google Drive API (Biblioteca → busca "Google Drive API" → Habilitar).
- Ve a Credenciales → Crear credenciales → Clave de API.
- (Opcional pero recomendado) Restringe la clave a la Google Drive API.
- Copia el archivo
config.example.jsony renómbralo aconfig.json:cp config.example.json config.json - Abre
config.jsony pega tu clave:{ "google_drive_api_key": "AIza..." }
config.jsonestá en.gitignorey nunca se sube al repositorio. Si no configuras la clave, el programa sigue funcionando congdowncomo antes.
- Python 3.10 o superior (descarga oficial). Durante la instalación marca "Add Python to PATH".
- Git (opcional, solo si clonas el repositorio).
Verifica:
python --version
Clónalo:
git clone <url-del-repo> MPCFillToPDF
cd MPCFillToPDF
O descarga el ZIP del repositorio y descomprímelo.
python -m venv .venv
.venv\Scripts\activate # Windows
source .venv/bin/activate # Linux/macOS
pip install -r requirements.txt
Instala Pillow, reportlab y gdown.
Lanza la ventana:
python -m gui.main
Aparece una ventana con:
- Seleccionar XMLs… abre el explorador para elegir uno o varios
.xml(Ctrl+click para varios). - Lista con los archivos en cola y botones para Quitar selección / Vaciar.
- Conservar caché: si está marcado, no borra
workdir/rawyworkdir/bledal terminar (acelera futuras regeneraciones del mismo XML). Por defecto desactivado. - Generar PDF(s): arranca el proceso. Solo se activa cuando hay al menos un XML en la lista o un mazo añadido desde una web.
- Estado + barra de progreso se actualizan durante la generación.
Antes de generar:
- Si las barajas pueden fusionarse sin dejar huecos (suma múltiplo de 9), aparece un diálogo informativo con el plan.
- Si alguna baraja dejará huecos en su PDF, aparece un diálogo de advertencia "¿Continuar de todos modos?".
Cuando termina, se abre automáticamente la carpeta out/ en el Explorador.
pip install pyinstaller
python build_exe.py
Genera dist/MPCFillToPDF.exe. El ejecutable es portable: en la carpeta donde lo dejes creará automáticamente out/ y workdir/ al ejecutarse por primera vez.
La imprenta cobra cada A4 entera aunque no esté llena. Como cada página tiene 3×3 = 9 cartas, si el total no es múltiplo de 9 la última página queda con espacios vacíos pagados.
El sistema lo gestiona así:
- Cuenta las cartas de cada XML antes de empezar.
- Si la suma de los XMLs no múltiplos de 9 sí es múltiplo de 9 → los fusiona en un único PDF llamado
<a>_<b>_..._union.pdf. Cada carta conserva su reverso original. - Si la suma sigue sin ser múltiplo de 9 → avisa de los huecos y pide confirmación.
- Cuando hay fusiones, escribe
resumen.txtdentro de la carpeta de la ejecución con el desglose:PDF: mazo_a_mazo_b_union.pdf (99 cartas) - 95 carta(s) de mazo_a.xml - 4 carta(s) de mazo_b.xml
MPCFillToPDF/
├── out/ ← una subcarpeta por ejecución (DD_MM_YYYY_HH-MM-SS) con los PDFs y, si hay fusión, resumen.txt
├── workdir/ ← caché temporal: raw/ (descargas) y bled/ (recortes)
├── gui/
│ ├── main.py ← entrada GUI (Tkinter)
│ └── paths.py ← resolver out/ y workdir/ junto al .exe
├── src/
│ ├── parser.py ← XML → estructura de cartas
│ ├── downloader.py ← descarga desde Google Drive (gdown, 5 threads)
│ ├── cropper.py ← quita bleed de MPC y añade espejo de 1 mm
│ ├── pdf_generator.py ← maquetación + crop marks + barra de calibración
│ ├── pipeline.py ← orquestador (run, run_merged)
│ ├── precheck.py ← conteo, planificación de fusiones, manifiesto
│ ├── op_scraper.py ← descarga mazos de One Piece desde webs especializadas
│ └── assets/ ← imágenes embebidas (color_bar.png, corner_mark.png)
├── resources/
│ └── backs/op/ ← reversos para cartas de One Piece (default.png, lider.png)
└── build_exe.py ← script de empaquetado PyInstaller
- A4 vertical, 3 columnas × 3 filas = 9 cartas por página.
- Carta: 63,5 × 88,9 mm (tamaño estándar MPC).
- Sangrado en espejo de 1 mm alrededor de cada carta.
- Página
n: frentes en orden de slot (0–8, izquierda → derecha, arriba → abajo). - Página
nB: dorsos espejados horizontalmente para que el doble cara case. - Líneas de corte 1 pt en los márgenes (no cruzan el interior).
- Marcas de registro en las 4 esquinas + barra CMYK arriba para calibración de imprenta.
- Numeración de pareja en la esquina inferior derecha:
1,1B,2,2B, …