immich-archiver: kopia twojej biblioteki zdjęć na własnym dysku

PixelUnion przechowuje twoje zdjęcia na europejskich serwerach, z redundancją i monitoringiem. To nasza praca i traktujemy ją poważnie.
Standardowa rada dla danych, na których ci zależy, to zasada 3-2-1: trzy kopie, na dwóch różnych rodzajach nośników, z jedną kopią w innej lokalizacji. Nasza część jest zapewniona. Chronimy przed katastrofami, nie tylko przed awarią dysku, i możesz na tym polegać. Nie możemy natomiast być kopią, która stoi u ciebie w domu, na sprzęcie należącym do ciebie, czytelną bez konta i bez nas. Wielu ludzi chce mieć również taką kopię, i jest to rozsądne życzenie.
Dlatego zbudowaliśmy immich-archiver, narzędzie open source, które odwzorowuje bibliotekę Immich w folderze na dysku należącym do ciebie.
Co robi
Podajesz mu adres URL serwera i klucz API użytkownika (klucz application programming interface, który generujesz w ustawieniach konta) oraz katalog docelowy. Pobiera każde zdjęcie i każdy film z twojej osi czasu do folderów według roku i miesiąca.
| |
Efekt na dysku:
/path/to/archive/2005/2005-06/IMG_0001.jpg
/path/to/archive/2005/2005-06/IMG_0001.jpg.json
Obok każdego pliku pojawia się plik sidecar w formacie JSON (JavaScript Object Notation, format tekstowy, który odczyta dowolne narzędzie) zawierający pełny rekord metadanych, jaki serwer ma dla tego pliku: datę wykonania, markę i model aparatu, współrzędne GPS, przynależność do albumów, twarze, oceny. Zapisujemy surową odpowiedź API dosłownie, zamiast wybranego podzbioru, bo w chwili gdy decydujesz, które pola się liczą, zgadujesz co do przyszłości, której nie widzisz. Podejście zapożyczyliśmy z immich-go, które robi to dobrze od lat.
Uruchom je ponownie później, a pobierze wyłącznie to, czego brakuje. Nie ma bazy danych ze stanem. Sprawdza system plików i korzysta z pliku sidecar, aby potwierdzić, że plik o zgodnej nazwie to faktycznie ten sam element, a nie niepowiązane zdjęcie, które przypadkiem ma taką samą nazwę.
Ten projekt ma realny koszt i warto go nazwać. Ponieważ nie ma indeksu, każde uruchomienie wykonuje wywołanie stat na każdym pliku docelowym, co przy bardzo dużych bibliotekach na sieciowym systemie plików jest wolniejsze niż odczyt lokalnej bazy danych. Zmień nazwę pobranego pliku, a narzędzie pobierze go ponownie, bo przestanie go rozpoznawać. W zamian to folder jest źródłem prawdy. Nie ma osobnego indeksu, który mógłby ulec uszkodzeniu, rozjechać się ze stanem faktycznym albo wymagać wyjaśnień, gdy przeczy rzeczywistości.
Kilka innych szczegółów wartych uwagi. Pobierane dane trafiają do tymczasowego pliku .part i dopiero po zakończeniu transferu zmieniają nazwę na docelową, więc przerwane uruchomienie nigdy nie zostawia obciętego pliku, który kolejne uruchomienie uznałoby za kompletny. Live Photos przychodzą z obydwoma składnikami, zdjęciem i klipem ruchomym, ze wspólną nazwą bazową. Albumy udostępnione tobie są domyślnie pomijane i trafiają do osobnego folderu, jeśli podasz --include-shared. Współbieżność i liczbę ponowień można konfigurować, domyślnie są to cztery równoległe pobrania i trzy ponowienia przy błędach sieci lub serwera.
Dlaczego istnieje i czym nie jest
Pytanie stojące za tym narzędziem wraca do nas regularnie: gdyby PixelUnion zniknął, co stanie się z moimi zdjęciami? Uczciwa odpowiedź brzmiała dotąd “wyeksportuj je”, a to nie jest odpowiedź, gdy droga eksportu polega na pobraniu dziesięciu tysięcy plików przez przeglądarkę, album po albumie. Kopia zapasowa, która zależy od tego, czy pamiętasz o wykonaniu żmudnego ręcznego zadania, nie jest kopią zapasową. To zadanie, które pominiesz.
To narzędzie wiersza poleceń, czyli command-line interface, w skrócie CLI. Potrzebujesz terminala, klucza API i na tyle swobody w obu, by umieścić je w zadaniu cron lub harmonogramie. To wyklucza wiele osób i nie będziemy udawać, że jest inaczej.
Docelowo chcemy mieć przycisk pobierania wewnątrz samego PixelUnion. Klikasz, my przygotowujemy archiwum, dostajesz link, wszystko przychodzi w jednym pliku. Bliżej tego, co robi Google Takeout, bez tej części, w której trwa to tydzień i przychodzi niekompletne. To znacznie większy kawałek pracy, jest na mapie drogowej i nie ukaże się w tym miesiącu.
Dokonaliśmy więc wyboru i jest to wybór oczywisty: wydać teraz narzędzie, które działa dla tych, którzy potrafią z niego skorzystać, zamiast nie zabezpieczać nikogo, dopóki powstaje przyjaźniejsza wersja. immich-archiver to krok pośredni. Jeśli czujesz się swobodnie w terminalu, nie musisz czekać.
Gdzie je znaleźć
Repozytorium znajduje się pod adresem github.com/pixelunioneu/immich-archiver, na licencji AGPL-3.0 (GNU Affero General Public License, wersja 3). Każde wydanie dostarcza gotowe pliki binarne dla Linuksa, Windowsa i macOS, zarówno w wersji x86-64, jak i ARM64, dzięki czemu Maki z Apple Silicon dostają natywną kompilację zamiast tłumaczonej.
Pliki binarne dla macOS są podpisane certyfikatem Developer ID i notaryzowane u Apple, dzięki czemu Gatekeeper uruchamia je bez ostrzeżenia o niezidentyfikowanym deweloperze. Waży to więcej, niż brzmi: typowa obejściowa rada przy niepodpisanych narzędziach to powiedzieć użytkownikom, żeby usunęli flagę kwarantanny z pobranego pliku, a to uczy ludzi omijania dokładnie tej kontroli, która ich chroni. Najnowsze wydanie to zawsze to, po które warto sięgnąć.
To pierwsze wydanie. Rdzeń jest solidny i przetestowany, ale nie zetknął się jeszcze z różnorodnością bibliotek, jakie mają prawdziwi użytkownicy, a to właśnie tam narzędzia tego rodzaju zwykle się psują. Zgłoszenia i pull requesty są mile widziane, zwłaszcza te zaczynające się od “to zrobiło coś dziwnego z moją…”.
Na koniec jedna myśl, bo wykracza daleko poza to narzędzie. Kopia zapasowa, z której nigdy nie odtwarzałeś danych, nie jest kopią zapasową, tylko hipotezą. Uruchom ją raz, otwórz folder, sprawdź, czy zdjęcie faktycznie się otwiera. Potem dodaj ją do harmonogramu i przestań o niej myśleć.