#!/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 "
" >> "$OUTPUT_FILE" echo " " >> "$OUTPUT_FILE" echo " \"$img_name\"" >> "$OUTPUT_FILE" echo " " >> "$OUTPUT_FILE" echo "
" >> "$OUTPUT_FILE" fi done elif [[ "$line" == *""* ]]; then # Generate lightboxes outside the gallery grid (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 "
" >> "$OUTPUT_FILE" echo " ×" >> "$OUTPUT_FILE" echo " \"$img_name\"" >> "$OUTPUT_FILE" echo "
" >> "$OUTPUT_FILE" fi done else echo "$line" >> "$OUTPUT_FILE" fi done < "$template" done # Copy assets cp -r "$ASSETS_DIR"/* "$OUTPUT_DIR/" # Copy images, then strip metadata from the copies (originals are never touched) cp -r "$IMAGES_DIR" "$OUTPUT_DIR/" if [[ "$STRIP_EXIF" == "1" ]]; then if compgen -G "$OUTPUT_DIR/$IMAGES_DIR/*" > /dev/null; then if ! exiftool -all= -overwrite_original -q -q "$OUTPUT_DIR/$IMAGES_DIR"; then echo "error: exiftool failed; output images may still contain metadata" >&2 exit 1 fi fi else echo "warning: EXIF stripping disabled, image metadata will be published as-is" >&2 fi echo "Gallery generated successfully in $OUTPUT_DIR/index.html"