immich-archiver: espelhar a tua biblioteca de fotos no teu próprio disco

immich-archiver: espelhar a tua biblioteca de fotos no teu próprio disco

A PixelUnion guarda as tuas fotos em servidores europeus, com redundância e monitorização. Esse é o nosso trabalho e levamo-lo a sério.

O conselho habitual para dados que te importam é a regra 3-2-1: três cópias, em dois tipos de armazenamento diferentes, com uma cópia noutro local. O nosso lado está tratado. Protegemos contra desastres, não apenas contra a avaria de um disco, e podes contar com isso. O que não podemos ser é uma cópia que fica em tua casa, em hardware que é teu, legível sem conta e sem nós. Muita gente quer ter isso também, e é um desejo razoável.

Por isso construímos o immich-archiver, uma ferramenta open source que espelha uma biblioteca Immich para uma pasta num disco que é teu.

O que faz

Dás-lhe um URL de servidor e uma chave de API de utilizador (uma chave de application programming interface, que geras nas definições da tua conta), mais um diretório de destino. Descarrega cada foto e cada vídeo da tua linha temporal para pastas por ano e mês.

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

O resultado em disco:

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

Cada ficheiro fica acompanhado de um ficheiro sidecar em JSON (JavaScript Object Notation, um formato de texto simples que qualquer ferramenta consegue ler) com o registo completo de metadados que o servidor tem sobre esse ficheiro: data de captura, marca e modelo da câmara, coordenadas GPS, pertença a álbuns, rostos, classificações. Guardamos a resposta bruta da API tal como vem, em vez de um subconjunto selecionado, porque no momento em que decides que campos interessam estás a apostar num futuro que não consegues ver. A abordagem vem do immich-go, que faz isto bem há anos.

Corre-a mais tarde e descarrega apenas o que falta. Não existe base de dados de estado. Verifica o sistema de ficheiros e usa o sidecar para confirmar que um ficheiro com nome coincidente é mesmo o mesmo item, e não uma foto alheia que por acaso partilha o nome.

Esse desenho tem um custo real, e vale a pena nomeá-lo. Como não há índice, cada execução faz uma chamada stat a cada ficheiro de destino, o que em bibliotecas muito grandes sobre um sistema de ficheiros em rede é mais lento do que ler uma base de dados local. Muda o nome de um ficheiro descarregado e a ferramenta vai buscá-lo outra vez, porque deixou de o reconhecer. Em troca, a pasta é a fonte de verdade. Não há um índice separado que se corrompa, saia de sincronia, ou que tenha de te ser explicado quando discorda da realidade.

Alguns outros detalhes que vale a pena saber. As descargas são escritas num ficheiro temporário .part e só são renomeadas para o sítio definitivo depois de a transferência terminar, de forma a que uma execução interrompida nunca deixe um ficheiro truncado que uma execução posterior confunda com um completo. As Live Photos chegam com ambos os componentes, a imagem fixa e o clipe em movimento, partilhando o nome base. Os álbuns partilhados contigo ficam de fora por predefinição e vão para uma pasta separada se passares --include-shared. A concorrência e o número de tentativas são configuráveis, com quatro descargas em paralelo e três tentativas em erros de rede ou de servidor como valores predefinidos.

Por que existe, e o que não é

A pergunta por trás desta ferramenta chega-nos com regularidade: se a PixelUnion desaparecesse, o que acontece às minhas fotos? A resposta honesta costumava ser “exporta-as”, o que não é resposta quando o caminho de exportação passa por descarregar dez mil ficheiros através de um browser, álbum a álbum. Uma cópia de segurança que depende de te lembrares de executar uma tarefa manual maçadora não é uma cópia de segurança. É uma tarefa que vais saltar.

Isto é uma ferramenta de linha de comandos, ou command-line interface, abreviada para CLI. Precisas de um terminal, de uma chave de API e de à-vontade suficiente com ambos para a colocares num cron ou numa tarefa agendada. Isso exclui muita gente, e não vamos fingir o contrário.

Onde queremos chegar é a um botão de descarga dentro da própria PixelUnion. Clicas, preparamos um arquivo, recebes uma ligação, tudo chega num único ficheiro. Mais próximo do que o Google Takeout faz, sem a parte em que demora uma semana e chega incompleto. Isso é um trabalho consideravelmente maior, está no roteiro, e não sai este mês.

Por isso fizemos uma escolha, e é a óbvia: lançar agora a ferramenta que funciona para quem a consegue usar, em vez de não cobrir ninguém enquanto a versão mais acessível é construída. O immich-archiver é o passo intermédio. Se te sentes à vontade num terminal, não tens de esperar.

Onde encontrá-la

O repositório está em github.com/pixelunioneu/immich-archiver, sob a licença AGPL-3.0 (a GNU Affero General Public License, versão 3). Cada lançamento traz binários pré-compilados para Linux, Windows e macOS, tanto em x86-64 como em ARM64, de modo a que os Mac com Apple Silicon recebam uma compilação nativa em vez de uma traduzida.

Os binários de macOS estão assinados com um certificado Developer ID e notarizados junto da Apple, o que faz com que o Gatekeeper os execute sem o aviso de programador não identificado. Isto pesa mais do que parece: o remendo habitual para ferramentas não assinadas é dizer aos utilizadores para removerem o atributo de quarentena de um binário descarregado, e isso treina as pessoas a contornar exatamente a verificação que as protege. O lançamento mais recente é sempre o que interessa.

Este é um primeiro lançamento. O núcleo é sólido e está testado, mas ainda não se cruzou com a variedade de bibliotecas que os utilizadores reais têm, e é aí que ferramentas deste tipo costumam partir. Issues e pull requests são bem-vindos, sobretudo os que começam por “isto fez algo estranho com a minha…”.

Um pensamento final, porque se aplica muito para além desta ferramenta. Uma cópia de segurança a partir da qual nunca restauraste não é uma cópia de segurança, é uma hipótese. Corre-a uma vez, abre a pasta, confirma que uma foto abre mesmo. Depois agenda-a e deixa de pensar nisso.

Começa gratuitamente com a PixelUnion →