Einfaches Backup aller iPhone Fotos (macOS)

Die beste Kamera ist die, welche man immer dabei hat. Das trifft bei mir jedenfalls auf zu 99.9% auf mein iPhone zu. Folglich sind im Laufe der Jahre viele zehntausend Fotos und Videos entstanden - mehr oder weniger gelungene ;)

Im Rahmen der Überarbeitung meiner Backup-Strategie wollte ich nun auch diese Fotos in meine Sicherungen einbeziehen. Klar, speichert Apple mir die Fotos auch in der iCloud, aber man weiß ja nie …

50.000 Fotos and counting…

Einzelne Fotos kann man auf vielerlei Arten sichern (von der “Photos” app auf macos exportieren, via AirDrop kopieren etc) - aber bei mir haben sich mehr als 50.000 Fotos angesammelt - und da gehen diese Methoden alle in die Knie…

Die folgenden Schritte gelten für macOS.

1. Backup der Fotos

Die Fotos vom iPhone werden in der Photos library von macOS abgelegt. Zu finden sind sie dort unter “~/Pictures/ Photos Library.photoslibrary”. Das ganze ist ein Archiv und Apple verwaltete darin nicht nur die Fotos und Videos sondern auch jede Menge interne Metainformationen inklusive einer Datenbank mit sqlite - es ist also das Beste, in diesem Archiv nichts zu verhändern. Ein erstes, einfaches Backup sichert einfach das ganze Archiv wie es ist. Dabei werden aber Informationen redundant gespeichert (z.B. Thumbnail-Ansichten der Fotos mit einer Auflösung von 1024 Pixel lange Kante) - diese sind eigentlich nicht wirklich notwendig. Ausserdem hätte ich gerne die Foto- bzw. Videodateien gesichert ohne Schnickschnack. Weiters ist die Datenstruktur im Archiv sehr unpraktisch: Im Verzeichnis ./originals/ finden sich alle Fotos - aufgeteilt nach einer internen ID (Zahlen 0-9 und Buchstaben A-F). So findet man eigentlich überhaupt nix in diesem Backup ;)

2. Befreien der Fotos aus der Mac-Struktur

Wer also mit dem ganzen Archiv nicht zufrieden ist und seine Fotos gerne selbst OS-unabhängig abgelegt hätte, der kann diese recht flexibel mit dem MacOS Terminalprogramm “osxphotos” erledigen. OK, dazu muss man ein Terminal unter OSX öffnen - vielleicht fällt das nicht für alle unter “einfach”, aber - bear with me - es zahlt sich aus!

Da dieses in Python programmiert ist, installiert man sich dieses am besten mit homebrew. In einem Terminalfenster folgendes eingeben:

  1. install homebew (if its not installed yet)

  2. brew install pipx

  3. pipx install osxphotos

  4. und schon ist es verwendbar (ev ein neues Terminal öffnen, falls osxphotos noch nicht im Pfad ist)

Folgendes Kommando sichert nun alle relevanten Dateien:

osxphotos export --export-by-date ./export --download-missing --update --touch-file

Die einzelnen Parameter bewirken dabei folgendes:

Option “export-by-date”: Alle relevanten Dateien (.jpg, .heic, .tiff, .mov) feinsäuberlich in eine Verzeichnisstruktur mit <year>/<month>/<day> kopiert. Dabei wird sogar der originale Dateiname beibehalten (wenn man zB Fotos via AirDrop aufs iPhone kopiert hat oder kein Erstellungsdatum in den EXIF Daten gespeichert werden (wie zB bei Screenshots oder bearbeiteten Fotos mit Apps)

Option “download-missing”: Durch die Einstellung “Optimise iPhone Storage” der Photos app sind nicht alle Fotos auf der lokalen Festplatte. Damit können diese auch nicht exportiert werden. Mit der Option werden die fehlenden Fotos via Photos app von der iCloud heruntergeladen - was natürlich dauert… Am Besten in ein neues Verzeichnis exporten - in ein vorhandenes via —update (siehe nächsten Punkt) hat bei mir nicht geklappt.

Die Originaldatei “Photos Library.photoslibrary” zeigt nach einem Durchlauf mit “--download-missing” keine Veränderung in der Dateigröße. Das bedeutet wohl, dass die heruntergeladenen Dateien direkt in den Export-Pfad gespeichert werden - fein, weil sie damit nicht mein System-Volume zumüllen.

Option “update”: Da die Zeitstempel der Fotos korrekt im Export gesetzt werden, kann man nun einfach via differenziellem Backup immer die neuen Files wegsichern. Um einen bereits gelaufenen Export nur mit neuen Files zu bespielen stellt osxphotos sogar eine eigene Option zur Verfügung: “--update” - chapeau! Siehe die Option touch-file.

Option “touch-file”: By default bekommt die exportierte Datei die aktuelle Zeit, was recht wenig Sinn macht. Um die neu erstellte Backupdatei mit dem Originalzeitstempel zu versehen, zu dem das Foto angefertigt wurde empfiehlt sich die Option --touch-file

Anmerkung 1: Das kann eine Weile dauern - bei mir lief der Export gute 55 Minuten bei knapp 50.000 Bilddateien ;) Zusätzlich stürzt der Python-Hilfsprozess hin und wieder ab - nur ein Force Quit und erneutes starten hat bei mir geholfen.

Anmerkung 2: Eigentlich wollte ich die Originaldateien nicht verwenden und mit dem Parameter “—db” eine Kopie verwenden. Dies funktioniert aber scheinbar nicht, wenn man wie ich (siehe unten) den Parameter --download-missing verwenden will um fehlende Dateien aus der iCloud nachzuladen.

Anmerkung 3: osxphotos ist ziemlich umfangreich - es lohnt sich die Hilfeseiten dazu durchzulesen, da man damit zB auch flexibel Fotos via Tags abfragen kann und auch den Export anders parametrisieren kann (siehe weiter unten)

Das Ergebnis des Kommandos sieht dann in etwa so aus:

Gut zu sehen: Die Dateien vom 1. Jänner 2022 wurden am iMac von mir erstellt, via AirDrop aufs iPhone gespielt und dort mit Darkroom bearbeitet (dieses hängt dann “ Edited” an den Dateinamen).

Weitere Praktische Optionen

Mit der Option --verbose erhält man detailliertere Infos, was osxphotos eigentlich tut, mit --report export.csv lassen sich diese in eine Datei ausgeben und mit --dry-run sieht man, was der Durchlauf verändern würde.

3. Löschen von Fotos

Bei knapp 50.000 Fotos (auch wenn sie über viele Jahre entstanden sind) kann man einiges löschen. Richtig praktisch geht das irgendwie nirgends. Aber wie sagt man so schön: A problem for another day.