#!/usr/bin/env bash # Regenerate assets/icon.icns (macOS) and assets/icon.ico (Windows) from # assets/icon.svg. Run from the repository root on macOS. # # Requires: rsvg-convert (brew install librsvg), iconutil (macOS), and Pillow # (pulled in on demand via uv). set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" SVG="$ROOT/assets/icon.svg" # --- macOS .icns --- ICONSET="$ROOT/assets/icon.iconset" rm -rf "$ICONSET" && mkdir -p "$ICONSET" declare -a MAP=( "16:icon_16x16" "32:icon_16x16@2x" "32:icon_32x32" "64:icon_32x32@2x" "128:icon_128x128" "256:icon_128x128@2x" "256:icon_256x256" "512:icon_256x256@2x" "512:icon_512x512" "1024:icon_512x512@2x" ) for pair in "${MAP[@]}"; do rsvg-convert -w "${pair%%:*}" -h "${pair%%:*}" "$SVG" \ -o "$ICONSET/${pair##*:}.png" done iconutil -c icns "$ICONSET" -o "$ROOT/assets/icon.icns" rm -rf "$ICONSET" # --- Windows .ico --- rsvg-convert -w 256 -h 256 "$SVG" -o /tmp/neotalk-icon-256.png uv run --with pillow python - <<'PY' from PIL import Image img = Image.open("/tmp/neotalk-icon-256.png").convert("RGBA") img.save( "assets/icon.ico", sizes=[(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)], ) PY echo "Wrote assets/icon.icns and assets/icon.ico"