Le contexte : pourquoi ce REX
Dans le premier article de cette série, nous décrivions les pièges théoriques de la sortie de Google Photos : fragmentation des archives, doublons, et surtout métadonnées EXIF externalisées dans des fichiers JSON. Beaucoup de lecteurs ont demandé : « concrètement, sur une vraie photothèque, ça se passe comment ? »
Voici la réponse, sans embellissement : la migration d'une photothèque Google Photos accumulée pendant plus de vingt-cinq ans (1998 → 2026), soit 1,2 To et plusieurs centaines de milliers de photos et vidéos. Les chiffres, les outils, les temps réels — et les pièges qu'on ne soupçonne pas en lisant la doc Google.
Le cas en chiffres
Volume Google Photos : ≈ 1,2 To compressés · Période : 1998 → 2026 · Archives Takeout générées : 24 fichiers ZIP de ~50 Go chacun · Fichiers totaux : ≈ 800 000 (photos + vidéos + métadonnées JSON) · Albums : une centaine, dont des albums nommés par année et des albums thématiques.
Phase 1 — Le téléchargement : une journée entière
Première décision : où poser les fichiers ? Avec 1,2 To en sortie, l'ordinateur portable (SSD 512 Go) est immédiatement disqualifié. Direction le NAS à la maison — monté dans le réseau, suffisamment de place, et accessible depuis n'importe quelle machine de la maison.
Le piège : Takeout veut tout vous envoyer d'un coup
Quand on demande à Google Takeout d'exporter 1,2 To de photos, l'outil découpe en archives de 50 Go (la taille maximale) et propose les liens un par un. Sur le papier, on télécharge tout depuis le navigateur. Dans la vraie vie :
- Les liens expirent après quelques jours — il faut maintenir le rythme.
- Lancer tous les téléchargements en parallèle fait planter le navigateur, sature la connexion, et provoque des fichiers tronqués impossibles à détecter avant décompression.
- Les téléchargements interrompus repartent rarement de là où ils s'étaient arrêtés — il faut souvent recommencer le fichier entier.
La règle apprise à la dure : trois fichiers à la fois
Au-delà de trois téléchargements simultanés, le navigateur perd la main, des fichiers se corrompent, et il faut tout reprendre. Trois par trois, le rythme reste stable, on sature à peine la connexion, et chaque archive arrive complète. C'est lent — mais ça finit.
Bilan de la phase 1 : une journée entière de téléchargement (par paquets de 3, en surveillant régulièrement). Connexion fibre 1 Gbit/s, NAS branché en filaire, navigateur dédié laissé ouvert. Pas un travail compliqué, mais une journée pendant laquelle on ne fait pas autre chose de gourmand sur le réseau.
Phase 2 — La décompression : 7 h 23 minutes
Une fois les 24 fichiers ZIP en sécurité sur le NAS, place à la décompression. Là encore, on apprend vite que la parallélisation est l'ennemie : lancer plusieurs unzip en même temps sur un même NAS fait s'effondrer le débit (tous les processus se battent pour les mêmes têtes de lecture / cache), et le total est plus long qu'en séquentiel.
Méthode retenue : un script qui décompresse une archive après l'autre, dans un seul dossier de destination (les ZIP Google Takeout partagent la même racine Takeout/Google Photos/), avec écrasement silencieux en cas de doublon — les photos d'albums sont effectivement dupliquées entre archives, et la déduplication par nom de fichier est ici sans risque.
Les chiffres bruts
24 archives traitées séquentiellement
Durée moyenne par archive : 15 à 20 minutes
Durée totale : 7 h 23 min
Volume décompressé : 1,24 To
Fichiers extraits : ≈ 800 000
Erreurs : 0 (tous les ZIP étaient intègres)
Les fichiers ZIP d'origine sont conservés en filet de sécurité : si quelque chose se passe mal en aval (réinjection des EXIF par exemple), on peut tout ré-extraire en 7 h sans relancer la phase 1. Ça consomme 1,2 To de plus sur le NAS pendant tout le reste du projet — un investissement raisonnable au regard du risque.
Phase 3 — La réinjection des métadonnées EXIF
C'est l'étape la plus pernicieuse. Comme expliqué dans l'article précédent, Google Takeout sort les métadonnées (date de prise de vue, GPS, description) des photos et les place dans un fichier JSON séparé pour chaque image :
Surprise 2024 : Google a changé le nom des sidecars
Avant 2024, les fichiers de métadonnées s'appelaient IMG_1234.jpg.json. Désormais, Google les nomme IMG_1234.jpg.supplemental-metadata.json — et les tronque à 46 caractères sans préserver l'extension, ce qui donne des sidecars du genre IMG_1234.jpg.supplemental-met.json.
Conséquence : la quasi-totalité des outils gratuits référencés sur le web ne reconnaissent plus ces fichiers. Le projet le plus populaire (Google Photos Takeout Helper, alias GPTH) n'est plus maintenu depuis 2023 et casse silencieusement sur le nouveau format : il extrait les fichiers, ne trouve pas les sidecars, et vous laisse avec des photos sans métadonnées.
La solution : utiliser le fork actif (gpth-neo)
Il existe un fork actif maintenu par la communauté : Xentraxx/GooglePhotosTakeoutHelper (alias gpth-neo). Version 6.1.5 publiée en mai 2026, il reconnaît à la fois l'ancien et le nouveau format de sidecar, gère la troncature de noms, traite correctement les photos Pixel (formats .MP/.MV), reconstitue les albums via des symlinks (sans dupliquer les fichiers) et réorganise tout par année/mois selon la vraie date.
Binaire Dart natif
11 Mo, aucune dépendance Dart à installer. Pose à côté de exiftool et c'est parti.
Albums = symlinks
Le mode --albums shortcut évite la duplication des fichiers tout en préservant la structure des albums.
Pipeline 8 étapes
Fix extensions → discover → merge → extract dates → find albums → move → write EXIF → update timestamps.
Toujours exiger exiftool
Pour les non-JPEG (HEIC, MP4, RAW), gpth délègue à exiftool. Sans lui, les EXIF ne sont écrits que sur les JPEG.
Installation : deux outils, zéro sudo
Sur la machine de travail (Ubuntu 24.04, sans accès root), tout s'installe dans ~/.local/. Pas besoin d'apt, donc pas besoin du mot de passe administrateur. Deux outils suffisent :
-
gpth-neo v6.1.5 — un seul binaire Dart natif Linux x64 (11 Mo) téléchargé depuis les releases GitHub, posé dans
~/.local/bin/gpthavec unchmod +x. Pas d'environnement Dart à installer. -
exiftool 13.58 — c'est en réalité un script Perl autoportant : on télécharge le tarball depuis exiftool.org, on l'extrait dans
~/.local/exiftool-dist/, et on fait un symlink vers~/.local/bin/exiftool. Perl est déjà sur la machine (Ubuntu en a une par défaut), donc rien à compiler.
Avec ~/.local/bin dans le PATH, les deux commandes sont accessibles. Total : moins de 5 minutes d'installation pour 12 h de traitement à venir.
La commande exacte du run complet
Une fois les outils en place, tout le traitement tient en une seule invocation gpth. Voici la commande utilisée, lancée en arrière-plan avec nohup et journalisée dans un fichier dédié :
La commande lancée
nohup gpth \
--input /mnt/nas/photo/temp/takeout_merged \
--output /mnt/nas/photo/temp/takeout_organized \
--albums shortcut \
--divide-to-dates 2 \
--no-keep-input \
--no-interactive \
--verbose >> gpth.log 2>&1 &
disown
Trois drapeaux importants :
--albums shortcut: les albums deviennent des dossiers de symlinks vers les originaux. Pas de duplication, 5 959 albums préservés.--divide-to-dates 2: sortie enALL_PHOTOS/AAAA/MM/au lieu de tout balancer à plat.--no-keep-input: gpth déplace les fichiers depuis l'entrée vers la sortie au lieu de les copier. Économise 1,2 To d'espace et accélère beaucoup l'étape 6. Filet de sécurité : les ZIP d'origine restent intacts.
Le pipeline en 8 étapes : combien chaque étape coûte vraiment
gpth-neo découpe le travail en huit étapes successives. Chacune écrit dans un fichier progress.json (450 Mo à la fin) qui sert de point de reprise en cas d'interruption — point essentiel sur lequel on revient plus bas. Voici la durée mesurée de chaque étape sur 283 050 médias :
Les 8 étapes, en durée réelle
1. Fix Extensions → renommage .PNG→.jpg, .AVI→.mp4, etc. selon le magic byte 34 min 28 s
2. Discover Media → indexation de tous les fichiers et de leurs sidecars JSON 33 min 39 s
3. Merge Media Entities → déduplication des photos présentes à la fois dans un dossier année et dans un album 19 min 21 s
4. Extract Dates → lecture des 261 859 JSON pour récupérer date + GPS 1 h 46 min
5. Find Albums → mise en correspondance album/canonical < 1 s
6. Move Files → déplacement physique de 283 050 fichiers + création de 312 245 symlinks d'albums 1 h 13 min
7. Write EXIF Data → appels exiftool en mode IPC stay-open sur les fichiers à corriger 11 h 07 min
8. Update Creation Time → utimes() sur 274 282 fichiers pour aligner la date filesystem 1 h 06 min
TOTAL gpth : 16 h 40 min machine, hors interruption / reprise (cf. plus bas)
L'étape qui domine, de très loin, c'est Write EXIF Data (11 h sur 16). C'est elle qui appelle exiftool pour chaque fichier non-JPEG et chaque fichier dont la date EXIF était absente ou fausse. Les photos qui avaient déjà une bonne date sont identifiées avec le message « existing EXIF date found, skipping JSON-derived date write » et ne consomment quasiment rien — heureusement, parce que ça représente la majorité des Pixel récents.
L'interruption et la reprise : ce que gpth sait (et ne sait pas) reprendre
À 53 % de l'étape 7, on a dû interrompre le run pour récupérer le NAS. Bonne nouvelle : gpth écrit son progress.json au fil du temps. Mauvaise nouvelle : le checkpointing fonctionne aux frontières des étapes, pas à l'intérieur. Concrètement :
- ✅ Étapes 1 à 6 (terminées) : rechargées instantanément depuis
progress.jsonavec le message « Auto-Resume enabled: step already completed previously ». - ❌ Étape 7 (en cours au moment du Ctrl+C) : repart de zéro. Les 53 % déjà traités lors du premier passage ne sont pas perdus dans le résultat (l'EXIF a bien été écrit), mais gpth doit ré-examiner chaque fichier pour le confirmer.
Conséquence : sur le second run, l'étape 7 a tout de même mis 11 h 07 (légèrement plus rapide que le premier passage parce que la majorité des fichiers se font sauter avec « existing EXIF date found »). Pour planifier la reprise sans rester devant l'écran, on a programmé l'exécution via un timer systemd utilisateur :
Planifier la reprise sans cron ni at
systemd-run --user \
--on-calendar='2026-05-18 23:00:00' \
--unit=gpth-resume \
~/.local/bin/gpth-resume.sh
Le timer one-shot lance le script gpth-resume.sh à 23 h précises, qui purge d'éventuels processus exiftool orphelins puis relance gpth avec exactement les mêmes flags. Pas de droits root, pas d'installation de paquet, pas de crontab à éditer — juste une commande qui plante un service transient dans systemd --user et qui se nettoie tout seul après exécution.
Le résultat final en chiffres
Une fois le run terminé, gpth affiche un récap brut. Voici le bilan honnête de la restauration EXIF sur cette photothèque :
Origine de la date de prise de vue
JSON (sidecar Takeout, méthode normale) → 261 859 fichiers (92,5 %)
EXIF (déjà correct dans le fichier d'origine) → 816 fichiers (0,3 %)
folderYear (déduite du nom du dossier Photos de 2014/) → 8 525 fichiers (3,0 %)
none (aucune source exploitable) → 11 850 fichiers (4,2 %)
Bilan : 95,8 % des photos arrivent avec une date correcte dans leur EXIF.
Les 4,2 % sans date sont essentiellement des screenshots et des fichiers générés (images sans EXIF d'origine et sans JSON exploitable). Sur ceux-là, l'outil n'a rien à offrir : il garde la date filesystem comme fallback, qui correspond à la date d'export Takeout. Pour la quasi-totalité des photos prises avec un téléphone ou un appareil, en revanche, la restauration est parfaite — spot-checks faits sur photos Pixel 2024 (date + GPS), Panasonic Lumix 2010 (date) et vidéos MP4 : tout est en place.
Chronologie totale et coût réel
Le projet, du début à la fin (chiffres réels)
Jour 1 Téléchargement Takeout par paquets de 3 → ~24 h cumulées de surveillance active
Jour 2 (matin) Vérification des 24 archives, montage NAS
Jour 2 (8h59 → 16h21) Décompression séquentielle des 24 ZIP → 7 h 23 min
Jour 2 (soirée) Installation gpth-neo + exiftool, test sur un album, lancement run → ~30 min
Jour 2 (18 h 56 → 23 h 24) Premier passage gpth interrompu à 53 % de l'étape 7 → ~4 h 30
Jour 3 NAS rendu disponible pour le quotidien ; planification de la reprise à 23 h via systemd-run --user
Jour 3 (23 h 00) → Jour 4 (11 h 27) Reprise gpth, étapes 1-6 instantanées depuis progress.json, étape 7 relancée de zéro → 12 h 27 min
Jour 4 (matin) Vérification, spot-checks EXIF, nettoyage des fichiers intermédiaires
TOTAL CALENDAIRE : 4 jours · TOTAL MACHINE : environ 40 h de traitement (16 h 40 de gpth pur, le reste en téléchargement et décompression)
L'espace disque, le sujet caché
À aucun moment on ne travaille sur 1,2 To. À l'instant le plus chargé, l'occupation disque ressemble à ceci :
- 1,2 To de ZIP d'origine (gardés en filet de sécurité)
- 1,24 To du dossier décompressé brut
- 1,24 To du dossier de sortie réorganisé par gpth (mode rapide, sans copie temporaire)
Soit ≈ 3,7 To d'espace disque utilisé au pic, pour une photothèque qui en pesait 1,2 To. C'est mathématique : il faut prévoir au minimum trois fois le volume à migrer, sans quoi on se retrouve coincé en cours de route — et impossible de revenir en arrière si on a déjà supprimé les ZIP d'origine.
Prérequis et niveau technique réel
Ne nous mentons pas : cette migration n'est pas accessible à un utilisateur grand public. Voici la liste honnête de ce qu'il faut savoir faire ou avoir, à minima, pour mener l'opération à bien.
Espace de stockage
NAS ou disque externe d'au moins 3 × le volume Google Photos. Pas le SSD du laptop.
Connexion stable
Fibre conseillée. Sur ADSL, multipliez par 5 à 10 la durée de téléchargement.
Ligne de commande
Obligatoire pour unzip, exiftool, gpth. Pas d'interface graphique fiable pour ce volume.
Environnement Linux / WSL
Les outils tournent bien mieux sur Linux que sur Windows. WSL fait l'affaire sur PC.
Vérification systématique
Spot-checks EXIF (exiftool) sur des photos d'années variées avant de supprimer quoi que ce soit.
Disponibilité
Comptez 3 à 4 jours calendaires avec des temps de présence pour relancer les étapes.
Ce qu'on aurait fait différemment
- Vérifier d'abord la disponibilité de gpth-neo avant de télécharger : si le fork avait été cassé lui aussi, il aurait fallu basculer sur
exiftoolscripté à la main — un travail beaucoup plus long. - Lancer la décompression et le run gpth en arrière-plan dès le départ, avec journalisation : sur des opérations de plusieurs heures, ne jamais bloquer un terminal interactif.
- Anticiper : commencer ce travail un soir de week-end. Le mardi à 10 h, ça gêne tout le reste.
Conclusion : ce qu'on retient vraiment
Sortir de Google Photos sur 1,2 To, c'est techniquement faisable, humainement coûteux. Trois à quatre jours pour quelqu'un qui sait ce qu'il fait — probablement deux semaines pour quelqu'un qui découvre les outils en route, voire un échec silencieux pour qui ignore l'histoire des sidecars JSON.
Au-delà du temps brut, c'est surtout une preuve par l'absurde de ce que cache la commodité de Google Photos : la facilité d'usage en entrée s'accompagne d'une dette technique massive en sortie. Plus vous laissez la photothèque grossir, plus la sortie devient coûteuse — et plus le risque de renoncer est élevé. C'est précisément le lock-in évoqué dans notre article sur le vrai coût de Google Photos : pas une clause contractuelle, mais une friction technique qui pousse à rester.
Le bon moment pour partir, c'est maintenant — quand la photothèque est encore manipulable. Et le bon réflexe, c'est de choisir un service qui respecte le standard EXIF dès le départ et qui n'externalise pas vos métadonnées dans des sidecars propriétaires.
La suite de cette série
Récupérer ses photos depuis Google Photos : les vraies difficultés — la théorie qui sous-tend ce REX.
Google Photos : le vrai coût et ce que Google fait de vos données — pourquoi le lock-in technique pèse autant.
Alternatives à Google Photos : reprendre le contrôle de vos souvenirs — où aller après.
Une photothèque qui reste lisible dans dix ans
MonEcrin stocke vos photos en France, avec leurs métadonnées EXIF intactes, sans sidecar propriétaire. Pour que partir un jour ne soit jamais un projet de quatre jours.