From bef5df7f7d245cca4cbd3ae234cdd517df4a3943 Mon Sep 17 00:00:00 2001 From: PianoNic <79938743+Pianonic@users.noreply.github.com> Date: Fri, 6 Nov 2026 17:00:26 +0100 Subject: [PATCH] Replace the default Angular favicon with the Schuly icon --- public/favicon.ico | Bin 15086 -> 6491 bytes src/index.html | 2 +- tools/icons/favicon.py | 12 ++++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 tools/icons/favicon.py diff --git a/public/favicon.ico b/public/favicon.ico index 57614f9c967596fad0a3989bec2b1deff33034f6..2105d98d2595cd657620ca8fde57b05a20dd6416 100644 GIT binary patch literal 6491 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 Nr__JTFzvMr^FKp4S3v*( diff --git a/src/index.html b/src/index.html index 5b09a1b..1672871 100644 --- a/src/index.html +++ b/src/index.html @@ -20,7 +20,7 @@ - + diff --git a/tools/icons/favicon.py b/tools/icons/favicon.py new file mode 100644 index 0000000..ba0ac9c --- /dev/null +++ b/tools/icons/favicon.py @@ -0,0 +1,12 @@ +"""Builds public/favicon.ico (16, 32 and 48 px) from public/assets/app_icon_512.png. + +Run from the repo root: python tools/icons/favicon.py (needs Pillow: pip install Pillow) +""" +from pathlib import Path + +from PIL import Image + +root = Path(__file__).resolve().parents[2] +src = Image.open(root / "public/assets/app_icon_512.png").convert("RGBA") +src.save(root / "public/favicon.ico", sizes=[(16, 16), (32, 32), (48, 48)]) +print("wrote public/favicon.ico")