supplemental-metadata.json in Google Takeout erklärt
Warum Google die JSON-Dateien 2024 umbenannt hat, warum manche Namen abgeschnitten sind, wie die (1)-Duplikate zusammengehören und warum Skripte sie übersehen.
Sie haben ein Skript laufen lassen, das Takeout-Exporte früher problemlos repariert hat, und diesmal hat es die Hälfte der Fotos übersprungen. Oder Sie haben in den Ordner geschaut, neben einem Foto IMG_5512.HEIC.supplemental-metadata.json gesehen und neben einem anderen PXL_20240311_183022711.jpg.supplemental-m.json, und sich gefragt, ob die zweite Datei kaputt ist.
Keine von beiden ist kaputt. Google hat die Benennung der JSON-Dateien geändert, und die meisten Anleitungen von vor 2024 wissen das nicht.
Die Umbenennung 2024
Jahrelang hieß die JSON-Datei zu IMG_5512.HEIC einfach IMG_5512.HEIC.json. Fotoname, dann .json. Einfach, und jedes Skript hat darauf gepasst.
Irgendwann 2024 hat Google auf IMG_5512.HEIC.supplemental-metadata.json umgestellt. Gleicher Inhalt, gleiche Felder, längerer Name. Die Idee scheint zu sein, dass supplemental-metadata beschreibt, was die Datei ist, statt eine nackte .json zu hinterlassen, die wie die eigenen Daten des Fotos aussieht. Exporte seit der Umstellung nutzen den neuen Namen. Ein alter Export auf irgendeiner Festplatte nutzt den alten, und ein gemischter Ordner kann beide enthalten.
Alles, was nach <Foto>.json sucht, findet jetzt nichts und macht weiter. Manche Werkzeuge melden für jede Datei "keine JSON-Datei gefunden". Andere greifen stillschweigend auf das Dateidatum zurück, also das Download-Datum, und die Fotos kommen ohne Fehlermeldung falsch heraus. Dieses stille Versagen steckt hinter vielen Forenbeiträgen der Sorte "die Korrektur hat nicht funktioniert".
Die Grenze bei 46 Zeichen
Die zweite Änderung ist älter, aber durch die Umbenennung fällt sie stärker ins Gewicht. Google kürzt den gesamten JSON-Dateinamen auf 46 Zeichen. Mit der alten kurzen Endung war das selten ein Problem. Mit .supplemental-metadata.json verliert jeder Fotoname mit mehr als etwa 19 Zeichen einen Teil seiner Endung.
Ein Pixel-Foto namens PXL_20240311_183022711.jpg hat 26 Zeichen. Mit .supplemental-metadata.json sind es 53. Google kürzt auf 46: PXL_20240311_183022711.jpg.supplemental-m.json. Ein Samsung-Foto 20240311_183022.jpg bekommt 20240311_183022.jpg.supplemental-metada.json. Jede Kameramarke ergibt eine etwas andere Kürzung, es gibt also keine einzelne Endung, auf die man passen könnte.
Die verlässliche Regel lautet: Der JSON-Name ist ein Präfix von <Fotoname>.supplemental-metadata.json. Ein Skript muss genau das prüfen, statt eine feste Zeichenkette zu vergleichen. Sehr lange Originalnamen, etwa selbst eingetippte, können auch im Fotonamen selbst gekürzt sein. Deshalb lohnt es sich, das Feld title in der JSON-Datei zu lesen.
Wohin die (1) wandert
Google Fotos erlaubt zwei Dateien mit demselben Namen, und Takeout muss beide in einen Ordner legen. Die zweite bekommt einen Zähler: IMG_5512.HEIC und IMG_5512(1).HEIC.
Man würde erwarten, dass die JSON-Dateien IMG_5512.HEIC.supplemental-metadata.json und IMG_5512(1).HEIC.supplemental-metadata.json heißen. Tun sie nicht. Der Zähler wandert ans Ende des JSON-Namens, vor .json: IMG_5512.HEIC.supplemental-metadata(1).json. Im alten Schema war es IMG_5512.HEIC(1).json.
Ein Werkzeug muss also den Fotonamen nehmen, die (1) entfernen, den JSON-Namen bilden und die (1) direkt vor .json wieder einfügen. Kombiniert mit der Kürzung entstehen Namen wie PXL_20240311_183022711.jpg.supplemental-(1).json. Echte Exporte enthalten so etwas.
Duplikate mit Zähler sind häufiger, als man denkt. Dasselbe Foto in zwei Alben, ein Foto, das Sie bearbeitet haben und von dem Google beide Versionen behalten hat, oder zwei Handys, die beide eine Datei IMG_0001.JPG genannt haben.
Die bearbeiteten Kopien
In Google Fotos bearbeitete Bilder kommen als zwei Dateien heraus: IMG_5512.HEIC und IMG_5512-edited.HEIC. Meist gibt es nur eine JSON-Datei, und die hängt am Originalnamen. Die bearbeitete Kopie hat keine eigene, ein naives Werkzeug lässt sie also ohne Datum. Ein sorgfältiges Werkzeug entfernt -edited und nutzt die JSON-Datei des Originals mit. Mehr dazu im englischen Artikel Takeout duplicates and edited versions.
Zuordnung von Hand
Wenn Sie exiftool nutzen, lassen Sie es zweimal laufen, einmal pro Endung:
exiftool -r -d %s -tagsfromfile "%d/%F.supplemental-metadata.json" "-DateTimeOriginal<PhotoTakenTimeTimestamp" -ext jpg -ext heic -overwrite_original .
exiftool -r -d %s -tagsfromfile "%d/%F.json" "-DateTimeOriginal<PhotoTakenTimeTimestamp" -ext jpg -ext heic -overwrite_original .
Dann listen Sie mit exiftool -r -if 'not $DateTimeOriginal' -filename . auf, was noch ohne Datum ist. Übrig bleiben die gekürzten und die (1)-Fälle. Die einfachste Lösung ist, diese JSON-Dateien mit einem kurzen Skript auf den vollen erwarteten Namen umzubenennen und exiftool erneut laufen zu lassen. GooglePhotosTakeoutHelper, ein kostenloses Community-Werkzeug, hat diese Zuordnung eingebaut und ist die übliche Empfehlung, wenn Sie im Terminal zu Hause sind. Seine Versionen hinken Googles Änderungen manchmal hinterher. Werfen Sie einen Blick auf den Issue-Tracker, wenn ein Lauf Dateien überspringt.
Die App
Takeout JSON Metadata Fixer behandelt alle diese Fälle ohne Konfiguration, auf Windows, Linux und Mac.
Für jedes Foto probiert die App den Namen von 2024, den alten Namen, den verschobenen (1)-Zähler und schließlich jede .json-Datei im Ordner, deren Name ein Präfix des vollen erwarteten Namens ist. Bearbeitete Kopien leihen sich die JSON-Datei des Originals. Dann schreibt sie Datum und GPS in die Datei. Am Ende meldet sie, wie viele Fotos eine JSON-Datei hatten und wie viele auf EXIF oder das Dateidatum zurückgefallen sind, sodass Sie sehen, ob die Zuordnung geklappt hat, bevor Sie etwas löschen. Ein Probelauf zeigt den Plan, ohne zu schreiben. Die ersten 1000 Fotos sind kostenlos.
Häufige Fragen
Unterscheidet sich der Inhalt von supplemental-metadata.json von der alten .json?
Nein. Die Felder sind dieselben: title, photoTakenTime, creationTime, geoData, geoDataExif und so weiter. Nur der Dateiname hat sich geändert.
Mein Foto hat gar keine JSON-Datei. Warum?
Die Videoclips von Live Photos haben oft keine. Manche sehr alten Uploads haben keine. Und wenn eine JSON-Datei gekürzt ist oder einen verschobenen Zähler hat, meldet Ihr Werkzeug sie vielleicht als fehlend, obwohl sie da ist. Sehen Sie selbst im Ordner nach.
Kann ich die JSON-Dateien auf das alte Schema zurückbenennen?
Ja, und damit funktionieren alte Skripte wieder. Eine Umbenennung, die .supplemental-metadata entfernt und die (1) zurück in den Foto-Teil des Namens schiebt, reicht. Machen Sie das zuerst an einer Kopie.
Wird Google den Namen wieder ändern?
Möglich. Der sichere Ansatz für jedes Werkzeug ist, nach Präfix und nach dem Feld title zuzuordnen, nicht nach einer exakten Endung.