ampartwork-viewer.sh




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"
	

Airplay-Sender: Owntone

Update 27.11.25: Pi Zero 1 und Pi Zero 2 unterstützen offensichtlich keine AirPlay-Lautsprecher mehr (siehe Bild ganz unten), ziemlich ungünstig, den die Idee war eigentlich, den kleinsten technischen Fussabdruck zu wählen, der möglich war.
Nachdem ich die SD-Karte in ein RPi 3A+ gesteckt habe, war alles wieder wie vorher.

Es gibt Hunderte Anleitungen für RPi OS, um einen AirPlay-Receiver einzurichten, oft ist die Funktionalität schon Teil des Systems (Volumio, KODI). Aber die eigentlich praktischere Variante, nämlich Audio über AirPlay zu einem vorhandenen und meist auch teuren Audiosystem zu senden, wird sehr wenig besprochen.
Owntone ist ein DAAP-MediaServer, der sich elegant über die Apple Remote-App steuern lässt.
Installationsanleitung hier: https://forums.raspberrypi.com/viewtopic.php?t=49928

In meinem Fall soll die Remote-App auf meinem Handy die Radiostreams auf dem „Owntone-Device“ steuern, ohne selbst mit irgendwelchen Streams belästigt zu werden. Dafür muss ein Pairing mit dem Service durchgeführt werden.

Meine Stationen liegen alle in einzelnen M3U-Files, der Vorteil ist ein Touch-Eintrag pro Station. Man kann sie auch in eine Datei legen, aber dann muss man über die Remote-App erst in die Datei selber (e.g radios.m3u) und dann dort die Station auswählen.

Die Ausgabe wird über das Setting-Menü in Owntone eingestellt, hier kann man final seine Speaker auswählen. Btw: Volumio unterstützt ebenfalls externe Speaker, aber für dieses Feature muss man bezahlen.

2024 Avahi-Icons for Apple Product Families (macOS Sonoma)

iMac

MacBook

Mac mini

MacPro

MacBook Pro

Diese Icons repräsentieren den Eintrag in der Avahi-Service-Datei unter Model-Name, diese allgemeinen Angaben lassen sich noch verfeinern um spezifische Icons anzeigen zu lassen. Interessanterweise zeigen die Icons ausser dem MacPro keine aktuellen Geräte (der Mac mini ist noch die Intel-Variante, der iMac ebenfalls, das MacBook ist ein 13-Zoll-Gerät aus dem Jahr 2008!).

Energie-Zeitplan unter macOS Ventura (und später)

Ja, richtig, dieser kleine süsse Button „Zeitplan“ innerhalb der Energiespar-Einstellungen wurde komplett gestrichen. Man kann also macOS nicht mehr über die GUI zu bestimmten Tagen und Zeiten ein- und ausschalten lassen. Leider ein essentieller Punkt, nicht nur für Admins, sondern auch für normale Menschen :), vor allem mit Desktop-Rechnern.
Vor allem kann man die gesetzen Einstellungen vor dem Ventura-Update nicht mehr so einfach korrigieren oder ausschalten, die bleiben einfach an.
Da der Zeitplan systemmässig aber weiter existiert, lassen sich die Einstellungen nur noch über CLI einsehen und editieren.
Continue reading „Energie-Zeitplan unter macOS Ventura (und später)“

TimeMachine-Backups im WLAN

Backups machen nur Sinn, wenn man nicht an sie denken muss.
TimeMachine-Backups mit direkt extern angeschlossenen Festplatten an einen mobilen Mac sind also nur so mittel hilfreich.
Ein besseres Szenario sieht so aus: Mac-Laptop im heimischen WLAN soll jederzeit (seit macOS 13.0 kann man die Frequenz einstellen, z.B. „täglich“) auf ein Gerät (ebenfalls im heimischen WLAN) sichern, das eine entsprechend grosse TimeMachine-Festplatte vorhält (Faustregel: doppelt so gross wie die zu sichernde Festplatte). Welche Geräte eignen sich dafür?
Continue reading „TimeMachine-Backups im WLAN“