Back to Black Site Map Editor
SOURCE / PINNED RELEASE

Made of little things.

Black Site Map Editor

Release
32a57733b7e9…
Author-recorded commit
3f54890f542f…
License
LICENSE
Author’s source reference
nostr://npub1ye5ptcxfyyxl5vjvdjar2ua3f0hynkjzpx552mu5snj3qmx5pzjscpknpr/wss%3A%2F%2Fgit.shakespeare.diy%2F/black-site-map-editor

Archive hash verified: 7a4b1abbac7db5b0…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

scripts/generate-icons.py
"""Regenerate the app-owned tactical map/pencil icon family (requires Pillow)."""
from pathlib import Path
from PIL import Image, ImageDraw

ROOT = Path(__file__).resolve().parents[1]
DEST = ROOT / 'assets' / 'icons'
DEST.mkdir(parents=True, exist_ok=True)
SCALE = 4
image = Image.new('RGB', (512 * SCALE, 512 * SCALE), '#101510')
draw = ImageDraw.Draw(image)

def line(points, color, width):
    draw.line([(x * SCALE, y * SCALE) for x, y in points], fill=color,
              width=width * SCALE, joint='curve')

def polygon(points, color):
    draw.polygon([(x * SCALE, y * SCALE) for x, y in points], fill=color)

# Squared tactical map frame, folded terrain panels and a drafting pencil.
line([(76, 382), (76, 112), (196, 148), (316, 112), (436, 148), (436, 290)], '#b9e66c', 18)
line([(76, 382), (196, 418), (280, 392)], '#b9e66c', 18)
line([(196, 148), (196, 418)], '#52653a', 10)
line([(316, 112), (316, 280)], '#52653a', 10)
line([(108, 260), (155, 260), (155, 218), (242, 218), (242, 310), (282, 310)], '#b9e66c', 12)
polygon([(260, 421), (277, 365), (393, 249), (433, 289), (317, 405)], '#101510')
polygon([(278, 402), (289, 370), (390, 269), (414, 293), (313, 394)], '#e8bd62')
polygon([(278, 402), (289, 370), (313, 394)], '#edf1d7')
line([(374, 285), (398, 309)], '#101510', 7)

for size in (16, 32, 48, 180, 192, 512):
    image.resize((size, size), Image.Resampling.LANCZOS).save(DEST / f'icon-{size}.png', optimize=True)
image.resize((48, 48), Image.Resampling.LANCZOS).save(
    DEST / 'favicon.ico', sizes=[(16, 16), (32, 32), (48, 48)])