Automatically create moodboards

Moodboards, aber automatisch. Collage-Erstellung mit imagemagick. Aussehen ist abhängig von den Quelldaten, so, es kann auch ein messy Familienalbum sein, oder ein RSS-Nachrichtensystem, its up to you.



1760814789.jpg

1760813686.jpg


1760813230.jpg


#!/bin/bash
# Create a colorful random moodboard with reduced overlap (ImageMagick v7)
# Output files are timestamped and stored in ./moodboards/

SRC_DIR="/home/pi/imagefolder"
OUT_DIR="/home/pi/moodboards"
mkdir -p "$OUT_DIR"

WIDTH=1280
HEIGHT=720
MAX_IMAGES=8

# Timestamped output filename
TIMESTAMP=$(date +%s)
OUT_FILE="${OUT_DIR}/moodboard_${TIMESTAMP}.jpg"

TMP_DIR=$(mktemp -d)

# Pick random JPEG images
mapfile -t FILES < <(find "$SRC_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) | shuf -n $MAX_IMAGES)

# Create RGB white canvas
magick -size ${WIDTH}x${HEIGHT} canvas:white -colorspace sRGB "$TMP_DIR/base.png"

# Determine layout grid positions (2x4 grid for up to 8 images)
COLS=4
ROWS=2
CELL_W=$((WIDTH / COLS))
CELL_H=$((HEIGHT / ROWS))

i=0
for f in "${FILES[@]}"; do
  ((i++))

  # Resize proportionally to fit in a cell
  magick "$f" -colorspace sRGB -resize "${CELL_W}x${CELL_H}>" "$TMP_DIR/img_${i}.png"

  # Random small rotation (-10 to +10)
  ANGLE=$((RANDOM % 21 - 10))
  magick "$TMP_DIR/img_${i}.png" -background none -rotate "$ANGLE" "$TMP_DIR/rot_${i}.png"

  # Grid position with a *wider* random offset (±80 px for more overlap)
  row=$(( (i-1) / COLS ))
  col=$(( (i-1) % COLS ))
  XPOS=$(( col * CELL_W + RANDOM % 161 - 80 ))
  YPOS=$(( row * CELL_H + RANDOM % 161 - 80 ))

  # Composite with minimal overlap
  magick "$TMP_DIR/base.png" "$TMP_DIR/rot_${i}.png" \
        -colorspace sRGB -geometry +${XPOS}+${YPOS} -compose over -composite "$TMP_DIR/base.png"
done

# Save final moodboard
magick "$TMP_DIR/base.png" -colorspace sRGB "$OUT_FILE"

rm -rf "$TMP_DIR"
echo "✅ Moodboard created: $OUT_FILE"