Exporter Google Photos vers Immich avec les bonnes dates
Importer un export Google Takeout dans Immich avec les vraies dates : immich-go, pourquoi un envoi direct casse les dates, et la préparation des fichiers.
Vous avez installé Immich, envoyé votre dossier Takeout, et la chronologie affiche tout sur un seul jour. Ou vous avez utilisé immich-go et quelques milliers de photos sont quand même arrivées sans date, avec un journal qui signale des centaines de fichiers JSON manquants.
Immich est une bonne destination. L'astuce est de lui donner les dates sous une forme qu'il lit.
Comment Immich décide de la date d'une photo
Immich lit le DateTimeOriginal de l'EXIF pour les images et la date de création du conteneur pour les vidéos. S'il n'y a ni l'un ni l'autre, il prend la date de modification du fichier. Il lit aussi les fichiers .xmp. Il ne lit pas les .json de Google quand vous envoyez par l'interface web, l'application mobile ou la ligne de commande. Ces fichiers ne sont simplement pas pris en charge, et Immich journalise une erreur pour chacun.
Après décompression d'un export Takeout, la date de modification du fichier est le moment de la décompression. Toute photo sans date EXIF atterrit donc ce jour-là. Les captures d'écran, les images de messagerie, les scans et tout ce que vous avez redaté dans Google Photos sont les victimes habituelles. Les photos d'appareil avec un EXIF intact vont bien.
Voie 1 : immich-go
immich-go est un outil gratuit en ligne de commande fait exactement pour cela. Il lit directement les archives Takeout, associe chaque photo à son JSON, utilise photoTakenTime comme date, recrée les albums depuis les dossiers d'album et envoie le tout sur votre serveur. C'est la voie que recommande la communauté Immich, et elle fonctionne bien.
Une exécution de base :
immich-go upload from-google-photos --server http://votre-serveur:2283 --api-key VOTRECLE ~/Téléchargements/takeout-*.zip
Quelques points à connaître. Les versions récentes gèrent le nommage supplemental-metadata de 2024 et les noms tronqués ; si vous voyez « JSON missing » pour beaucoup de fichiers, mettez d'abord à jour. Il envoie le fichier tel quel et transmet la date du JSON séparément, donc la date est stockée dans la base de données d'Immich, pas écrite dans la photo. Si vous exportez plus tard depuis Immich, ou si vous pointez un autre outil sur les mêmes fichiers, le fichier lui-même n'a toujours pas de date. Lancez-le avec --dry-run d'abord pour voir les comptes.
Quelques centaines de JSON manquants sur une grosse bibliothèque, c'est normal. Ce sont en général des clips de Live Photos, des copies modifiées et des fichiers d'anciens envois qui n'ont jamais eu de JSON. immich-go se rabat sur la date du fichier pour ceux-là.
Voie 2 : corriger les fichiers, puis envoyer comme vous voulez
L'autre approche consiste à écrire les données du JSON dans les fichiers avant qu'ils n'arrivent dans Immich. Toutes les méthodes d'envoi fonctionnent alors, les dates voyagent avec les fichiers si vous quittez un jour Immich, et une bibliothèque externe pointée sur le dossier s'indexe correctement.
Avec exiftool :
exiftool -r -d %s -tagsfromfile "%d/%F.supplemental-metadata.json" \
"-DateTimeOriginal<PhotoTakenTimeTimestamp" \
"-GPSLatitude<GeoDataLatitude" "-GPSLatitudeRef<GeoDataLatitude" \
"-GPSLongitude<GeoDataLongitude" "-GPSLongitudeRef<GeoDataLongitude" \
-ext jpg -ext heic -ext png -overwrite_original .
Les vidéos ont besoin des balises QuickTime, et les JSON tronqués ou avec (1) demandent des passes supplémentaires. Le guide exiftool détaille tout cela.
Takeout JSON Metadata Fixer fait ce travail dans une application de bureau sur Windows, Mac et Linux, y compris sur la machine qui héberge Immich.
Indiquez-lui les archives Takeout. Elle écrit la vraie date et le GPS dans chaque photo et vidéo, règle les dates de fichier en conséquence, et classe la sortie par année et par mois si vous le souhaitez. Deux options comptent pour Immich. Laissez les Live Photos sur « Garder le clip à côté de la photo » pour qu'Immich apparie la photo et le clip à l'envoi. Et activez « Écrire des sidecars .json » si vous comptez utiliser immich-go ensuite ; elle écrit un JSON propre par fichier au format de Google, avec la vraie date et les coordonnées, pour qu'immich-go n'ait rien à deviner.
Le résultat est un dossier normal de photos datées. Envoyez-le avec l'interface web, la ligne de commande ou immich-go. Ou ajoutez-le comme bibliothèque externe et laissez Immich l'indexer sur place. Les 1000 premières photos sont gratuites.
Les albums
Takeout représente un album par un dossier contenant des copies de ses photos plus un metadata.json avec le nom de l'album. immich-go les transforme en albums Immich. Si vous prenez la voie « corriger les fichiers », vous envoyez soit aussi les dossiers d'album, ce qui crée des doublons qu'Immich dédoublonne ensuite par empreinte, soit seulement les dossiers Photos from YYYY et vous reconstruisez les albums à la main.
Immich dédoublonne les copies octet pour octet à l'envoi. Une fois les dates écrites dans les fichiers, deux copies de la même photo restent identiques entre elles, donc le dédoublonnage fonctionne toujours.
Vérifier le résultat
Après l'envoi, ouvrez la chronologie et remontez à une année ancienne. Ouvrez une photo et regardez le panneau d'informations ; la date doit correspondre à ce que Google Photos affichait. Ouvrez la carte. Les photos avec un vrai GPS doivent y apparaître. Les photos qui avaient 0.0, 0.0 dans le JSON ne doivent pas apparaître dans l'océan ; si c'est le cas, votre fusion a écrit des zéros et il faut les retirer avec exiftool -gps:all= sur les fichiers concernés.
Si un lot reste faux, Immich permet de sélectionner des photos et de modifier la date en masse depuis l'interface web.
Questions fréquentes
immich-go ou corriger les fichiers d'abord ?
Les deux fonctionnent. immich-go est plus rapide et reconstruit les albums. Corriger les fichiers d'abord met les dates dans les photos, ce qui compte si vous utilisez des bibliothèques externes ou si vous pourriez changer d'outil plus tard. Certains font les deux : corriger les fichiers, puis envoyer avec immich-go pour les albums.
Pourquoi Immich affiche-t-il une heure décalée de quelques heures ?
L'horodatage du JSON est en UTC. Écrit dans l'EXIF, il devient une heure locale dans le fuseau de votre ordinateur, sans fuseau enregistré. Immich l'affiche tel quel. Réglez le fuseau de votre ordinateur pour qu'il corresponde aux photos avant la fusion, ou ajustez dans Immich ensuite.
Immich dit « Unsupported file » pour chaque .json. Est-ce un problème ?
Non. Il vous dit qu'il les a ignorés. Supprimez les JSON avant l'envoi, ou utilisez immich-go, qui les consomme.
Dois-je convertir le HEIC ?
Non. Immich lit le HEIC et génère ses propres aperçus. Gardez les originaux.