#!/bin/bash # Simple Static Gallery Generator # Generates a single-page gallery from images in the images/ directory set -e IMAGES_DIR="images" OUTPUT_DIR="output" TEMPLATES_DIR="templates" ASSETS_DIR="assets" # Image metadata (EXIF/GPS/IPTC/XMP) is stripped by default. # Opt out with STRIP_EXIF=0 or --keep-exif. STRIP_EXIF="${STRIP_EXIF:-1}" for arg in "$@"; do case "$arg" in --keep-exif) STRIP_EXIF=0 ;; -h|--help) echo "usage: ./build.sh [--keep-exif]" echo " --keep-exif do not strip image metadata (env: STRIP_EXIF=0)" exit 0 ;; *) echo "unknown option: $arg" >&2; exit 1 ;; esac done # Fail before writing any output if the default cannot be honoured if [[ "$STRIP_EXIF" == "1" ]] && ! command -v exiftool >/dev/null 2>&1; then echo "error: exiftool is required to strip image metadata." >&2 echo " install: apt install libimage-exiftool-perl (or: brew install exiftool)" >&2 echo " bypass: STRIP_EXIF=0 ./build.sh or ./build.sh --keep-exif" >&2 exit 1 fi # Create output directory mkdir -p "$OUTPUT_DIR" # Start building the HTML file OUTPUT_FILE="$OUTPUT_DIR/index.html" > "$OUTPUT_FILE" # Assemble templates in order for template in $(ls "$TEMPLATES_DIR"/*.tmpl | sort); do # Process each template line by line to handle placeholders while IFS= read -r line; do if [[ "$line" == *""* ]]; then # Generate gallery items (reversed order) images=("$IMAGES_DIR"/*) for ((i=${#images[@]}-1; i>=0; i--)); do img="${images[$i]}" if [[ -f "$img" ]]; then img_name=$(basename "$img") echo "