Skip to content

Repository files navigation

TCG-Arena – change Artwork

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.


How it works

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).

Requirements

  • 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.

Install

1. Get the code

git clone git@github.com:cuinhellcat/tcg-arena-artwork-changer.git
cd tcg-arena-artwork-changer

2. Start the local server

Linux (with tray icon + app-menu entry):

./install-linux.sh      # creates a venv, installs deps, adds a tray launcher

Then 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+Rshell: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, ...}.

3. Install the userscript

  1. Install Tampermonkey or Violentmonkey in your browser.
  2. With the server running, open http://localhost:8765/tcg-arena-artwork.user.js — your userscript manager offers an install page → Install.
  3. Reload tcg-arena.fr.

On the first artwork fetch, your userscript manager will ask to allow a connection to localhost — choose Always allow.


Usage

  • 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.


Configuration

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.


For the TCG Arena maker 👋

If you’d like to offer this natively, it’s straightforward — you already have the Scryfall id in each card image URL. Sketch:

  1. Store a per-account map oracle_id (or card name) → chosen printing id.
  2. When rendering a card, if the player has a choice for it, swap the image URL to that printing’s art.
  3. unique:art (see artwork_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.


Privacy & credits

  • All processing is local; the browser talks only to your localhost server.
  • Card data & images: Scryfall (please respect their API guidelines — this tool caches results and rate-limits requests).
  • Built for TCG Arena.

License

MIT.

About

Change the Artwork of Magic-Cards in tcg-arena

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages