KRCG static V:tES files generation, using the VEKN official card texts, the Tournament Winning Deck Archive (TWDA) and KRCG rulings list.
This software is used to generate the static website static.krcg.org.
Portions of the materials are the copyrights and trademarks of Paradox Interactive AB, and are used with permission. All rights reserved. For more information please visit white-wolf.com.
Contributions are welcome !
This is an offspring of the KRCG python package, so please refer to that repository for issues, discussions and contributions guidelines.
-
Copy the card images in the
static/cards
folder, under their respective folder:- Right there for the most recent "main" images
- In the relevant subfolder in
static/cards/set
- In the right ISO 639-1 language subfolder for translated cards (ie.
i18n_cards/fr
)
-
Go to Github in the
Actions
tab and run theDeployment
action.
Note only authorized admins on the krcg-static repository can run this action If you're a contributor, signal yourself to the repository administrators so they can review and authorize your deployment.
It's done manually, run the following python code:
from pathlib import Path
from krcg_static import vtespl_cards_scans
vtespl_cards_scans(Path("static"))
Use Homebrew on OSX to install a few graphical tools:
brew install imagemagick inkscape potrace
Fontforge can be used to build and extract fonts.
Use File > Execute Script
to execute the following FF
script:
SelectWorthOutputting(); foreach Export("svg"); endloop;
Convert SVG to PNG with a transparent background:
for f in svg/**/*(.); do g=${f#svg/}; g=png/${g%.svg}.png; magick -background none $f $g; done
Convert transparent PNG to white bordered PNG:
for f in png/icon/*(.); \
do g=png_wb/${f#png/}; \
magick $f \( \
+clone -alpha extract -morphology edgeout octagon:15 -bordercolor black \
-border 100 -morphology close Octagon:50 -shave 100 \
-level 50% -transparent black \) \
-compose DstOver -composite $g \
; done
Convert transparent square PNG to white bordered PNG:
for f in png/icon/*(.); \
do g=png_wb/${f#png/}; \
magick -background none -size 896x896 xc:white \
\( $f -trim +repage -resize 768x768 \) \
-geometry +64+64 -composite $g \
; done
Note as seen on real cards, inferior disciplines are roughly 15% bigger squares than superior disciplines.
This is because when one rotates the square by 45° the width is √2 = 41% larger,
so compensation is required for visual consistency.
If the base square (inferior) is 896x896
, the superior square is 896/1.15
= 780x780
.
And if the inner inferior icon is 768
in width (for a 64
white border),
then the superior icon width needs to be 768/1.15 * √2
= 944x944
.
Convert transparent losange (sup) PNG to white bordered PNG:
for f in png/icon/*(.); \
do g=png_wb/${f#png/}; \
magick -background none -size 780x780 xc:white -rotate 45 \
\( $f -trim +repage -resize 944x944 \) \
-geometry +82+82 -composite $g \
; done
Add transparent border (128px
):
for f in png_wb/icon/*(.); do \
magick -background none $f -bordercolor none -border 128x128 $f \
; done
Generate a multisize .ico
file:
magick -background none vtes.svg \
\( -clone 0 -resize 16x16 \) \
\( -clone 0 -resize 32x32 \) \
\( -clone 0 -resize 64x64 \) \
\( -clone 0 -resize 128x128 \) \
\( -clone 0 -resize 256x256 \) \
-delete 0 -alpha on -compress Zip vtes.ico
Convert VEKN card images to our format:
for f in incoming/*(.); do \
name=${f#incoming/}; \
name=${name%.*}; \
name=${name% - *}; \
name=${name% \[*}; \
name=`echo $name | iconv -f utf-8 -t ascii//translit | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr -d '[:space:]'`; \
name=result/${name}.jpg; \
magick $f -resize x500 $name; \
done
Depending on how they generate the files, those can come up with large block borders (400x544), in this case, do this:
for f in incoming/*(.); do \
name=${f#incoming/}; \
name=${name%.*}; \
name=${name% - *}; \
group=${name##*\[}; \
group=${group%%\]*}; \
if [[ ${group} == ${name} ]]; then \
group= ; \
fi; \
name=${name% \[*}; \
name=`echo $name | iconv -f utf-8 -t ascii//translit | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr -d '[:space:]'`; \
if [[ ! -z $group ]]; then \
name=${name}g${group}; \
fi; \
name=result/${name}.jpg; \
magick $f -shave 18 -resize x500 $name; \
done
Sometimes the resulting image won't exactly fir the expected 358x500 pixels. To add a 1-pixel borders on both sides use:
magick $f -bordercolor black -border 1x $name
And to remove:
magick $f -shave 1x $name
To add a 1-pixel border on a single side, use:
magick $f -background black -gravity west -splice 1x $name
And to remove:
magick $f -gravity west -chop 1x $name
Then, to create the symbolic links for the crypt cards, you can:
cd result
for f in ./*(.); do \
name=${f#./}; \
short=${name%g[123456789].jpg}; \
if [[ ${short} != ${name} ]]; then \
ln -fs ${name} ${short}.jpg; \
fi; \
done
To generate round corners for the card:
for f in incoming/*(.); do \
name=${f#incoming/}; \
name=${name%.*}; \
magick incoming/${name}.jpg \( +clone -alpha extract -draw 'fill black polygon 0,0 0,15 15,0 fill white circle 15,15 15,0' \( +clone -flip \) -compose Multiply -composite \( +clone -flop \) -compose Multiply -composite \) -alpha off -compose CopyOpacity -composite result/${name}.png; \
done
To extract the images:
for f in incoming/*(.); do \
name=${f#incoming/}; \
name=${name%.*}; \
name=result/${name}.jpg; \
magick $f -crop 259x225+75+58 +repage $name; \
done
Then copy everything and preserve the links to the static directory:
cp -av ./* ~/dev/krcg-static/static/card/
Make sure your symbolic links are relative to the .
folder ot they won't work online.