immich-archiver: replicar tu fototeca en tu propio disco

immich-archiver: replicar tu fototeca en tu propio disco

PixelUnion guarda tus fotos en servidores europeos, con redundancia y monitorización. Ese es nuestro trabajo y lo tomamos en serio.

El consejo estándar para los datos que te importan es la regla 3-2-1: tres copias, en dos tipos de almacenamiento distintos, con una copia fuera de las instalaciones. Nuestra parte está cubierta. Protegemos frente a desastres, no solo frente a la avería de un disco, y puedes contar con ello. Lo que no podemos ser es una copia que esté en tu casa, en hardware tuyo, legible sin cuenta y sin nosotros. Mucha gente quiere tener eso también, y es un deseo razonable.

Por eso hemos construido immich-archiver, una herramienta de código abierto que replica una biblioteca de Immich en una carpeta de una unidad que es tuya.

Qué hace

Le das una URL de servidor y una clave de API de usuario (una clave de application programming interface, que generas desde los ajustes de tu cuenta), además de un directorio de destino. Descarga cada foto y cada vídeo de tu línea de tiempo en carpetas por año y mes.

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

El resultado en disco:

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

Cada archivo lleva al lado un fichero sidecar en JSON (JavaScript Object Notation, un formato de texto plano que cualquier herramienta puede leer) con el registro completo de metadatos que el servidor tiene sobre ese archivo: fecha de captura, marca y modelo de cámara, coordenadas GPS, pertenencia a álbumes, caras, valoraciones. Guardamos la respuesta cruda de la API tal cual en lugar de un subconjunto seleccionado, porque en el momento en que decides qué campos importan estás apostando sobre un futuro que no puedes ver. El enfoque está tomado de immich-go, que lleva años haciéndolo bien.

Ejecútala de nuevo más adelante y descargará únicamente lo que falte. No hay base de datos de estado. Comprueba el sistema de archivos y usa el sidecar para confirmar que un archivo con un nombre coincidente es realmente el mismo elemento y no una foto ajena que casualmente comparte nombre.

Ese diseño tiene un coste real, y merece nombrarse. Como no hay índice, cada ejecución hace una llamada stat sobre cada archivo de destino, lo que en bibliotecas muy grandes sobre un sistema de archivos en red resulta más lento que leer una base de datos local. Renombra un archivo descargado y la herramienta volverá a bajarlo, porque ya no lo reconoce. A cambio, la carpeta es la fuente de verdad. No hay un índice aparte que pueda corromperse, desincronizarse o tener que explicarte por qué discrepa de la realidad.

Algunos detalles más que conviene saber. Las descargas se escriben en un archivo temporal .part y solo se renombran a su sitio cuando la transferencia termina, de modo que una ejecución interrumpida nunca deja un archivo truncado que una ejecución posterior confunda con uno completo. Las Live Photos llegan con sus dos componentes, la imagen fija y el clip en movimiento, compartiendo nombre base. Los álbumes compartidos contigo quedan excluidos por defecto y aterrizan en una carpeta aparte si pasas --include-shared. La concurrencia y el número de reintentos son configurables, con cuatro descargas en paralelo y tres reintentos ante errores de red o de servidor como valores por defecto.

Por qué existe, y qué no es

La pregunta que hay detrás de esta herramienta nos llega con regularidad: si PixelUnion desapareciera, ¿qué pasa con mis fotos? La respuesta honesta solía ser “expórtalas”, que no es una respuesta cuando la vía de exportación consiste en descargar diez mil archivos desde un navegador, álbum a álbum. Una copia de seguridad que depende de que te acuerdes de realizar una tarea manual tediosa no es una copia de seguridad. Es una tarea que vas a saltarte.

Esto es una herramienta de línea de comandos, o command-line interface, abreviado CLI. Necesitas un terminal, una clave de API y suficiente soltura con ambos para meterla en un cron o en una tarea programada. Eso deja fuera a mucha gente, y no vamos a fingir lo contrario.

Donde queremos llegar es a un botón de descarga dentro de PixelUnion. Haces clic, preparamos un archivo comprimido, recibes un enlace y todo llega en un solo fichero. Más cerca de lo que hace Google Takeout, sin la parte en la que tarda una semana y llega incompleto. Eso es un trabajo bastante mayor, está en la hoja de ruta y no sale este mes.

Así que hicimos una elección, y es la evidente: entregar ahora la herramienta que funciona para quienes pueden usarla, en lugar de no cubrir a nadie mientras se construye la versión más amable. immich-archiver es el paso intermedio. Si te manejas en un terminal, no tienes que esperar.

Dónde encontrarla

El repositorio está en github.com/pixelunioneu/immich-archiver, con licencia AGPL-3.0 (la GNU Affero General Public License, versión 3). Cada versión publica binarios precompilados para Linux, Windows y macOS, tanto en x86-64 como en ARM64, de forma que los Mac con Apple Silicon reciben una compilación nativa y no una traducida.

Los binarios de macOS están firmados con un certificado Developer ID y notarizados con Apple, lo que hace que Gatekeeper los ejecute sin el aviso de desarrollador no identificado. Esto pesa más de lo que parece: el apaño habitual con herramientas sin firmar es decirle al usuario que quite el atributo de cuarentena de un binario descargado, y eso entrena a la gente para saltarse precisamente la comprobación que la protege. La última versión es siempre la que conviene descargar.

Esta es una primera versión. El núcleo es sólido y está probado, pero todavía no se ha encontrado con la variedad de bibliotecas que tienen los usuarios reales, y ahí es donde este tipo de herramientas suele romperse. Los issues y las pull requests son bienvenidos, sobre todo los que empiezan por “esto hizo algo raro con mi…”.

Una reflexión final, porque va mucho más allá de esta herramienta. Una copia de seguridad de la que nunca has restaurado no es una copia de seguridad, es una hipótesis. Ejecútala una vez, abre la carpeta, comprueba que una foto se abre de verdad. Después prográmala y deja de pensar en ella.

Empieza gratis con PixelUnion →