packages feed

CPL-0.2.0: scripts/generate-favicons.sh

#!/bin/bash
set -euo pipefail

# Script to generate favicon files from source logo images
# Usage: ./scripts/generate-favicons.sh
#
# Requires: ImageMagick (magick command)
#
# Source images:
#   - logo-with-diagram.png: Used for larger icons (180x180+)
#   - logo-without-diagram.png: Used for smaller icons (32x32 and below)

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
OUTPUT_DIR="${PROJECT_ROOT}/web"

echo "=== Generating Favicon Files ==="

# Check if ImageMagick is installed
if ! command -v magick &> /dev/null; then
    echo "Error: ImageMagick is not installed"
    echo "Install with: brew install imagemagick  (macOS)"
    echo "          or: sudo apt-get install imagemagick  (Ubuntu/Debian)"
    exit 1
fi

echo "ImageMagick found: $(magick --version | head -n1)"

# Check source images exist
LOGO_WITH_DIAGRAM="${PROJECT_ROOT}/logo-with-diagram.png"
LOGO_WITHOUT_DIAGRAM="${PROJECT_ROOT}/logo-without-diagram.png"

if [ ! -f "$LOGO_WITH_DIAGRAM" ]; then
    echo "Error: $LOGO_WITH_DIAGRAM not found"
    exit 1
fi

if [ ! -f "$LOGO_WITHOUT_DIAGRAM" ]; then
    echo "Error: $LOGO_WITHOUT_DIAGRAM not found"
    exit 1
fi

echo "Source images found:"
echo "  - $LOGO_WITH_DIAGRAM"
echo "  - $LOGO_WITHOUT_DIAGRAM"
echo ""

# Create output directory if needed
mkdir -p "$OUTPUT_DIR"

# Generate small icons from logo-without-diagram.png
# (The diagram is not visible at small sizes)
echo "Generating small icons from logo-without-diagram.png..."
magick "$LOGO_WITHOUT_DIAGRAM" -resize 16x16 "$OUTPUT_DIR/favicon-16x16.png"
echo "  Created favicon-16x16.png"

magick "$LOGO_WITHOUT_DIAGRAM" -resize 32x32 "$OUTPUT_DIR/favicon-32x32.png"
echo "  Created favicon-32x32.png"

# Generate favicon.ico (multi-resolution)
TMPDIR=$(mktemp -d)
magick "$LOGO_WITHOUT_DIAGRAM" -resize 16x16 "$TMPDIR/16.png"
magick "$LOGO_WITHOUT_DIAGRAM" -resize 32x32 "$TMPDIR/32.png"
magick "$TMPDIR/16.png" "$TMPDIR/32.png" "$OUTPUT_DIR/favicon.ico"
rm -rf "$TMPDIR"
echo "  Created favicon.ico (16x16 + 32x32)"

# Generate large icons from logo-with-diagram.png
# (The diagram is visible at larger sizes)
echo ""
echo "Generating large icons from logo-with-diagram.png..."

magick "$LOGO_WITH_DIAGRAM" -resize 180x180 "$OUTPUT_DIR/apple-touch-icon.png"
echo "  Created apple-touch-icon.png (180x180)"

magick "$LOGO_WITH_DIAGRAM" -resize 192x192 "$OUTPUT_DIR/icon-192x192.png"
echo "  Created icon-192x192.png (192x192)"

magick "$LOGO_WITH_DIAGRAM" -resize 512x512 "$OUTPUT_DIR/icon-512x512.png"
echo "  Created icon-512x512.png (512x512)"

echo ""
echo "=== Favicon generation complete ==="
echo ""
echo "Generated files in $OUTPUT_DIR/:"
ls -la "$OUTPUT_DIR"/favicon* "$OUTPUT_DIR"/apple-touch-icon.png "$OUTPUT_DIR"/icon-*.png 2>/dev/null | awk '{print "  " $9 " (" $5 " bytes)"}'