Ein Wiki privater Natur

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):

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:


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?


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:

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:


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)

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:

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