scripts/make_mascot.py
Rama main · réplica de lectura del repositorio original.
"""Write the Clips Kitty mascot PNGs and the Windows icon.
python scripts/make_mascot.py
Outputs:
docs/brand/mascot.png full body — README, website, merch base
docs/brand/mascot-head.png head only — what the icon is cut from
ui/build/icon.ico multi-size Windows icon for the installer
The artwork itself lives in `video/mascot_art.py` — edit the numbers there and
re-run this. It moved out of here because `scripts/` is not packaged into the
frozen build, and `video/outro.py` needs the same geometry at runtime to
animate Clippy for the end card. One source, three consumers.
"""
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT))
from video.mascot_art import render_full, render_head # noqa: E402
BRAND = ROOT / "docs" / "brand"
UI_BUILD = ROOT / "ui" / "build"
def main() -> None:
BRAND.mkdir(parents=True, exist_ok=True)
UI_BUILD.mkdir(parents=True, exist_ok=True)
render_full().save(BRAND / "mascot.png")
print(f" wrote {BRAND / 'mascot.png'}")
head = render_head()
head.save(BRAND / "mascot-head.png")
print(f" wrote {BRAND / 'mascot-head.png'}")
sizes = [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)]
head.save(UI_BUILD / "icon.ico", format="ICO", sizes=sizes)
print(f" wrote {UI_BUILD / 'icon.ico'} {[w for w, _ in sizes]}")
if __name__ == "__main__":
main()