SSD Nodes Learn Hosting plans →
Przewodniki Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-10-28

PhotoPrism czy Immich: co wybrać do zdjęć?

Porównanie serwerów PhotoPrism i Immich. Analiza zużycia pamięci RAM, funkcji aplikacji mobilnych oraz niezbędnych komend backupu dla kontenerów Docker na serwerze VPS.

PhotoPrism a Immich: krótka odpowiedź

Wybór między PhotoPrism a Immich to wybór między dwoma różnymi zastosowaniami, a nie dwiema wersjami tego samego produktu. Immich zastępuje Google Photos: aplikacja mobilna automatycznie tworzy kopię zapasową zdjęć z telefonu, a oś czasu wygląda znajomo dla każdego, kto rezygnuje z galerii systemowej. PhotoPrism porządkuje bibliotekę zdjęć, którą już posiadasz: indeksuje foldery z plikami na dysku, odczytuje ich metadane, nanosi je na mapę i pozostawia pliki dokładnie tam, gdzie się znajdowały.

Wybierz Immich, jeśli problemem jest „mój telefon jest pełny i chcę zrezygnować z Google Photos”. Wybierz PhotoPrism, jeśli problemem jest „mam 400 GB zdjęć na dysku i nie mogę w nich niczego znaleźć”. Oba rozwiązania są open source, oba działają jako kontenery Docker na standardowym VPS, a oba indeksują i przeszukują bibliotekę bez przesyłania jakichkolwiek danych podmiotom trzecim.

Podział filozofii i jego decydujące znaczenie

Immich zarządza plikami. Wskazuje się mu lokalizację przesyłania, a aplikacja na telefonie lub moduł przesyłania w przeglądarce wysyła do niego oryginały. Immich przechowuje je we własnej ścieżce i nadaje im własne nazwy. Baza danych zawiera informacje o albumach, twarzach i wyszukiwaniu. Taka konstrukcja zapewnia dobre działanie aplikacji mobilnej, ponieważ serwer zawsze zna pełny stan każdego zasobu.

PhotoPrism odczytuje pliki. Montuje się folder originals, którym już się zarządza, a PhotoPrism tworzy na jego podstawie indeks. Drzewo katalogów pozostaje pod kontrolą użytkownika. Jeśli PhotoPrism zostanie usunięty następnego dnia, zdjęcia pozostaną w tych samych folderach i pod tymi samymi nazwami. Pliki YAML sidecar zapisane przez PhotoPrism w celu opisania zebranych informacji pozostaną we własnym folderze przechowywania programu. Domyślnie właśnie tam są przechowywane.

Ta jedna różnica wyjaśnia większość pozostałych cech. Immich zapewnia rozbudowaną obsługę urządzeń mobilnych, ponieważ kontroluje proces importowania. PhotoPrism lepiej sprawdza się przy porządkowaniu biblioteki, ponieważ nie ingeruje w istniejącą strukturę. Immich jest lepszym wyborem dla rodziny, której zdjęcia znajdują się na telefonach. PhotoPrism jest lepszym wyborem dla archiwum przechowywanego na dysku.

Zapotrzebowanie na sprzęt: Immich wymaga więcej

Udokumentowane minimalne ilości pamięci znacznie się różnią, a na małym VPS zwykle jest to czynnik decydujący.

WykresDocumented minimum memory, as of October 2026
Dane, na których opiera się ten wykres
[
  {
    "label": "Immich",
    "min_ram_gb": 6
  },
  {
    "label": "PhotoPrism",
    "min_ram_gb": 3
  }
]

Immich określa 6 GB pamięci RAM jako minimum i 8 GB jako wartość zalecaną. Dokumentacja zawiera też informację, że na maszynie z 4 GB może działać tylko po wyłączeniu uczenia maszynowego. Dokumentacja PhotoPrism wymaga 3 GB pamięci fizycznej i dwóch rdzeni CPU. Poza tym minimum ilość pamięci RAM powinna odpowiadać liczbie rdzeni.

Różnica jest rzeczywista i wynika z kontenera uczenia maszynowego. Immich uruchamia modele w osobnej usłudze immich-machine-learning, która ładuje do pamięci modele CLIP (contrastive language image pretraining) oraz modele wykrywania twarzy. Na maszynie z 2 GB kernel zabija ten kontener. W dzienniku pojawia się zakończenie kodem 137. Jest to status procesu zabitego sygnałem 9, czyli sposób, w jaki zabicie z powodu braku pamięci jest sygnalizowane w Docker. Wbudowane modele PhotoPrism działają na ONNX. Dokumentacja podaje, że zwykle zapewniają one dobrą wydajność na wszystkich typach sprzętu. PhotoPrism ma też udokumentowany mechanizm awaryjny dla ograniczonej pamięci: na maszynach z 1 GB lub mniej wyłącza konwersję RAW i rozpoznawanie twarzy. Nie oznacza to jednak gwarancji stabilności. Poniżej minimalnych 3 GB projekt ostrzega przed niestabilnością i problemami z wydajnością, dlatego podaną wartość należy traktować jako rzeczywiste minimum.

Dokumentacja PhotoPrism wyraźnie zaleca co najmniej 4 GB swap na serwerze. Strona wymagań Immich nie wspomina o swap, ale swap zapewnia kontenerowi uczenia maszynowego dodatkowy zapas pamięci na małej maszynie. Należy dodać go przed instalacją któregokolwiek z tych programów.

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

free -h powinno teraz wyświetlić wiersz Swap: zawierający 4.0Gi. Jeżeli zostanie wyświetlone 0B, oznacza to, że swapon nie powiodło się, zwykle dlatego, że system plików nie obsługuje fallocate, a sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 jest mechanizmem awaryjnym. Limity pamięci kontenerów również mają tu znaczenie. Ustawianie limitów pamięci w Docker Compose pozwala zatrzymać jedną zasobożerną usługę przed doprowadzeniem do awarii całej maszyny. Wyjątkiem jest sam PhotoPrism: dokumentacja odradza ustawianie twardego limitu pamięci dla jego kontenera, ponieważ indeksowanie dużych plików wymaga chwilowo dodatkowej pamięci, a limit może powodować nieoczekiwane restarty.

Jest jeszcze jedno wymaganie, o którym często się zapomina. Baza danych Postgres używana przez Immich musi znajdować się na zwykłym systemie plików Unix z rzeczywistymi właścicielami i uprawnieniami, na lokalnym nośniku. Nie wolno umieszczać jej na udziale sieciowym. PhotoPrism również ostrzega, aby nigdy nie przechowywać plików bazy danych we współdzielonym katalogu sieciowym. Jako najlepsze miejsce wskazuje lokalny nośnik SSD. Żadnej z tych aplikacji nie należy uruchamiać z bazą danych na zamontowanym magazynie obiektowym.

Jak zainstalować każdą z nich

Obie instalacje wymagają pliku compose dostarczonego przez producenta oraz jednego polecenia. Najpierw skonfiguruj Docker Engine oraz wtyczkę Compose, zgodnie z opisem w naszym przewodniku po Docker Compose na VPS.

Immich publikuje swój plik compose oraz przykładowy plik środowiskowy przy każdym wydaniu.

sudo mkdir -p /opt/immich && cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

Edytuj .env przed rozpoczęciem jakichkolwiek działań. UPLOAD_LOCATION to miejsce, w którym będą przechowywane oryginały. DB_PASSWORD zawiera działające ustawienia domyślne, a Immich zaleca zmianę na losowe hasło, choć nie jest to wymagane. Postgres nie jest wystawiony publicznie, więc hasło służy jedynie do lokalnego uwierzytelniania, jednak ustawienie losowego ciągu znaków nic nie kosztuje. Używaj wyłącznie znaków A-Za-z0-9, ponieważ dokumentacja Immich wskazuje, że inne znaki mogą powodować problemy podczas parsowania wartości przez Docker. Następnie uruchom usługę.

docker compose up -d
docker compose ps

Interfejs webowy odpowiada na porcie 2283. Pierwsze konto zarejestrowane przez tę stronę staje się administratorem, więc uzyskaj dostęp i zarejestruj się niezwłocznie, zamiast pozostawiać otwartą instancję dostępną w Internecie.

PhotoPrism dostarcza jeden plik compose, który zawiera już MariaDB.

sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yaml

Otwórz compose.yaml i zmień PHOTOPRISM_ADMIN_PASSWORD przed pierwszym uruchomieniem. Dokumentacja jest w tej kwestii bezpośrednia: aplikacja startuje z hasłem początkowym zdefiniowanym w tym pliku, minimalna długość to 8 znaków, a wartości domyślnej nigdy nie należy używać na publicznym serwerze. W tym samym czasie ustaw wolumen originals na folder zawierający Twoje zdjęcia.

docker compose up -d
docker compose logs -f photoprism

PhotoPrism odpowiada na porcie 2342 dla użytkownika admin. Żadna z aplikacji nie powinna być wystawiona bezpośrednio. Umieść przed nimi reverse proxy z TLS (transport layer security), w konfiguracji podobnej do tej użytej dla własnego serwera Nextcloud z Docker, TLS i kopiami zapasowymi, lub utrzymuj serwer w sieci prywatnej i łącz się przez VPN. Jeśli ten VPS będzie obsługiwał więcej niż tylko zdjęcia, stosuj tę samą zasadę ograniczeń do każdej dodawanej usługi, ponieważ własny przekaźnik RustDesk wymaga jedynie dostępu do swoich dwóch portów i niczego więcej.

Która aplikacja mobilna jest lepsza

To obszar, w którym oba projekty najbardziej się różnią. Z tego powodu większość osób ostatecznie wybiera Immich.

Immich udostępnia oficjalne aplikacje na Androida i iOS. Wykonują one automatyczną kopię zapasową rolki aparatu w tle, więc nowe zdjęcia są przesyłane z telefonu bez konieczności otwierania aplikacji. Aby korzystać z usługi poza domem, Immich opisuje trzy rozwiązania: VPN, taki jak WireGuard lub OpenVPN, Tailscale albo reverse proxy udostępniające HTTPS. Reverse proxy pozwala aplikacjom mobilnym łączyć się bez instalowania aplikacji VPN na każdym telefonie. Immich ostrzega, aby nigdy nie przekierowywać portu 2283 bezpośrednio do Internetu bez dodatkowej konfiguracji.

PhotoPrism nie ma oficjalnej aplikacji natywnej. Udostępnia progressive web app, którą można dodać do ekranu głównego z poziomu przeglądarki. Projekt opisuje WebDAV (web distributed authoring and versioning) jako sposób synchronizowania zdjęć z telefonu. Zalecana jest w tym celu aplikacja innej firmy o nazwie PhotoSync, skonfigurowana dla katalogu /import/ lub /originals/ przez WebDAV. Rozwiązanie działa, ale jest to płatna aplikacja innej firmy wykonująca zadanie, które Immich realizuje we własnym kliencie.

Jeżeli wymagane jest automatyczne tworzenie kopii zapasowej zdjęć z telefonów kilku członków rodziny, wybór jest jednoznaczny: Immich.

Co faktycznie zapewnia uczenie maszynowe

Immich wykonuje wyszukiwanie semantyczne w bibliotece za pomocą CLIP, dlatego zapytanie takie jak „czerwony rower na śniegu” znajduje zdjęcia, których wcześniej nikt nie oznaczył. Wykrywa również twarze, grupuje je i wykrywa duplikaty. Indeksowanie dużego importu na CPU działa przez wiele godzin w tle. Jest to normalne i nie wymaga GPU (jednostki przetwarzania grafiki).

PhotoPrism klasyfikuje obrazy za pomocą wbudowanego modelu ONNX, wykrywa twarze i grupuje je według osób za pomocą modeli twarzy ONNX, a także odczytuje metadane lokalizacji, aby utworzyć mapę miejsc. Plik vision.yml w folderze konfiguracji może przełączyć obsługę etykiet i opisów na Ollama lub OpenAI, jeśli jest to potrzebne. Mapa jest funkcją, z powodu której użytkownicy pozostają przy tym rozwiązaniu: biblioteka indeksowana według miejsca wykonania zdjęć zapewnia zupełnie inny sposób przeglądania dwudziestu lat fotografii. Ta sama koncepcja sprawdza się w przypadku innych kolekcji multimediów, a interfejs Halcyon w stylu wypożyczalni kaset z lat 90. dla Jellyfin jest jej filmową wersją, umożliwiając przeglądanie według półki zamiast według listy. Rozpoznawanie twarzy jest dostępne w bezpłatnej wersji Community. Płatne członkostwa Essentials i Plus dodają funkcje, takie jak bogatsze warstwy map, większa liczba ról użytkowników i interfejs zarządzania użytkownikami. Ich ceny zaczynają się od kilku euro miesięcznie, przy rozliczeniu rocznym, według stanu na październik 2026.

Immich nie ma funkcji dostępnych wyłącznie po dokonaniu płatności i zgodnie z deklaracją projektu nigdy nie będzie ich mieć. Sprzedaje jednak opcjonalne dożywotnie klucze produktu: $25 dla jednego użytkownika lub $100 dla całego serwera, według cen ogłoszonych przez Immich w lipcu 2024. Zakup klucza niczego nie odblokowuje, a Immich działa bez ograniczeń także wtedy, gdy użytkownik nigdy nie zapłaci. Rdzeń PhotoPrism jest bezpłatny, a dodatkowe funkcje są opcjonalnie płatne.

Kopie zapasowe decydują o trwałości danych

Serwer zdjęć bez kopii zapasowej straci wszystkie dane rodzinne w przypadku awarii pojedynczego dysku. Obie aplikacje wymagają dwóch rodzajów kopii: bazy danych oraz plików.

W przypadku Immich należy wykonać zrzut bazy danych z kontenera Postgres oraz skopiować lokalizację przesłanych plików.

docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gz

Następnie należy wykonać kopię zapasową UPLOAD_LOCATION. Foldery zawierające niezastąpione dane to upload, library oraz profile. Foldery thumbs oraz encoded-video mogą zostać wygenerowane ponownie, kosztem wielu godzin pracy procesora. Sam zrzut bazy danych nie pozwala na odtworzenie całości, ponieważ zawiera jedynie metadane.

W przypadku PhotoPrism indeks posiada własne polecenie.

docker compose exec photoprism photoprism backup -i -f

Zapisuje ono zrzut SQL w lokalizacji storage/backup/. Następnie należy skopiować folder originals oraz folder storage. Ponieważ PhotoPrism zapisuje również pliki pomocnicze YAML opisujące każde zdjęcie, utracony indeks można odtworzyć na podstawie samych plików, co stanowi istotną zaletę w przypadku archiwum planowanego na dekady.

Niezależnie od wybranego rozwiązania należy regularnie wysyłać kopie zapasowe poza serwer, korzystając z szyfrowanych, deduplikowanych kopii restic w zdalnej pamięci masowej. Kopia zapasowa znajdująca się na tym samym dysku co biblioteka nie jest kopią zapasową. Zadanie powinno zgłaszać błędy, ponieważ kopia, której wykonywanie po cichu zatrzymało się w marcu, wygląda tak samo jak kopia wykonana ubiegłej nocy — aż do chwili, gdy będzie potrzebne jej odtworzenie. Samodzielnie hostowany serwer ntfy prześle takie powiadomienie na telefon jeszcze tego samego wieczoru.

Które rozwiązanie wybrać

Uruchom Immich, jeśli zdjęcia znajdują się na telefonach, jeśli więcej niż jedna osoba musi tworzyć kopię zapasową rolki aparatu oraz jeśli możesz przydzielić serwerowi 6 GB pamięci RAM lub więcej. Jest to rozwiązanie najbardziej zbliżone do Google Photos, które można hostować samodzielnie, a obsługa urządzeń mobilnych jest jego głównym atutem. Nasz przewodnik instalacji Immich krok po kroku szczegółowo omawia kwestie związane z wyczerpaniem pamięci oraz pułapki podczas aktualizacji.

Uruchom PhotoPrism, jeśli posiadasz już archiwum zdjęć na dysku, jeśli zależy Ci na mapach, metadanych i zachowaniu własnej struktury folderów lub jeśli Twój VPS dysponuje 4 GB pamięci RAM i wolisz działającą bibliotekę od ciągłego korzystania z partycji wymiany (swap). Jest to lepsze narzędzie do porządkowania zbiorów, które jest mniej wymagające dla słabszego sprzętu.

Uruchomienie obu rozwiązań jednocześnie jest również rozsądnym podejściem. Immich obsługuje codzienne przesyłanie zdjęć z telefonów, a raz w roku możesz przenieść wybrane fotografie do swojego archiwum i pozwolić PhotoPrism na ich indeksowanie. Aplikacje te nie wchodzą ze sobą w konflikt, ponieważ PhotoPrism odczytuje foldery, podczas gdy Immich zarządza własną strukturą danych.

FAQ

Czy PhotoPrism i Immich mogą korzystać z tego samego folderu ze zdjęciami?

Nie jest to bezpieczne w obu kierunkach. PhotoPrism indeksuje folder originals i ma funkcje, które zapisują w tym folderze, chyba że działa w trybie tylko do odczytu. Immich zakłada natomiast, że zarządza zawartością swojej lokalizacji przesyłania. Można wskazać PhotoPrism tylko do odczytu kopię folderu library używanego przez Immich, aby przeglądać jego zawartość. Nie należy jednak pozwalać obu aplikacjom zarządzać tymi samymi plikami, ponieważ podczas indeksowania szablon przechowywania Immich może przenosić lub zmieniać nazwy zasobów używanych przez PhotoPrism.

Czy Immich jest wystarczająco stabilny, aby przechowywać jedyną kopię zdjęć?

Żadna aplikacja hostowana samodzielnie nie powinna przechowywać jedynej kopii jakichkolwiek danych. Immich korzysta obecnie z wersjonowania semantycznego i informuje, że niezgodne zmiany są ograniczone do wydań głównych. Dlatego należy przypiąć IMMICH_VERSION do znacznika wersji głównej, takiego jak v3, przeczytać informacje o wydaniu, a następnie wykonać aktualizację za pomocą docker compose pull && docker compose up -d. Obniżanie wersji nie jest obsługiwane, nawet w obrębie tej samej wersji minor, dlatego przed każdą aktualizacją należy wykonać zrzut bazy danych. Oryginalne pliki należy przechowywać w kopii zapasowej poza serwerem. Wtedy ryzyko pozostaje niewielkie.

Dlaczego kontener machine learning Immich ciągle uruchamia się ponownie?

Zwykle jest kończony z powodu zbyt dużego zużycia pamięci. Wykonaj docker compose ps --all, ponieważ bez tej flagi zatrzymany kontener nie jest widoczny. Następnie sprawdź, czy usługa machine learning kończy działanie z kodem 137. Ten kod oznacza zakończenie procesu sygnałem 9. Zwykle przyczyną jest mechanizm jądra kończący procesy przy wyczerpaniu pamięci, ale nie jest to jedyna możliwość. Potwierdź przyczynę za pomocą sudo dmesg | grep -i 'out of memory'. Dodaj swap albo całkowicie wyłącz machine learning na maszynie z 4 GB pamięci. Limit pamięci kontenera nie ogranicza jego zużycia w bezpieczny sposób. Po osiągnięciu limitu proces nadal jest kończony, ale przestaje pozbawiać pamięci pozostałą część serwera. Bez machine learning przestają działać inteligentne wyszukiwanie i rozpoznawanie twarzy. Pozostałe funkcje Immich działają prawidłowo.

Czy PhotoPrism wymaga MariaDB, czy wystarczy SQLite?

SQLite działa i jest odpowiedni dla osobistej biblioteki. PhotoPrism ogranicza jednak liczbę workerów do czterech podczas korzystania z SQLite. Dokumentacja zaleca przejście na MariaDB, ponieważ lepiej obsługuje dużą współbieżność. Dostarczany przez projekt plik Compose zawiera już MariaDB, dlatego zalecana ścieżka jest również domyślną konfiguracją.

Ile miejsca na dysku należy zaplanować ponad rozmiar biblioteki?

Do rozmiaru oryginalnych plików należy dodać 10 do 20 procent, niezależnie od używanej aplikacji. Ta rezerwa obejmuje wygenerowane miniatury i transkodowane podglądy wideo. Kolekcja o rozmiarze 200 GB wymaga około 220 do 240 GB tylko na bibliotekę, a dodatkowo miejsca na bazę danych i dalszy przyrost danych. Jeśli na tym samym wolumenie przechowywana jest również pełna lokalna kopia zapasowa, oryginały i ta kopia wymagają co najmniej 400 GB przed uwzględnieniem pozostałych danych. Należy więc zaplanować około 450 GB albo umieścić kopię na osobnym wolumenie.

Czy ten artykuł był przydatny?