Takeout JSON

Cosa sono i file JSON nelle foto di Google Takeout?

Cosa contiene il file .json accanto a ogni foto di un'esportazione Google Takeout, perché Google lo aggiunge e quando è sicuro eliminarlo.

Hai estratto l'esportazione di Google Foto e metà dei file non sono foto. Accanto a ogni immagine c'è un file .json con un nome tipo IMG_3391.HEIC.supplemental-metadata.json. Non li hai chiesti, quasi nessun programma li apre, e sono migliaia.

Non sono spazzatura. Contengono le date e i luoghi che Google non ha scritto dentro le tue foto.

Perché Google li aggiunge

Google Foto salva quello che sa di una foto nel proprio database: quando è stata scattata, dove, in quale album sta, se l'hai messa tra i preferiti, e ogni data o luogo che hai corretto a mano. Il file immagine può avere o non avere queste informazioni nel suo blocco EXIF. Gli screenshot e le immagini dalle chat di solito non ce l'hanno. Le modifiche fatte in Google Foto non ci finiscono mai.

Quando esporti, Google ti restituisce il file immagine più o meno com'era stato caricato. Non riscrive il suo database dentro ogni file. Scarica invece la voce del database in un piccolo file di testo accanto all'immagine. Quel file di testo è il "sidecar", e JSON è solo il formato in cui è scritto.

Cosa c'è dentro

Aprine uno con Blocco note, TextEdit o qualunque editor. Un file tipico, un po' accorciato, è questo:

{
  "title": "IMG_3391.HEIC",
  "description": "",
  "imageViews": "12",
  "creationTime": {
    "timestamp": "1690120442",
    "formatted": "Jul 23, 2023, 2:34:02 PM UTC"
  },
  "photoTakenTime": {
    "timestamp": "1689929130",
    "formatted": "Jul 21, 2023, 9:25:30 AM UTC"
  },
  "geoData": {
    "latitude": 41.8902,
    "longitude": 12.4922,
    "altitude": 35.0,
    "latitudeSpan": 0.0,
    "longitudeSpan": 0.0
  },
  "geoDataExif": {
    "latitude": 41.8902,
    "longitude": 12.4922,
    "altitude": 35.0
  },
  "url": "https://photos.google.com/photo/...",
  "googlePhotosOrigin": {
    "mobileUpload": {
      "deviceType": "IOS_PHONE"
    }
  }
}

I campi che contano:

photoTakenTime è la data di scatto, così come la mostrava Google Foto. Il timestamp sono i secondi trascorsi dal 1° gennaio 1970, in UTC. Se hai corretto una data dentro Google Foto, qui trovi la tua correzione. È il campo da usare.

creationTime è il momento in cui il file è stato caricato su Google. Per una foto scattata e salvata lo stesso giorno i due valori coincidono. Per la scansione di una stampa del 1985 caricata nel 2021 sono a decenni di distanza.

geoData è la posizione come la conosceva Google Foto, inclusi i luoghi impostati a mano. geoDataExif è la posizione che c'era nell'EXIF del file al momento del caricamento. Quando una foto non ha posizione, entrambi contengono zeri: 0.0, 0.0, un punto nell'oceano Atlantico. Tratta gli zeri come "sconosciuto", non come un luogo vero. Ne parliamo in foto di Google Takeout senza posizione.

description è la didascalia che hai scritto, se c'è. people elenca le persone taggate, quando presente. favorited è vero per le foto tra i preferiti. title è il nome originale del file, utile perché Takeout a volte accorcia il nome reale.

I file degli album

Ogni cartella di album ha anche un metadata.json che descrive l'album, non una foto. Contiene il titolo dell'album e a volte una data e un segnale di condivisione. È piccolo e innocuo. Gli strumenti che importano gli album, come immich-go, lo leggono.

Perché hanno nomi strani

Le esportazioni più vecchie chiamavano il file IMG_3391.HEIC.json. Dal 2024 il nome è diventato IMG_3391.HEIC.supplemental-metadata.json. Google inoltre taglia i nomi lunghi a 46 caratteri, così una foto di un Pixel si ritrova con un compagno chiamato PXL_20230721_092530123.jpg.supplemental-m.json. Quando due foto hanno lo stesso nome, il contatore va sul JSON in un punto diverso: IMG_3391(1).HEIC si abbina a IMG_3391.HEIC.supplemental-metadata(1).json. I dettagli sono in supplemental-metadata.json spiegato.

Si possono eliminare?

Sì, ma solo dopo averli usati. Se elimini prima i JSON, le date e le posizioni che contengono sono perse. Le foto mostreranno per sempre la data del download, e non c'è modo di recuperare l'informazione se non rifacendo Takeout.

Se tutte le tue foto hanno già un EXIF buono, i JSON aggiungono poco. Puoi controllare con exiftool: exiftool -r -if 'not $DateTimeOriginal' -filename . stampa ogni foto senza data EXIF. Se l'elenco è vuoto, elimina pure.

Per la maggior parte delle librerie l'elenco non è vuoto. L'ordine sicuro è: unisci i dati dei JSON dentro le foto, controllane qualcuna, poi elimina i .json. Immich, PhotoPrism e altri strumenti self-hosted leggono direttamente i JSON di Takeout durante l'importazione, quindi se la tua destinazione è una di quelle, tienili fino a importazione finita.

Rimettere i dati dentro le foto

Puoi farlo con exiftool, che legge il JSON e scrive i tag EXIF. Il comando e le sue trappole sono nella guida a exiftool. Script gratuiti come GooglePhotosTakeoutHelper fanno la stessa cosa.

Takeout JSON Metadata Fixer lo fa come app desktop per Windows, Mac e Linux, in italiano.

Legge ogni JSON, scrive photoTakenTime nell'EXIF della foto, imposta le date del file allo stesso valore e scrive le coordinate GPS quando sono vere e non zeri. Conosce entrambi gli stili di nome, i nomi troncati e i contatori (1), quindi non salta i file che uno schema fisso non troverebbe. Se vuoi, rinomina e ordina le foto in cartelle, e può scrivere nuovi .json puliti accanto ai file in uscita per Immich o PhotoPrism. Tutto gira sul tuo computer. Le prime 1000 foto sono gratuite.

Domande frequenti

C'è un JSON per ogni foto?

Di solito sì. Le foto presenti in più album hanno una copia del JSON in ogni cartella di album. Qualche foto non ha nessun JSON, più spesso le clip delle Live Photo e i file di caricamenti molto vecchi. Quelle tengono la data che hanno nel file.

Google Foto stesso li rilegge?

No. Se ricarichi la cartella su Google Foto, ignora i JSON e usa l'EXIF dei file. È per questo che chi sposta le foto tra due account Google perde le date.

I timestamp sono nel mio fuso orario?

No. Sono istanti in UTC. Uno strumento li converte in ora locale quando scrive l'EXIF, usando il fuso del computer. Controlla che il computer sia impostato sul fuso in cui è stata scattata la maggior parte delle foto.

I file JSON occupano molto spazio?

Da qualche centinaio di byte a un paio di kilobyte ciascuno. Diecimila file sono circa 10 MB. Il motivo per eliminarli non è lo spazio, è il disordine.