Pick a different artwork / printing per Magic card on tcg-arena.fr — which otherwise always shows the newest printing of a card. Right-click a card → 🎨 change Artwork → choose an illustration. Your choice is remembered across sessions.
- Client-side & cosmetic only. Nothing about the game changes; your opponent still sees their own default rendering. It just swaps the picture you see.
- Runs from your own machine. A tiny local server serves card art from a
local cache (backed by Scryfall); your browser only
ever talks to
localhost.
Unofficial fan tool. Not affiliated with TCG Arena or Scryfall.
right-click a card
→ userscript reads the Scryfall UUID from the card image URL
→ GET localhost:8765/printings-by-id/<uuid>
server: UUID → card name (Scryfall, cached)
→ all UNIQUE ARTWORKS of that card (unique:art, cached on disk)
→ a picker shows the artworks as thumbnails (served from the local cache)
→ your pick is stored (Tampermonkey storage, per card name)
→ a MutationObserver swaps the card image to your chosen art and keeps it
applied across the site's re-renders
Two moving parts:
| File | Role |
|---|---|
artwork_server.py |
Local HTTP server on localhost:8765. Serves artworks + images from a local cache and lazily fetches anything missing from Scryfall once (the browser never calls Scryfall directly). |
tcg-arena-artwork.user.js |
Userscript (Tampermonkey / Violentmonkey). Injects a change Artwork entry into the site's own right-click menu and applies your choices. |
artwork_tray.py (optional) |
System-tray launcher for the server (menu → Quit). |
- Python 3.9+
- A browser with Tampermonkey or Violentmonkey
- Internet the first time you view a given card (to fetch its artworks); cached and offline afterwards.
git clone git@github.com:cuinhellcat/tcg-arena-artwork-changer.git
cd tcg-arena-artwork-changerLinux (with tray icon + app-menu entry):
./install-linux.sh # creates a venv, installs deps, adds a tray launcherThen start “TCG-Arena Artwork Server” from your application menu. The tray icon’s menu has Quit.
Windows: double-click start-windows.bat (creates a venv, installs
deps, and starts the tray icon). To auto-start it, put a shortcut to that file
into your Startup folder (Win+R → shell:startup).
Any OS (manual / no tray):
python -m venv .venv
# Linux/macOS:
source .venv/bin/activate
# Windows:
# .venv\Scripts\activate
pip install -r requirements.txt
python artwork_server.py # or: python artwork_tray.py (tray icon)Check it: open http://localhost:8765/health → {"ok": true, ...}.
- Install Tampermonkey or Violentmonkey in your browser.
- With the server running, open http://localhost:8765/tcg-arena-artwork.user.js — your userscript manager offers an install page → Install.
- Reload tcg-arena.fr.
On the first artwork fetch, your userscript manager will ask to allow a
connection to localhost — choose Always allow.
- Right-click a card → 🎨 change Artwork (added to the site’s own menu).
- Pick an artwork from the grid (oldest first). Only that card changes.
- To revert: open the picker again and click ↩︎ Standard (top-right).
Basic lands and other cards with hundreds of printings are collapsed to their unique artworks, and thumbnails load lazily as you scroll.
Environment variables read by artwork_server.py:
| Variable | Default | Meaning |
|---|---|---|
ARTWORK_PORT |
8765 |
Port for the local server. |
ARTWORK_HOST |
127.0.0.1 |
Bind address. |
ARTWORK_CACHE_DIR |
~/.cache/tcg-arena-artwork |
Where artworks + images are cached. Point it at an existing cache to share one. |
If you change the port, also update SERVER (and the @downloadURL/@updateURL)
near the top of the userscript.
If you’d like to offer this natively, it’s straightforward — you already have the Scryfall id in each card image URL. Sketch:
- Store a per-account map
oracle_id (or card name) → chosen printing id. - When rendering a card, if the player has a choice for it, swap the image URL to that printing’s art.
unique:art(seeartwork_server.py) gives one representative per distinct illustration, which is what an artwork picker wants.
Feel free to reuse anything here (MIT-licensed). Happy to help — open an issue.
- All processing is local; the browser talks only to your
localhostserver. - Card data & images: Scryfall (please respect their API guidelines — this tool caches results and rate-limits requests).
- Built for TCG Arena.
MIT.