Static web generator to generate an overview of all your favorite decks. DeckLock currently supports :
- Flesh and Blood
- KeyForge
- Gwent
- Magic: The Gathering
DeckLock is designed around the static website generator Pelican and leverages GitHub's feature to host static
websites from the gh-pages
branch leveraging GitHub Actions for easy building your own version. For other hosting options,
check out the official Pelican documentation.
First fork this repository to create your own copy on GitHub. Next, use the commands below to clone your own repository, create a virtual environment and install all required packages.
git clone <url to your fork of DeckLock> ./DeckLock
cd DeckLock
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
On windows the line to activate the virtual environment (source venv/bin/activate) will not work, use the line below instead.
venv\Scripts\activate.bat
The pelican executable should be in venv/bin or venv/Scripts. Depending on how you've set up things the default (below) should work, or you might have to specify the full path.
PELICAN?=pelican
pelicanconf.py requires you to specify where the cache and content is stored. You should only change the cache folder to something else (e.g. dl_cache)
DECKLOCK_CACHE = "dl_demo_cache"
In publishconf.py however you will need to specify the final url of your site.
SITEURL = "https://4dcu.be/DeckLock"
Before adding a game, make sure the correct plugins are active
# Configure plugins
PLUGIN_PATHS = ["plugins"]
PLUGINS = ["keyforge", "mtg", "gwent", "fab", "webassets", "jinja_filters"]
The sections below show how to add decks for the various games.
To add a Flesh and Blood deck, put a text file with the .fab extension in the content folder. These file are in the same format as fabdb.net, though cards that have only one pitch option don't need to include the color (this will be fixed in later versions). The easiest way to get the list in the correct is to add it on fabdb, copy it to the clipboard and paste it into a .fab file. The format is pretty self explanatory even if you don't want to generate it through fabdb.
Deck build - via https://fabdb.net :
Prism Blitz Precon
Class: Illusionist
Hero: Prism
Weapons: Iris of Reality
Equipment: Dream Weavers, Halo of Illumination, Heartened Cross Strap, Spell Fray Leggings
(2) Herald of Protection (red)
(2) Herald of Ravages (red)
(2) Herald of Rebirth (red)
(2) Herald of Tenacity (red)
(2) Illuminate (red)
(1) Phantasmify (red)
(1) Prismatic Shield (red)
(2) Seek Enlightenment (red)
(2) Wartune Herald (red)
(2) Enigma Chimera (yellow)
(1) Herald of Judgment
(1) Merciful Retribution
(1) Ode to Wrath
(2) Rising Solartide (yellow)
(2) Enigma Chimera (blue)
(2) Herald of Protection (blue)
(2) Herald of Ravages (blue)
(2) Herald of Rebirth (blue)
(2) Herald of Tenacity (blue)
(2) Illuminate (blue)
(2) Spears of Surreality (blue)
(2) Wartune Herald (blue)
(1) The Librarian
See the full deck at: https://fabdb.net/decks/GkNKXvRA/
To add a Gwent Deck, put a text file with a .gwent extension in the content folder. The file needs to be structured as shown below, the first sections indicate the name of the deck, the creator and the Gwent version. Below that there should be a list of cards preceded by the number of copies of that card.
// NAME : Harmony (alt)
// CREATOR : BUSHr
// GWENT_VERSION : 6.2.0
// FACTION : Scoia'tael
1 Mystic Echo
1 Tactical Advantage
1 The Great Oak
1 Water of Brokilon
1 Call of the Forest
1 Barnabas Beckenbauer
1 Figgis Merluzzo
1 Pavko Gale
1 Toruviel
1 Fauve
1 Treant Boar
1 Weeping Willow
1 Hawker Smuggler
1 Nature's Rebuke
2 Forest Whisperer
2 Dryad Ranger
1 Dwarven Chariot
2 Trained Hawk
1 Dwarven Skirmisher
2 Dol Blathanna Bowman
1 Miner
2 Mahakam Marauder
If you want to include deck statistics from Decks of KeyForge you'll have to create an account and get an API key from https://decksofkeyforge.com/. Create a file .env in it add the line below.
A .env file, which will not be committed, is used to keep your api key secret.
DOK_API_KEY=your_api_key
Next, you'll have to specify where the KeyForge data can be found (folder), in pelicanconf.py. Note that this path is relative to the content folder
KEYFORGE_PATH = "./data"
Now, add a keyforge.json file to ./content/data, structured as followed with the identifiers of the decks to include. A file with the KeyForge Decks I own is included as an example, the structure should be a shown below. Optionally, you can include details if you tackled one of the KeyForge Adventures with the deck. Difficulties are "Easy", "Normal" and "Hard", which is the number of cards the Keyraken or the Conspiracy draw and play each turn (resp. 1, 2 and 3)
[
{
"deck_id" : "a4268ae8-a9f6-48c7-9739-b28a3553b108",
"defeated_keyraken": true,
"keyraken_difficulty": "Normal",
"defeated_conspiracy": false,
"conspiracy_difficulty": "Easy"
}, {
"deck_id" : "bfbf6786-218c-4320-a7b1-7ed4d6eddc69"
}
]
Magic: the Gathering decks can be added by including a mwDeck file for each deck in the content/data/mtg_decks folder. The mwDeck file format is rather self-explanatory, see the example below:
// NAME : 9 Land Stompy
// CREATOR : Sebastian Proost
// FORMAT : Casual
9 [USG] Forest
4 [MMQ] Land Grant
4 [ALL] Elvish Spirit Guide
3 [MMQ] Vine Dryad
4 [EXO] Skyshroud Elite
4 [VIS] Quirion Ranger
2 [VIS] River Boa
4 [DKA] Strangleroot Geist
4 [ALL] Bounty of the Hunt
4 [WTH] Rogue Elephant
4 [RTR] Dryad Militant
4 [WTH] Briar Shield
4 [ULG] Rancor
4 [POR] Jungle Lion
1 [2ED] Winter Orb
1 [5ED] Winter Orb
SB: 2 [TMP] Root Maze
SB: 4 [ULG] Hidden Gibbons
SB: 3 [ONS] Naturalize
SB: 2 [MMQ] Rushwood Legate
SB: 3 [UDS] Compost
Do make sure that the set, included here in between square brackets, matches ScryFall's abbreviations.
You can use make to build the website (if make is available on your system), use make html
to create a local instance
to test in the _site
directory. Use make release
to create the version for publication in the ./docs
folder.
If you are on windows, you'll have to install make before these commands will work. You can find it here, and you need to add the location of make.exe to your PATH.
make html
make release
alternatively you can use pelican directly, the content is in the folder ./content
and the output folder should be set
to ./_site
for a local test build. Write the output to the ./docs
folder with the publication settings so this can be
hosted easily on GitHub.
pelican ./content -o ./_site
pelican ./content -o ./docs -s publishconf.py
You can use Pelican's built in webserver using the command below.
make serve
Or you can build the site using make html
, navigate to the _site
folder and start a webserver
by running the command.
python -m http.server
In both cases you can see your site by pointing your browser to http://localhost:8000.
DeckLock includes a make release command which will write the final version of the website to the ./docs folder. On GitHub, you can specify that this folder is used for the project pages, enable this in the settings, and you'll have free hosting to show off the decks you have in your card game collection.
Some icons and glyphs used require attribution:
- Trophy by i cons from the Noun Project
- Kraken by Pau Urquijo from the Noun Project
- Diving helmet by Geordie Kaytes from the Noun Project
Decklock is unofficial Fan Content. The literal and graphical information presented in this project about Flesh and Blood, Gwent, KeyForge and Magic: The Gathering, are copyright of Legend Story Studios, CDPR, Fantasy Flight Games and Wizards of the Coast, LLC, a subsidiary of Hasbro, Inc. respectively. DeckLock and 4DCu.be are not produced by, endorsed by, supported by, or affiliated with any of these entities.