immich-archiver : copier votre photothèque sur votre propre disque

immich-archiver : copier votre photothèque sur votre propre disque

PixelUnion conserve vos photos sur des serveurs européens, avec redondance et supervision. C’est notre métier, et nous le prenons au sérieux.

La règle habituelle pour les données qui comptent est celle du 3-2-1 : trois copies, sur deux types de stockage différents, dont une copie hors site. Notre part est assurée. Nous protégeons contre les sinistres, pas seulement contre la panne d’un disque, et vous pouvez compter là-dessus. Ce que nous ne pouvons pas être, c’est une copie posée chez vous, sur du matériel qui vous appartient, lisible sans compte et sans nous. Beaucoup de gens veulent cela également, et c’est une envie légitime.

Nous avons donc développé immich-archiver, un outil open source qui copie une bibliothèque Immich dans un dossier sur un disque qui vous appartient.

Ce qu’il fait

Vous lui fournissez une URL de serveur et une clé API utilisateur (une clé d’application programming interface, que vous générez depuis les paramètres de votre compte), ainsi qu’un répertoire de destination. Il télécharge chaque photo et chaque vidéo de votre chronologie dans des dossiers classés par année et par mois.

1
2
3
4
5
export IMMICH_URL=https://yourinstance.pixelunion.eu
export IMMICH_API_KEY=your-user-api-key
export IMMICH_DIR=/path/to/archive

immich-archiver

Le résultat sur le disque :

/path/to/archive/2005/2005-06/IMG_0001.jpg
/path/to/archive/2005/2005-06/IMG_0001.jpg.json

Chaque fichier est accompagné d’un fichier sidecar au format JSON (JavaScript Object Notation, un format texte que n’importe quel outil sait lire) contenant l’intégralité des métadonnées que le serveur détient pour ce fichier : date de prise de vue, marque et modèle de l’appareil, coordonnées GPS, appartenance aux albums, visages, notes. Nous stockons la réponse brute de l’API telle quelle plutôt qu’une sélection de champs, car au moment où vous décidez quels champs comptent, vous pariez sur un avenir que vous ne pouvez pas voir. L’approche est reprise d’immich-go, qui fait cela très bien depuis des années.

Relancez-le plus tard et il ne télécharge que ce qui manque. Il n’y a pas de base de données d’état. Il vérifie le système de fichiers, et il utilise le fichier sidecar pour confirmer qu’un fichier au nom identique correspond bien au même élément, et non à une photo sans rapport qui porterait le même nom.

Cette conception a un coût réel, et il mérite d’être nommé. Comme il n’y a pas d’index, chaque exécution effectue un appel stat sur chaque fichier de destination, ce qui est plus lent sur de très grandes bibliothèques accessibles via un système de fichiers réseau que la lecture d’une base locale. Renommez un fichier téléchargé et l’outil le récupérera de nouveau, car il ne le reconnaît plus. En contrepartie, le dossier fait autorité. Il n’y a pas d’index séparé susceptible de se corrompre, de se désynchroniser, ou qu’il faudrait vous expliquer lorsqu’il contredit la réalité.

Quelques autres détails utiles. Les téléchargements sont écrits dans un fichier temporaire .part puis renommés une fois le transfert terminé, de sorte qu’une exécution interrompue ne laisse jamais un fichier tronqué qu’une exécution ultérieure prendrait pour un fichier complet. Les Live Photos arrivent avec leurs deux composants, l’image fixe et le clip animé, sous un même nom de base. Les albums partagés avec vous sont exclus par défaut et atterrissent dans un dossier distinct si vous passez l’option --include-shared. Le parallélisme et le nombre de tentatives sont configurables, avec par défaut quatre téléchargements simultanés et trois tentatives en cas d’erreur réseau ou serveur.

Pourquoi il existe, et ce qu’il n’est pas

La question à l’origine de cet outil nous revient régulièrement : si PixelUnion disparaissait, qu’adviendrait-il de mes photos ? La réponse honnête était jusqu’ici « exportez-les », ce qui n’en est pas une quand la voie d’export consiste à télécharger dix mille fichiers via un navigateur, album par album. Une sauvegarde qui dépend de votre capacité à penser à effectuer une tâche manuelle fastidieuse n’est pas une sauvegarde. C’est une tâche que vous allez sauter.

Il s’agit d’un outil en ligne de commande, ou command-line interface, abrégé en CLI. Il vous faut un terminal, une clé API, et suffisamment d’aisance avec les deux pour le placer dans une tâche cron ou une tâche planifiée. Cela exclut beaucoup de monde, et nous n’allons pas prétendre le contraire.

Là où nous voulons aboutir, c’est un bouton de téléchargement directement dans PixelUnion. Vous cliquez, nous préparons une archive, vous recevez un lien, tout arrive dans un seul fichier. Plus proche de ce que fait Google Takeout, sans la partie où cela prend une semaine et arrive incomplet. C’est un chantier nettement plus important, il figure sur la feuille de route, et il ne sortira pas ce mois-ci.

Nous avons donc fait un arbitrage, et c’est le plus évident : livrer maintenant l’outil qui fonctionne pour ceux qui peuvent s’en servir, plutôt que de ne couvrir personne pendant que la version plus accessible se construit. immich-archiver est l’étape intermédiaire. Si vous êtes à l’aise dans un terminal, vous n’avez pas à attendre.

Où le trouver

Le dépôt se trouve sur github.com/pixelunioneu/immich-archiver, sous licence AGPL-3.0 (la GNU Affero General Public License, version 3). Chaque version fournit des binaires précompilés pour Linux, Windows et macOS, en x86-64 comme en ARM64, afin que les Mac Apple Silicon reçoivent une compilation native plutôt qu’une version traduite.

Les binaires macOS sont signés avec un certificat Developer ID et notarisés auprès d’Apple, ce qui permet à Gatekeeper de les exécuter sans l’avertissement concernant un développeur non identifié. Cela compte plus qu’il n’y paraît : le contournement habituel pour les outils non signés consiste à dire aux utilisateurs de retirer l’attribut de quarantaine d’un binaire téléchargé, ce qui les entraîne à désactiver précisément le contrôle censé les protéger. La dernière version est toujours celle à récupérer.

Il s’agit d’une première version. Le cœur est solide et testé, mais il n’a pas encore rencontré la diversité de bibliothèques que possèdent de vrais utilisateurs, et c’est précisément là que ce type d’outil casse d’ordinaire. Les tickets et les pull requests sont les bienvenus, en particulier ceux qui commencent par « ça a fait quelque chose de bizarre avec ma… ».

Une dernière réflexion, car elle dépasse largement cet outil. Une sauvegarde à partir de laquelle vous n’avez jamais restauré n’est pas une sauvegarde, c’est une hypothèse. Lancez-la une fois, ouvrez le dossier, vérifiez qu’une photo s’ouvre vraiment. Ensuite, planifiez-la et cessez d’y penser.

Commencez gratuitement avec PixelUnion →