immich-archiver: spegla ditt bildbibliotek till din egen disk

immich-archiver: spegla ditt bildbibliotek till din egen disk

PixelUnion lagrar dina bilder på europeiska servrar, med redundans och övervakning. Det är vårt jobb och vi tar det på allvar.

Standardrådet för data du bryr dig om är 3-2-1-regeln: tre kopior, på två olika typer av lagring, med en kopia på annan plats. Vår del av det är löst. Vi skyddar mot katastrofer, inte bara mot att en disk går sönder, och det kan du lita på. Det vi inte kan vara är en kopia som står hemma hos dig, på hårdvara du äger, läsbar utan konto och utan oss. Många vill ha det också, och det är en rimlig sak att vilja ha.

Därför byggde vi immich-archiver, ett verktyg med öppen källkod som speglar ett Immich-bibliotek till en mapp på en disk som är din.

Vad det gör

Du ger det en server-URL och en användar-API-nyckel (en application programming interface-nyckel, som du skapar i dina kontoinställningar), plus en målkatalog. Det laddar ner varje foto och video i din tidslinje till mappar per år och månad.

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

Resultatet på disk:

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

Varje fil får en sidecar-fil bredvid sig i JSON (JavaScript Object Notation, ett textformat som vilket verktyg som helst kan läsa) med hela den metadatapost servern har för filen: tagningsdatum, kameramärke och modell, GPS-koordinater, albumtillhörighet, ansikten, betyg. Vi sparar det råa API-svaret ordagrant i stället för ett utvalt urval, eftersom i samma stund som du bestämmer vilka fält som spelar roll gissar du om en framtid du inte kan se. Ansatsen är lånad från immich-go, som gjort detta bra i flera år.

Kör det igen senare och det laddar bara ner det som saknas. Det finns ingen tillståndsdatabas. Det kontrollerar filsystemet och använder sidecar-filen för att bekräfta att en fil med matchande namn verkligen är samma objekt, och inte ett orelaterat foto som råkar dela filnamn.

Den designen har en verklig kostnad, och den förtjänar att nämnas. Eftersom det inte finns något index gör varje körning ett stat-anrop på varje målfil, vilket på mycket stora bibliotek över ett nätverksfilsystem är långsammare än att läsa en lokal databas. Byt namn på en nedladdad fil och verktyget hämtar den igen, eftersom det inte längre känner igen den. I gengäld är mappen sanningskällan. Det finns inget separat index som kan bli korrupt, hamna ur synk, eller behöva förklaras för dig när det motsäger verkligheten.

Några detaljer till som är värda att känna till. Nedladdningar skrivs till en temporär .part-fil och byter namn till sin slutliga plats först när överföringen är klar, så att en avbruten körning aldrig lämnar kvar en avhuggen fil som en senare körning skulle ta för färdig. Live Photos kommer med båda komponenterna, stillbilden och rörelseklippet, med samma basfilnamn. Album som delats med dig utesluts som standard och hamnar i en egen mapp om du anger --include-shared. Parallellitet och antal återförsök går att ställa in, med fyra parallella nedladdningar och tre återförsök vid nätverks- eller serverfel som standard.

Varför det finns, och vad det inte är

Frågan bakom det här verktyget får vi regelbundet: om PixelUnion försvann, vad händer med mina bilder? Det ärliga svaret brukade vara “exportera dem”, vilket inte är ett svar när exportvägen innebär att ladda ner tiotusen filer via en webbläsare, ett album i taget. En säkerhetskopia som beror på att du kommer ihåg att utföra en tråkig manuell uppgift är ingen säkerhetskopia. Det är en uppgift du kommer att hoppa över.

Det här är ett kommandoradsverktyg, eller command-line interface, förkortat CLI. Du behöver en terminal, en API-nyckel och tillräcklig vana vid båda för att lägga in det i ett cron-jobb eller en schemalagd aktivitet. Det utesluter många, och vi tänker inte låtsas något annat.

Dit vi vill komma är en nedladdningsknapp inne i PixelUnion. Du klickar på den, vi förbereder ett arkiv, du får en länk, allt kommer i en enda fil. Närmare det Google Takeout gör, utan den del där det tar en vecka och anländer ofullständigt. Det är ett betydligt större arbete, det står på färdplanen, och det kommer inte den här månaden.

Så vi gjorde en avvägning, och det är den självklara: leverera nu verktyget som fungerar för dem som kan använda det, i stället för att ingen täcks medan den vänligare versionen byggs. immich-archiver är steget däremellan. Är du bekväm i en terminal behöver du inte vänta.

Var du hittar det

Kodförrådet finns på github.com/pixelunioneu/immich-archiver, licensierat under AGPL-3.0 (GNU Affero General Public License, version 3). Varje release levererar färdigbyggda binärer för Linux, Windows och macOS, både för x86-64 och ARM64, så att Mac-datorer med Apple Silicon får ett nativt bygge i stället för ett översatt.

macOS-binärerna är signerade med ett Developer ID-certifikat och notariserade hos Apple, vilket gör att Gatekeeper kör dem utan varningen om en oidentifierad utvecklare. Det väger tyngre än det låter: den vanliga lösningen för osignerade verktyg är att be användare ta bort karantänflaggan från en nedladdad binär, och det tränar folk att kringgå precis den kontroll som skyddar dem. Den senaste releasen är alltid den att hämta.

Det här är en första release. Kärnan är gedigen och testad, men den har ännu inte mött den variation av bibliotek som riktiga användare har, och det är där verktyg av det här slaget brukar gå sönder. Issues och pull requests är välkomna, särskilt de som börjar med “det här gjorde något konstigt med mitt…”.

En avslutande tanke, för den gäller långt bortom det här verktyget. En säkerhetskopia du aldrig har återställt från är ingen säkerhetskopia, det är en hypotes. Kör den en gång, öppna mappen, kontrollera att ett foto faktiskt öppnas. Schemalägg den sedan och sluta tänka på den.

Kom igång gratis med PixelUnion →