


Der AMPArtwork-Folder liegt unter ~/Library/Containers/com.apple.AMPArtworkAgent/Data/Documents/artwork und füllt sich durch die bloße Benutzung von der Music.app. Darin befinden sich alle Albumcover als Thumbnails. In meinem Fall waren das über 12000 Jpegs mit über 900 MB.
Der AMPArtwork-Agent sammelt diese Daten ein, den kann man in den Prozessen identifizieren. Der Artwork-Folder dient auch als Quelle für den Apple Screensaver „Album Artwork“: wer Apple Music nicht nutzt, für den ist auch dieser Screensaver nicht verfügbar. Der AMPArtwork-Ordner enthält auch Thumbnails von den in Music.app verwaltenden Musikvideos, Filmen und TV-Shows, bedeutet, es gibt auch Bilddaten, die nicht quadratisch sind und dann ein bisschen aus der Reihe fallen, positiv gesehen.
Die Basis ist von Moodboards entlehnt, mit ähnlichem Bildergebnis. Die wesentliche Änderung ist #MAX_IMAGES und #LAYOUT_SETTINGS um ein anderes Grid zu erzeugen. Der Messy-Faktor wird mit #RANDOM_POSITION gesteuert.
#!/bin/bash
# === Configuration ===
# AMPA Folder (macOS Tahoe)
IMAGE_DIR="/users/user/Library/Containers/com.apple.AMPArtworkAgent/Data/Documents/artwork"
# Base project directory
BASE_DIR="/users/user/Desktop"
# Derived directories
DUPLICATE_DIR="$BASE_DIR/ampa-dupl"
FINAL_DIR="$BASE_DIR/ampa-comps"
# Ensure necessary directories exist
mkdir -p "$IMAGE_DIR" "$DUPLICATE_DIR" "$FINAL_DIR"
echo "📂 Output directories prepared."
echo "🌍 Source URL: $URL"
echo "🚀 Starting script..."
# SORT IMAGES ->
#mkdir -p "$dst"
cd "$IMAGE_DIR" || exit 1
# Find all unique base names (strip -WIDTHxHEIGHT and extensions like .jpg.1 or .jpeg.1)
find . -maxdepth 1 -type f \( -iname "*.jpg.*" -o -iname "*.jpeg.*" \) \
| sed -E 's|^\./||' \
| sed -E 's/-[0-9]+x[0-9]+.*//; s/\.(jpg|jpeg)(\.1)?$//' \
| sort -u \
| while read -r base; do
# Collect all variations
matches=( "${base}"*.jpg* "${base}"*.jpeg* )
# Skip if none found
[[ ! -e "${matches[0]}" ]] && continue
[[ ${#matches[@]} -le 1 ]] && continue
# Find largest by file size
largest=$(ls -S "${matches[@]}" 2>/dev/null | head -n 1)
echo "Keeping: $largest"
for f in "${matches[@]}"; do
[[ "$f" == "$largest" ]] && continue
if [[ -e "$f" ]]; then
echo "Moving duplicate: $f"
mv "$f" "$dst"/ || echo "⚠️ Could not move $f"
fi
done
done
# COUNT IMAGES
ls "$IMAGE_DIR" | wc -l && echo "Images available"
# IMAGEMAGICK PART
# --- Image Canvas ---
#MAX_IMAGES
WIDTH=1280
HEIGHT=720
MAX_IMAGES=24
# --- Prepare temp dir ---
TMP_DIR=$(mktemp -d)
TIMESTAMP=$(date +%s)
OUT_FILE="${FINAL_DIR}/${TIMESTAMP}.jpg"
# --- Pick random JPEG images ---
echo "🎲 Picking $MAX_IMAGES random JPEG images from: $IMAGE_DIR"
FILES=()
while IFS= read -r f; do
FILES+=("$f")
done < <(find "$IMAGE_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) | shuf | head -n "$MAX_IMAGES")
echo "📸 Selected images:"
for f in "${FILES[@]}"; do
echo " - $f"
done
# --- Create white background --- or black --
magick -size ${WIDTH}x${HEIGHT} canvas:black -colorspace sRGB "$TMP_DIR/base.png"
#LAYOUT_SETTINGS (change this and MAX_IMAGES above)
COLS=6
ROWS=4
CELL_W=$((WIDTH / COLS))
CELL_H=$((HEIGHT / ROWS))
echo "🧩 Compositing $MAX_IMAGES images..."
i=0
for f in "${FILES[@]}"; do
((i++))
[ -f "$f" ] || continue
# Resize proportionally to fit in a cell
magick "$f" -colorspace sRGB -resize "${CELL_W}x${CELL_H}>" "$TMP_DIR/img_${i}.png"
# Random rotation (-10° to +10°)
ANGLE=$((RANDOM % 21 - 10))
magick "$TMP_DIR/img_${i}.png" -colorspace sRGB -background none -rotate "$ANGLE" "$TMP_DIR/rot_${i}.png"
# Random position with slight overlap (Lower numbers → cleaner grid, Higher numbers → messier collage)
row=$(( (i-1) / COLS ))
col=$(( (i-1) % COLS ))
XPOS=$(( col * CELL_W + RANDOM % 161 - 80 ))
YPOS=$(( row * CELL_H + RANDOM % 161 - 80 ))
# Composite onto base
magick "$TMP_DIR/base.png" "$TMP_DIR/rot_${i}.png" \
-geometry +${XPOS}+${YPOS} -colorspace sRGB -compose over -composite "$TMP_DIR/base.png"
done
# Version Color
magick "$TMP_DIR/base.png" -colorspace sRGB "$OUT_FILE"
# Cleanup
rm -rf "$TMP_DIR"
# End
echo "✅ Created: $OUT_FILE"








