ImmichFrame vs Immich Kiosk: która ramka cyfrowa pasuje do twojego setupu?

W zeszłym roku pisaliśmy o Immich Kiosk i ImmichFrame. Od tego czasu oba projekty wydały wiele nowych wersji. Pytanie, które słyszymy od użytkowników, zmieniło się razem z nimi. Kiedyś brzmiało „czy da się to zrobić?” Teraz brzmi „który wybrać?”
Na pierwszy rzut oka robią to samo. Oba łączą się z twoim serwerem Immich za pomocą klucza API i wyświetlają twoje zdjęcia na pełnym ekranie gdzieś w domu. Oba są projektami społeczności, niezwiązanymi z Immich. Oba działają z kontem PixelUnion tak samo jak z własnym serwerem: wskaż im https://<username>.pixelunion.eu i daj im klucz API.
Listy funkcji pokrywają się niemal całkowicie, więc w dużej mierze je pominę. To, co odróżnia te dwa projekty, to architektura. Ten wpis dotyczy aktualnych wersji: ImmichFrame v1.0.38 (14 września 2026) i Immich Kiosk v0.44.1 (25 września 2026).
Dwa różne pomysły na to, czym jest ramka na zdjęcia
Immich Kiosk: jeden serwer, konfigurowany przez URL
Immich Kiosk, stworzony przez Damona Goldinga, to pojedynczy plik binarny w Go. Używa Echo do obsługi HTTP i templ do szablonów po stronie serwera, a stronę WWW serwuje na porcie 3000. To cały produkt. Wyświetlaczem jest dowolna przeglądarka: Raspberry Pi z Chromium w trybie kiosku, stary tablet z Fully Kiosk Browser, smart TV, odbiornik Google Cast.
Decyzja projektowa, która ma znaczenie: niemal każde ustawienie w config.yaml można nadpisać parametrem zapytania w adresie URL. Jeden kontener Kiosk może sterować każdym ekranem w domu, a każdy z nich zachowuje się inaczej:
http://kiosk.local:3000/?album=ALBUM_ID&layout=splitview&transition=cross-fade
http://kiosk.local:3000/?person=PERSON_ID&show_time=true&image_fit=cover
Tablet w kuchni pokazuje album rodzinny z zegarem. Ekran w przedpokoju pokazuje zdjęcia jednej osoby w orientacji pionowej. Ten sam serwer, ten sam plik konfiguracyjny, różne adresy URL. Druga strona medalu jest taka, że każdy w twojej sieci, kto ma dostęp do strony, może zmienić to, co wyświetla. Jeśli ci to przeszkadza, disable_url_queries to wyłącza.
ImmichFrame: serwer plus natywne aplikacje
ImmichFrame idzie w przeciwną stronę. Serwer jest napisany w C# na ASP.NET Core z frontendem w SvelteKit i dystrybuowany jako ghcr.io/immichframe/immichframe na porcie 8080. Do tego projekt utrzymuje natywnych klientów:
- Android, przez Sklep Play lub ręcznie instalowany plik APK, łącznie z usługą wygaszacza ekranu dla Android TV
- Apple TV, iPhone i iPad (iOS 17+) oraz Maki z Apple Silicon przez App Store
- Aplikacje desktopowe na Windows, macOS i Linuksa
- Ramki Frameo, czyli tanie ramki z Androidem, które można kupić za około 40 $, instalowane przez ADB (Android Debug Bridge)
To właśnie natywne aplikacje sprawiają, że ImmichFrame wygląda tak, a nie inaczej. Apple nie pozwala na WebView (wbudowane komponenty przeglądarki) w tvOS, więc aplikacja na Apple TV odtwarza wyświetlanie przy użyciu natywnych kontrolek. Na Android TV ImmichFrame może zastąpić systemowy wygaszacz ekranu, czego karta przeglądarki nie potrafi. Aplikacja na Androida uruchamia też mały serwer HTTP na porcie 53287, który przyjmuje next, previous, pause, dim, undim i brightness?value=0.5. To ostatnie podpinasz do Home Assistant, żeby przyciemnić ramkę, gdy gasną światła.
Kompromis dotyczy konfiguracji. Działa ona na poziomie instancji. Z tego, co wyczytałem w dokumentacji, nie ma odpowiednika nadpisywania przez URL z Kiosk, więc dwa ekrany z różnymi albumami zwykle oznaczają dwa kontenery albo dwa konta. Tanie w utrzymaniu na chodzie. Więcej do pilnowania.
Szczegóły, które mają znaczenie dla zaawansowanych użytkowników
Konfiguracja i stan
Kiosk to konfiguracja jako kod. Plik YAML z opublikowanym schematem JSON do podpowiedzi w edytorze, zmienne środowiskowe na sekrety i watch_config do przeładowania po zmianach. Leży w repozytorium Git obok reszty twoich plików compose.
ImmichFrame niedawno poszedł w drugą stronę. Ma teraz panel administracyjny pod /admin, w którym każde ustawienie, łącznie z kontami Immich, można edytować w przeglądarce i od razu zastosować. Ustawienia są przechowywane w bazie SQLite (immichframe.db) w /app/Config. Plik Settings.yml jest importowany jeden raz, przy pierwszym uruchomieniu. Potem źródłem prawdy jest baza danych, a zmiany w pliku są ignorowane.
Ten ostatni punkt kogoś zaskoczy. Jeśli zarządzasz swoim homelabem deklaratywnie, konfiguracja ImmichFrame jest teraz stanem, który trzeba backupować, a nie plikiem, który można porównać diffem. Jeśli wolisz klikać niż edytować YAML, to jest to poprawa. Żadne z tych podejść nie jest złe. Są zbudowane dla różnych ludzi.
Wybór treści
Oba obsługują podstawy: albumy, wykluczone albumy, osoby, tagi, oceny, wspomnienia, ulubione, zakresy dat i wideo (w ImmichFrame wciąż eksperymentalne). Różnice są na obrzeżach.
ImmichFrame jest zbudowany wokół wielu kont. Każdy wpis w Accounts ma własny adres serwera, klucz API i filtry. Połącz swoją bibliotekę z biblioteką partnera albo pobieraj z dwóch osobnych serwerów Immich, a ramka zmiesza je w jeden pokaz slajdów.
Kiosk idzie głębiej w filtrowaniu w obrębie jednej biblioteki. require_all_people pokazuje tylko zdjęcia, na których wszystkie wskazane osoby są razem, dokładnie to, czego chcesz dla ramki „dziadkowie z wnukami”. Są excluded_people, excluded_partners, filter_exclude_faces dla ekranu z samymi krajobrazami i filter_newest, żeby ograniczyć źródło do najnowszych elementów. Z włączonym asset_weighting mały album nie ginie przy dużym, gdy łączysz źródła. Kiosk obsługuje też wielu użytkowników przez immich_users_api_keys, wybieranych dla każdego ekranu przez URL.
Wyświetlanie i sprzęt
Oba oferują układ podzielonego ekranu dla dwóch pionowych zdjęć na poziomym ekranie, rozmyte tła, zoom i przesuwanie w stylu Ken Burns, zegar i pogodę z OpenWeatherMap. ImmichFrame dodaje nakładki z kalendarzem z dowolnego kanału ICS (iCalendar) przez Webcalendars, co czyni z niego całkiem przyzwoity kuchenny dashboard.
Kiosk ma więcej opcji dla sprzętu, który działa bez przerwy. burn_in_interval okresowo obniża krycie interfejsu, żeby chronić panele OLED przed wypaleniem. sleep_start i sleep_end wygaszają ekran w nocy. offline_mode przechowuje lokalnie zestaw elementów w pamięci podręcznej, więc ramka na niestabilnym Wi-Fi dalej działa. optimize_images zmienia rozmiar po stronie serwera, więc Pi Zero nie musi dekodować pliku 48 MP co 60 sekund.
Przy sprzęcie Frameo nie nastawiaj się na wiele. Te urządzenia działają na Androidzie 6. Jeśli nie zaktualizujesz systemowego WebView, co opisuje dokumentacja ImmichFrame i co wymaga ponownego zamontowania /system jako root, tracisz podzielony ekran, obsługę HEIC (formatu zdjęć z iPhone’a) i wideo. Działa. To dobry sposób, żeby dać ramce za 40 $ drugie życie. To też projekt dla majsterkowiczów, a nie prezent, który skonfigurujesz w dziesięć minut.
Bezpieczeństwo
Ramka na zdjęcia przez cały dzień siedzi w twojej sieci z kluczem do całej twojej biblioteki zdjęć. Większość ludzi konfiguruje ją raz i nigdy więcej do niej nie zagląda. To połączenie zasługuje na kilka minut zastanowienia.
- Używaj osobnego klucza API dla każdej ramki. Immich pozwala tworzyć klucze API z ograniczonymi uprawnieniami. Daj ramce tylko to, czego potrzebuje, i unieważnij klucz, jeśli urządzenie zginie albo zostanie wymienione. ImmichFrame obsługuje też
ApiKeyFile, więc klucz może pochodzić z sekretu Dockera zamiast z pliku konfiguracyjnego. - Uważaj na uprawnienia do zapisu. Nakładka „more info” w Kiosk ma przyciski like i hide, które dodają do ulubionych, tagują lub archiwizują elementy w Immich. Przydatne, ale oznacza to, że klucz potrzebuje uprawnień do zapisu. Jeśli z tych przycisków nie korzystasz, wyłącz je i zostaw klucz tylko do odczytu.
- Zabezpiecz samą ramkę. Żaden z tych serwerów nie powinien być wystawiony do internetu. Kiosk ma opcję
passwordidisable_url_queries. ImmichFrame maAuthenticationSecretdla klientów i osobne hasło administratora do/admin. Dokumentacja ImmichFrame podaje, że panel administracyjny pokazuje klucze API i przesyła je otwartym tekstem, więc umieść go za HTTPS, jeśli jest dostępny spoza twojej sieci lokalnej. - Wiedz, co opuszcza twoją sieć. Z PixelUnion twoje zdjęcia wędrują z naszych serwerów w Europie do kontenera w twoim domu, a potem na twój ekran. Nic nie przechodzi przez chmurę zewnętrznej firmy. Wyjątkiem jest pogoda: oba projekty wysyłają twoje współrzędne do API OpenWeatherMap. Mały wyciek, ale prawdziwy.
Różnią się też licencje. Kiosk jest na AGPL-3.0, ImmichFrame na GPL-3.0. Przy użyciu prywatnym nic to nie zmienia. AGPL obejmuje też oprogramowanie udostępniane przez sieć, więc jeśli planujesz uruchomić któryś z nich jako usługę hostowaną dla innych, najpierw przeczytaj licencje.
To który uruchomić?
Wybierz Immich Kiosk, jeśli twoje wyświetlacze to przeglądarki (Raspberry Pi, tablety na ścianie, smart TV) i chcesz, żeby jeden kontener sterował nimi wszystkimi. Pasuje do osób, które trzymają swój homelab w YAML i Gicie, chcą precyzyjnych filtrów i dbają o ochronę przed wypaleniem, harmonogramy uśpienia i cache offline na sprzęcie działającym bez przerwy.
Wybierz ImmichFrame, jeśli chcesz natywnych aplikacji, zwłaszcza na Apple TV, wygaszacza ekranu na Android TV albo przerobionej ramki Frameo. Pasuje do domów, które chcą połączyć kilka kont Immich w jeden pokaz slajdów, albo które wolą zarządzać ustawieniami w panelu WWW niż w pliku tekstowym.
Wiele osób używa obu. Kiosk ma około 1,7 tys. gwiazdek na GitHubie, ImmichFrame około 2,4 tys., a oba wydają nowe wersje co kilka tygodni i mają aktywne kanały na Discordzie na serwerze Immich. Dwóch opiekunów rozwiązujących ten sam problem na różne sposoby zwykle sprawia, że oba projekty stają się lepsze. Tak powinien działać open source, i nie zdarza się to tak często, jak ludzie myślą.
Żaden z nich nie powie ci o twoich zdjęciach niczego, czego jeszcze nie wiesz. To, co robią, to zdjęcie tych zdjęć z serwera i powieszenie ich na ścianie, gdzie naprawdę na nie patrzysz. To jest warte popołudnia majsterkowania.
Jeśli wolisz spędzić to popołudnie przy ramce, a nie przy utrzymywaniu samego Immich, to właśnie tym się zajmujemy. Dbamy o aktualizacje serwera i kopie zapasowe na europejskiej infrastrukturze. Ty dostajesz klucz API, na który kierujesz swoją ramkę.