mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2025-12-16 15:40:12 +01:00
A deckbuilder for the commander format of Magic: The Gathering
| .github/workflows | ||
| code | ||
| config | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| DOCKER.md | ||
| Dockerfile | ||
| LICENSE | ||
| mypy.ini | ||
| pyproject.toml | ||
| README.md | ||
| RELEASE_NOTES.md | ||
| RELEASE_NOTES_TEMPLATE.md | ||
| requirements.txt | ||
| run-from-dockerhub.bat | ||
| run-from-dockerhub.sh | ||
| WINDOWS_DOCKER_GUIDE.md | ||
# 🃏 MTG Python Deckbuilder
A fast, menu-driven CLI to build MTG Commander/EDH decks. Supports interactive and headless runs, CSV/TXT exports, and Docker.
🔹 Features
- Commander search with smart theme tagging (primary/secondary/tertiary)
- Power bracket selection and ideal count prompts
- CSV and TXT exports with stable filenames
- Headless mode (non-interactive) and a headless submenu in the main menu
- Config precedence: CLI > env > JSON > defaults
✨ Highlights
- Smart tagging and suggestions for commander + themes
- Exports CSV and TXT decklists to
deck_files/ - Interactive menu with a headless submenu
- Works locally or in Docker (Windows PowerShell friendly)
🚀 Quick start
Docker Hub (PowerShell)
docker run -it --rm `
-v "${PWD}/deck_files:/app/deck_files" `
-v "${PWD}/logs:/app/logs" `
-v "${PWD}/csv_files:/app/csv_files" `
mwisnowski/mtg-python-deckbuilder:latest
From source
pip install -r requirements.txt
python code/main.py
From this repo with Docker Compose (PowerShell)
docker compose build
docker compose run --rm mtg-deckbuilder
🤖 Headless mode (no prompts)
- Auto-headless: set
DECK_MODE=headless- Example (PowerShell):
docker compose run --rm -e DECK_MODE=headless mtg-deckbuilder
- Example (PowerShell):
- Use a JSON config: mount
./configto/app/configand setDECK_CONFIG=/app/config/deck.json- Example (PowerShell):
docker compose run --rm ` -e DECK_MODE=headless ` -e DECK_CONFIG=/app/config/deck.json ` mtg-deckbuilder
- Example (PowerShell):
- Override via env vars (subset):
DECK_COMMANDER,DECK_PRIMARY_CHOICE,DECK_ADD_LANDS,DECK_FETCH_COUNT,DECK_USE_MULTI_THEME - Precedence: CLI > env > JSON > defaults
Headless submenu notes:
- If one JSON exists in
config/, it auto-runs it - If multiple exist, they’re listed as "Commander - Theme1, Theme2, Theme3";
deck.jsonshows as "Default" - CSV/TXT are exported as usual; JSON run-config is exported only in interactive runs
Example JSON (config/deck.json):
{
"commander": "Pantlaza",
"use_multi_theme": true,
"primary_choice": 2,
"secondary_choice": 2,
"tertiary_choice": 2,
"add_lands": true,
"fetch_count": 3,
"ideal_counts": { "ramp": 10, "lands": 36, "basic_lands": 16, "creatures": 28, "removal": 8, "wipes": 3, "card_advantage": 8, "protection": 3 }
}
Notes: headless honors ideal_counts (leave prompts blank to accept). Only fetch_count is tracked/exported for lands.
🕹️ Usage (interactive)
- Start the app (Docker or from source)
- Pick Build a New Deck
- Search/confirm commander
- Pick primary/secondary/tertiary themes (or stop at primary)
- Choose power bracket and review ideal counts
- Deck builds; CSV/TXT export to
deck_files/
⚙️ Environment variables (common)
- DECK_MODE=headless
- DECK_CONFIG=/app/config/deck.json
- DECK_COMMANDER, DECK_PRIMARY_CHOICE, DECK_SECONDARY_CHOICE, DECK_TERTIARY_CHOICE
- DECK_ADD_LANDS, DECK_FETCH_COUNT
- DECK_ADD_CREATURES, DECK_ADD_NON_CREATURE_SPELLS, DECK_ADD_RAMP, DECK_ADD_REMOVAL, DECK_ADD_WIPES, DECK_ADD_CARD_ADVANTAGE, DECK_ADD_PROTECTION
- DECK_USE_MULTI_THEME
<EFBFBD> Folders
deck_files/— CSV/TXT exportscsv_files/— card datalogs/— logsconfig/— JSON configs (optional)
🧰 Troubleshooting
- Use
docker compose run --rm(notup) for interactive sessions - Ensure volumes are mounted so files persist (
deck_files,logs,csv_files) - For headless with config, mount
./config:/app/configand setDECK_CONFIG
<EFBFBD> License & help
- License: MIT (see
LICENSE) - Issues/Requests: GitHub Issues/Discussions
- Docker details: see
DOCKER.md