PhotoPrism – Google Takeout Workflow (DebNAS)
Ziel: Google Takeout zuverlässig in PhotoPrism einspielen, ohne Chaos und ohne „Bilder verschwinden in der Masse“.
Voraussetzungen / Pfade (DebNAS)
Beispiel-Setup (wie bei DebNAS):
-
Compose-Verzeichnis:
/srv/docker/photoprism -
Originals (PhotoPrism Library):
/srv/docker/photoprism/photo→ im Container:/photoprism/originals -
Storage (DB/Index/Cache):
/srv/docker/photoprism/photoappdata→ im Container:/photoprism/storage -
Import-Bereich auf dem Host:
/srv/docker/photoprism/import→ im Container:/import
Wichtig: Import-Mount in docker-compose.yml:
volumes:
- "./photo:/photoprism/originals"
- "./photoappdata:/photoprism/storage"
- "./import:/import"
Dann:
cd /srv/docker/photoprism
docker compose up -d
0) Sicherheitsnetz
Vor großen Import-Aktionen:
- Backup von
photo/undphotoappdata/(Snapshot/rsync/restic) - WebDAV/davfs2 Mounts aus (können Cache-Stress verursachen)
1) Takeout auf DebNAS kopieren und entpacken
Beispiel: Takeout-Datei liegt nach Kopie auf DebNAS.
cd /srv/docker/photoprism/import
mkdir -p takeout-2026-02-16
tar -xzf /pfad/zum/google-takeout.tgz -C takeout-2026-02-16
Typischer Pfad danach:
/srv/docker/photoprism/import/takeout-2026-02-16/Takeout/Google Fotos/...
Hinweis: Takeout-Ordner haben oft trailing spaces (z.B. Herrentag ).
Nicht versuchen „schön“ zu machen – lieber robust filtern/kopieren.
2) Stage-Ordner anlegen (damit Import kontrollierbar bleibt)
Wir importieren nie direkt aus dem Takeout-Baum, sondern erst in einen Stage-Ordner:
STAGE=/srv/docker/photoprism/import/_stage_since_20231130
SRC="/srv/docker/photoprism/import/takeout-2026-02-16/Takeout/Google Fotos"
mkdir -p "$STAGE"
Warum Stage?
- JSON Sidecars werden ausgeschlossen
- Du kannst Anzahl/Größe checken
- Du kannst Portionen importieren
- Der Takeout bleibt unverändert als Backup
3) Medien einsammeln (ohne JSON)
3a) Minimal/robust: einfach alle Medien (ohne JSON) in Stage kopieren
Wenn du auf Nummer sicher gehen willst (später per WebUI sortieren):
cd "$SRC"
find . -type f \
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.heic' -o -iname '*.mp4' -o -iname '*.mov' \) \
! -iname '*.json' -print0 \
| rsync -a --files-from=- --from0 ./ "$STAGE"/
Das kann viel sein – dafür verlierst du garantiert nichts.
3b) Nach Datum im Dateinamen (Pragmatik)
Wenn du ein „Schnittdatum“ hast (z. B. ab 2023-11-30) und viele Dateien Namen mit Datum haben:
Hinweis: mtime bei Takeout ist oft Takeout-Erstellungsdatum (wertlos).
Dateinamen sind meist sinnvoller (IMG_/VID_/PXL_ etc.).
Ein generischer Ansatz: wir ziehen YYYYMMDD aus dem Dateinamen (wo vorhanden).
Achtung: Das ist pragmatisch, nicht perfekt (aber oft gut genug).
cd "$SRC"
find . -type f \
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.heic' -o -iname '*.mp4' -o -iname '*.mov' \) \
! -iname '*.json' -print0 \
| perl -0ne '
while (m/\G(.*?)\0/sg) {
$f=$1;
# sucht eine 8-stellige Zahl (YYYYMMDD) im Dateinamen
if ($f =~ m{/(\d{8})[_\.]} ) {
$d=$1;
print "$f\0" if $d ge "20231130";
}
}' \
| rsync -a --files-from=- --from0 ./ "$STAGE"/
Warum besser als IMG/VID/PXL-Liste?
Weil du sonst Präfixe vergisst (PXL_* war so ein Fall).
3c) Check: Was ist im Stage?
find "$STAGE" -type f | wc -l
du -sh "$STAGE"
4) PhotoPrism vorbereiten (optional aber sinnvoll)
Wenn du gerade viel importierst:
- erst
index --cleanup(nur wenn vorher Chaos war) - TensorFlow/Gesichter optional erstmal aus, wenn Stabilität wichtig ist
Cleanup (nur wenn nötig)
cd /srv/docker/photoprism
docker compose exec photoprism photoprism index --cleanup
Hinweis: purge: Meldungen bedeuten meist DB-Aufräumen (Dateien fehlen), nicht “Fotos gelöscht”.
5) Import (= mv) in eine „Inbox“-Zone
Wir importieren immer in takeout-inbox, damit neue Bilder nicht untergehen.
cd /srv/docker/photoprism
docker compose exec photoprism photoprism mv --dest takeout-inbox /import/_stage_since_20231130
Danach index:
docker compose exec photoprism photoprism index
Ergebnis:
- neue Bilder landen unter:
photo/takeout-inbox/... - sind immer wiederfindbar über
path:takeout-inbox
6) In der WebUI sortieren: Datum + Kamera + Album
Neue Bilder finden
path:takeout-inbox
Beispiel: Pixel Bilder eines Tages finden
camera:"Pixel 7" after:2025-05-29 before:2025-05-30
Beispiel: Event im Zeitraum finden
after:2024-05-09 before:2024-05-10
Massen-Auswahl (ohne Select-All)
- ein Bild anklicken
- Shift + Klick auf letztes Bild
- gelbes Symbol: Album
- Album anlegen:
Herrentag 2024
Album taucht sofort links im Menü auf → perfekt als „Anker“.
7) Optional: Gesichtserkennung nachziehen
Wenn TensorFlow aktiv ist, läuft es nach und nach.
Manuell anstoßen (falls vorhanden):
docker compose exec photoprism photoprism faces index
Falls die Kiste instabil wird: TensorFlow vorübergehend deaktivieren:
docker-compose.yml:
environment:
PHOTOPRISM_DISABLE_TENSORFLOW: "true"
Dann:
docker compose up -d
8) Inbox leeren / finalisieren (optional)
Wenn du irgendwann Ordnung machen willst:
path:takeout-inbox- nach Events sortieren (Alben)
- optional Bilder in andere Ordner verschieben (mache ich erst, wenn alles drin und gesichert ist)
Viele lassen takeout-inbox einfach bestehen und nutzen sie als „Import-Archiv“.
9) Troubleshooting
WebUI findet Dateinamen nicht
Statt Freitext: Filter nutzen.
Beispiele:
path:takeout-inbox
name:PXL_2025*
title:"Herrentag 2024"
label:"Herrentag 2024"
davfs2 / WebDAV vermeiden
Kann Cache-Probleme und Systemstress verursachen.
Für große Syncs besser rclone sync.
Crash / Reboot unbemerkt
Vorheriges Boot-Journal checken:
journalctl -k -b -1 -e --no-pager
journalctl -b -1 -e --no-pager
10) Upgrade (Reminder)
cd /srv/docker/photoprism
docker-compose down
docker-compose pull
docker-compose up --detach
Notizen (Stand)
PhotoPrism® CE
Build 251130-b3068414c