immich-archiver: spejl dit billedbibliotek til din egen disk

PixelUnion opbevarer dine billeder på europæiske servere, med redundans og overvågning. Det er vores arbejde, og vi tager det alvorligt.
Standardrådet for data, du holder af, er 3-2-1-reglen: tre kopier, på to forskellige typer lagring, med én kopi et andet sted. Vores del af det er på plads. Vi beskytter mod katastrofer, ikke kun mod at en disk går i stykker, og det kan du regne med. Det, vi ikke kan være, er en kopi, der står hjemme hos dig, på hardware du selv ejer, læsbar uden konto og uden os. Mange vil også gerne have den, og det er et rimeligt ønske.
Derfor byggede vi immich-archiver, et open source-værktøj, der spejler et Immich-bibliotek til en mappe på et drev, der er dit.
Hvad det gør
Du giver det en server-URL og en bruger-API-nøgle (en application programming interface-nøgle, som du opretter i dine kontoindstillinger), plus en destinationsmappe. Det henter hvert billede og hver video i din tidslinje ned i mapper efter år og måned.
| |
Resultatet på disken:
/path/to/archive/2005/2005-06/IMG_0001.jpg
/path/to/archive/2005/2005-06/IMG_0001.jpg.json
Hver fil får en sidecar-fil ved siden af sig i JSON (JavaScript Object Notation, et tekstformat som ethvert værktøj kan læse) med hele den metadatapost, serveren har for filen: optagelsesdato, kameramærke og model, GPS-koordinater, albumtilhørsforhold, ansigter, bedømmelser. Vi gemmer det rå API-svar ordret i stedet for et udvalgt udsnit, for i det øjeblik du beslutter, hvilke felter der betyder noget, gætter du på en fremtid, du ikke kan se. Tilgangen er lånt fra immich-go, som har gjort det godt i årevis.
Kør det igen senere, og det henter kun det, der mangler. Der er ingen tilstandsdatabase. Det tjekker filsystemet og bruger sidecar-filen til at bekræfte, at en fil med matchende navn faktisk er det samme element og ikke et urelateret billede, der tilfældigvis deler filnavn.
Det design har en reel omkostning, og den fortjener at blive nævnt. Fordi der ikke er noget indeks, laver hver kørsel et stat-kald på hver destinationsfil, hvilket på meget store biblioteker over et netværksfilsystem er langsommere end at læse en lokal database. Omdøb en hentet fil, og værktøjet henter den igen, fordi det ikke længere genkender den. Til gengæld er mappen sandhedskilden. Der er intet separat indeks, der kan blive korrupt, komme ud af trit, eller skulle forklares for dig, når det er uenigt med virkeligheden.
Et par andre detaljer værd at kende. Downloads skrives til en midlertidig .part-fil og omdøbes først på plads, når overførslen er færdig, så en afbrudt kørsel aldrig efterlader en afkortet fil, som en senere kørsel ville tage for færdig. Live Photos kommer med begge komponenter, stillbilledet og bevægelsesklippet, med samme basisfilnavn. Album delt med dig er udeladt som standard og lander i en separat mappe, hvis du angiver --include-shared. Parallelitet og antal genforsøg kan konfigureres, med fire parallelle downloads og tre genforsøg ved netværks- eller serverfejl som standard.
Hvorfor det findes, og hvad det ikke er
Spørgsmålet bag dette værktøj får vi jævnligt: hvis PixelUnion forsvandt, hvad sker der så med mine billeder? Det ærlige svar plejede at være “eksportér dem”, hvilket ikke er et svar, når eksportvejen består i at hente ti tusind filer gennem en browser, ét album ad gangen. En sikkerhedskopi, der afhænger af, at du husker at udføre en kedelig manuel opgave, er ikke en sikkerhedskopi. Det er en opgave, du kommer til at springe over.
Dette er et kommandolinjeværktøj, eller command-line interface, forkortet CLI. Du skal bruge en terminal, en API-nøgle og nok fortrolighed med begge dele til at lægge det i et cron-job eller en planlagt opgave. Det udelukker mange, og vi vil ikke lade som om andet.
Der, hvor vi vil ende, er en downloadknap inde i PixelUnion. Du klikker på den, vi forbereder et arkiv, du får et link, alt ankommer i én fil. Tættere på det, Google Takeout gør, uden den del hvor det tager en uge og ankommer ufuldstændigt. Det er et betydeligt større stykke arbejde, det står på køreplanen, og det udkommer ikke denne måned.
Så vi traf et valg, og det er det oplagte: udgiv nu det værktøj, der virker for dem, der kan bruge det, i stedet for at ingen er dækket, mens den venligere version bliver bygget. immich-archiver er skridtet imellem. Er du hjemmevant i en terminal, behøver du ikke vente.
Hvor du finder det
Kodelageret ligger på github.com/pixelunioneu/immich-archiver, licenseret under AGPL-3.0 (GNU Affero General Public License, version 3). Hver udgivelse leverer færdigbyggede binærfiler til Linux, Windows og macOS, både til x86-64 og ARM64, så Mac-computere med Apple Silicon får et nativt build i stedet for et oversat.
macOS-binærfilerne er signeret med et Developer ID-certifikat og notariseret hos Apple, hvilket gør, at Gatekeeper kører dem uden advarslen om en uidentificeret udvikler. Det vejer tungere, end det lyder: den sædvanlige omvej ved usignerede værktøjer er at bede brugere fjerne karantæneflaget fra en hentet binærfil, og det træner folk i at omgå netop den kontrol, der beskytter dem. Den nyeste udgivelse er altid den, du vil have.
Dette er en første udgivelse. Kernen er solid og testet, men den har endnu ikke mødt den variation af biblioteker, som rigtige brugere har, og det er der, værktøjer af denne slags plejer at knække. Issues og pull requests er velkomne, især dem der begynder med “det her gjorde noget mærkeligt ved mit…”.
En afsluttende tanke, for den gælder langt ud over dette værktøj. En sikkerhedskopi, du aldrig har gendannet fra, er ikke en sikkerhedskopi, det er en hypotese. Kør den én gang, åbn mappen, bekræft at et billede faktisk åbner. Planlæg den derefter, og hold op med at tænke på den.