Nie wieder Google Photos

Die beste Open-Source-Alternative zu Google Photos

Nie wieder Google Photos

Ich werde immer öfter gefragt, wie ich meine Bilderflut in den Griff bekommen habe. Meine Antwort: Meine eigene Nextcloud! Das war jedoch den meisten meiner technisch versierten Freunde zu umständlich. Und leider musste ich zustimmen. Nextcloud könnte diesbezüglich besser organisiert sein.

Da jedoch viele meiner Freunde Googles 15GB Grenze bei Weitem überschreiten, fühlte ich mich angetrieben, nach einer besseren Lösung zu suchen. Und die war erstaunlich schnell gefunden.

Google

Google Photos ist zweifellos ein komfortabler Dienst zum Verwalten und Synchronisieren von Fotos und Videos über verschiedene Geräte hinweg. Funktionen wie automatische Alben, Erinnerungen und das einfache Teilen von Inhalten machen es für viele Nutzer attraktiv. Trotz dieser Vorteile gibt es gewichtige Gründe, sich nach einer Alternative umzusehen.

Ein zentraler Kritikpunkt betrifft Googles Datenschutz. Als US-amerikanisches Unternehmen speichert das Unternehmen sehr viele persönliche Daten, darunter auch Fotos und vor allem deren Metadaten, auf Servern in den USA. Für datenschutzbewusste Nutzer kann dies ein Problem darstellen, da unklar ist, wer Zugriff auf diese Daten hat und wie sie genau verwendet werden (siehe Patriot Act).

Ein weiterer Aspekt sind die Kosten. Google Photos nutzt den Speicherplatz von Google One. Während ein kostenloses Google-Konto 15 GB Speicherplatz bietet, wird dieser schnell knapp, wenn Fotos in Originalqualität und andere Dateien wie Google Drive-Daten und E-Mails hinzukommen. Wird mehr Speicherplatz benötigt, fallen monatliche oder jährliche Gebühren an. Die Kosten für zusätzlichen Speicherplatz können sich im Laufe der Zeit summieren und sind für Nutzer, die große Fotosammlungen verwalten möchten, nicht unerheblich. Und man möchte auch schließlich beim Filmen nicht immer im Hinterkopf denken müssen: "Wird mein Datenvolumen noch reichen, oder muss ich schon wieder das nächst größere Paket kaufen..."

Alternativen

Auf meiner Suche nach einer Alternative zu Google Photos wurde häufig Immich genannt. Dabei handelt es sich um eine Open-Source-Fotosammlung, die auf Self-Hosting basiert. Immich bietet eine moderne und benutzerfreundliche Oberfläche, die Google Photos ähnelt und somit den Umstieg erleichtert. Darüber hinaus bietet es Support für mehrere Nutzer, eine Funktion, die z.B. PhotoPrism fehlt.

Immich – Die Open-Source Lösung

Immich bietet eine Reihe von Vorteilen:

  • Volle Kontrolle: Der Nutzer behält die vollständige Kontrolle über seine Daten, da diese auf eigener Hardware gespeichert werden.
  • Datenschutz: Die Fotos verlassen nicht den eigenen Server und unterliegen somit nicht den Datenschutzrichtlinien von Drittanbietern.
  • Kostenkontrolle: Es fallen keine monatlichen Gebühren für Speicherplatz an. Die Kosten beschränken sich auf die eigene Hardware und den Stromverbrauch.
  • Open Source: Immich ist Open Source, was Transparenz und die Möglichkeit zur Community-basierten Weiterentwicklung bedeutet.
  • Ähnliche Funktionalität wie Google Photos: Immich bietet viele Funktionen, die von Google Photos bekannt sind, wie z.B. Apps für Android und iOS zum automatischen Synchronisieren von Fotos, Alben, Freigabe-Links und eine übersichtliche Web-Oberfläche.

Immich eignet sich daher ideal für Nutzer, die Wert auf Datenschutz legen und die Kontrolle über ihre persönlichen Daten behalten möchten, ohne auf den Komfort einer modernen Fotosammlung verzichten zu müssen.

Installation per Script

Um die Installation zu vereinfachen, stellt Immich ein Installationsskript bereit. Dieses Skript automatisiert den Download der benötigten Dateien und startet die Docker-Container.

Zuerst muss eine SSH-Verbindung zum Linux-Server aufgebaut werden. Nach erfolgreicher Anmeldung am Server kann das Installationsskript mit den folgenden Befehlen heruntergeladen und ausgeführt werden:

wget https://raw.githubusercontent.com/immich-app/immich/main/install.sh
chmod +x install.sh
./install.sh

Das Skript install.sh lädt die Dateien docker-compose.yml und .env herunter, welche die Konfiguration für Immich enthalten. Anschließend startet das Skript die Docker-Container, die für Immich benötigt werden. Dazu gehören der Immich-Server, Microservices für die Bildverarbeitung und Gesichtserkennung, Redis als In-Memory-Datenbank und PostgreSQL als Hauptdatenbank.

Der Fortschritt der Installation kann in der Konsole verfolgt werden. Der erste Start kann etwas länger dauern, da die Docker-Images heruntergeladen werden müssen. Bei späteren Starts geht der Vorgang schneller, da die Images dann bereits lokal vorhanden sind.

Wenn man seine Container so aufgebaut hat, wie in meiner Docker-Serie beschrieben, kann man auch einfach folgenden Abschnitt in das docker-compose.yml aufnehmen und im NPM eine URL dafür vergeben.

Docker - Meister-Tech-Blog
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:release
    volumes:
      - ./immich/media:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    expose:
      - "2283"
    depends_on:
      - redis
      - database
      - immich-machine-learning
    restart: unless-stopped
    healthcheck:
      disable: false
    environment:
      DB_HOST: database
      DB_PORT: "5432"
      DB_USERNAME: postgres
      DB_PASSWORD: "xxxpostgrespasswordxxx"
      DB_DATABASE_NAME: immich
      TZ: Europe/Berlin
    networks:
      backend: {}
      web: {}

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:release
    volumes:
      - ./immich/model-cache:/cache
    restart: unless-stopped
    healthcheck:
      disable: false
    environment:
      TZ: Europe/Berlin
    networks:
      - backend

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
    restart: unless-stopped
    networks:
      - backend

  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    environment:
      POSTGRES_PASSWORD: "xxxpostgrespasswordxxx"
      POSTGRES_USER: "postgres"
      POSTGRES_DB: "immich"
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      - ./immich/postgres:/var/lib/postgresql/data
    healthcheck:
      test: >-
        pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
        Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
        --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
        echo "checksum failure count is $$Chksum";
        [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: >
      postgres
      -c shared_preload_libraries=vectors.so
      -c 'search_path="$$user", public, vectors'
      -c logging_collector=on
      -c max_wal_size=2GB
      -c shared_buffers=512MB
      -c wal_compression=on
    restart: unless-stopped
    networks:
      - backend

Im obigen Abschnitt muss lediglich das PostgreSQL Passwort angepasst werden. Alles weitere wird nach der ersten Anmeldung per Browser konfiguriert.

Erstanmeldung und Konfiguration von Immich

Nach erfolgreicher Installation per install.sh ist Immich über den Browser erreichbar. Die Standardeinstellung sieht vor, dass Immich auf Port 2283 des Servers erreichbar ist. Um auf Immich zuzugreifen, wird die IP-Adresse des Servers und der Port im Browser eingegeben, z.B. http://<IP-Adresse-des-Servers>:2283.

Beim ersten Aufruf erscheint eine Willkommensseite, auf der ein Benutzerkonto erstellt werden muss. Dazu werden eine E-Mail-Adresse, ein Name und ein Passwort vergeben. Nach der Registrierung und Anmeldung gelangt man zur Hauptoberfläche von Immich.

In den Einstellungen kann das Farbthema (hell oder dunkel) gewählt werden. Die Option "Storage Template" ist in neueren Versionen von Immich nicht mehr relevant und kann ignoriert werden.

Hochladen und Teilen von Fotos

Nach der Konfiguration können Fotos und Videos in Immich hochgeladen werden. Dies kann über die Web-Oberfläche oder über die Immich-App für Android und iOS erfolgen. Die Apps ermöglichen das automatische Synchronisieren von Fotos im Hintergrund.

Immich bietet ähnliche Funktionen wie Google Photos zum Verwalten und Teilen von Fotos:

Anzeigen von Medien
Lokationen
Personen
Alben
Teilen

Im Gegensatz zu Google kann eine zeitliche Beschränkung eingerichtet werden. Auf die gleiche Art kann auch ein Album geteilt, und den Teilnehmern ermöglicht werden, Bilder in das Album hochzuladen - mit Passwortschutz versteht sich.

Kurz gesagt: Es findet sich alles wieder, was man auch bei Google findet. Und da alles auf dem eigenen Server verwaltet wird, gibt es einige Vorteile über Googles Variante hinaus.

Übernahme alter Fotos

Um seinen teuer bezahlten Google-Account in die eigene Cloud zu überführen, kann man seine Daten zunächst aus der Google-Welt herunterladen. Auf https://takeout.google.com kann man dies in die Wege leiten.

Man könnte auch die Dateien einfach in den Browser werfen und abwarten...

Ich hatte meine Bilder jedoch bereits in meiner Nextcloud auf dem gleichen Server. So konnte ich meine Dateien als Volume unter /mnt einbinden. Und spätestens hier kommt der CLI-Befehl immich ins Spiel. So konnte ich mit einem einzigen Befehl alle Bilder und Videos direkt für meinen immich-User hochladen:

Da dieser Vorgang auf dem Server selbst stattfand, konnte ich meinen Laptop abschalten und am nächsten Morgen nach dem Ergebnis schauen, nachdem die KI alle Klassifikationen vorgenommen hat.

Besondere Funktionen

Ich hatte vor langer Zeit ein Script geschrieben, dass Bilder und Videos in Ereignisse gruppiert. Es hat geprüft, wie groß der zeitliche, und wie groß der räumliche Abstand der Metadaten ist. Die Dateien wurden dann automatisch in Ordner gruppiert, umbenannt und gegebenenfalls re-encodiert. Das führt jetzt unglücklicherweise zu doppelten Dateien, die ich per Hash nicht mehr vergleichen kann, da die Bilder unterschiedliche Auflösungen haben. Ideen zur Lösung meines speziellen Problems habe ich letztes Jahr dargestellt.

Script-Time: Bilder vergleichen ohne KI
Wie kann ich identische Bilder finden, auch wenn sie unterschiedliche Auflösungen haben? Ansatzmöglichkeiten Ich habe verschiedene Möglichkeiten ausprobiert. Darunter die folgenden: Histogramm-Vergleich: * Histogramme erstellen für die Farbverteilung in den Bildern. * Vergleich der Histogramme, um festzustellen, wie ähnlich sich die Bilder sind. * Dieser Ansatz berücksichtigt die Farbinformationen und sollte auch bei

Mit Immich erkennt nun die KI, ob es sich um das gleiche Bild handelt, selbst wenn es re-encodiert wurde. In diesem Fall entscheidet sich Immich für das bessere Bild.

Man kann diesen Vorschlag annehmen oder auch nicht. Aber auch alle Duplikate lassen sich mit einem Klick bereinigen, sofern man der KI Vertrauen schenkt.

Backup – Nicht vergessen!

Ein wichtiger Aspekt beim Self-Hosting ist die Datensicherung. Im Gegensatz zu Cloud-Diensten wie Google Photos ist der Nutzer selbst für das Backup seiner Daten verantwortlich. Es ist essenziell, ein regelmäßiges Backup der Immich-Daten zu erstellen, um Datenverlust im Falle eines Hardware-Defekts oder anderer unvorhergesehener Ereignisse zu vermeiden.

Die Immich-Daten umfassen die Datenbank, die Konfigurationsdateien und die hochgeladenen Fotos und Videos. Es gibt verschiedene Backup-Strategien, die je nach Bedarf und Infrastruktur gewählt werden können. Ein einfaches Backup kann beispielsweise das regelmäßige Kopieren der Immich-Daten auf eine externe Festplatte oder ein NAS umfassen. Komplexere Backup-Lösungen können inkrementelle Backups, Cloud-Backups oder die Verwendung von Backup-Software beinhalten.

Die Erstellung eines Backups sollte als integraler Bestandteil der Immich-Installation betrachtet werden. Ohne Backup besteht das Risiko eines unwiederbringlichen Datenverlusts.

Backup Script | Immich
Borg is a feature-rich deduplicating archiving software with built-in versioning. We provide a template bash script that can be run daily/weekly as a cron job to back up your files and database. We encourage you to read the quick-start guide for Borg before running this script.

Android-Client

Wer die Google-Fotos-App kennt, kennt auch die Immich-App. Man erkennt auf den ersten Blick kaum einen Unterschied. Aber die Einstellungen machen mehr Sinn, was natürlich auch daran liegt, dass man die Dateien auf seinem eigenen Server abgelegt hat.

Besonders die Strategien für die Synchronisation, oder das Teilen der Bilder mit seinem Partner sind vorbildlich gelöst.

Fazit

Immich hat mich über alle Maßen beeindruckt. Es ist extrem flink und die Smartphone-Integration ist sehr intuitiv. Schließlich habe ich nun den letzten Dienst aus den Fängen der Datenkraken befreit.


Google Suche → Selfhosted Suchmaschine
Die beste anonyme Meta-Suchmaschine
Eine selbstgehostete, datenschutzfreundliche Suchmaschine mit SearXNG und Docker – für maximale Kontrolle über die eigenen Suchanfragen und -ergebnisse!

Gmail → Selfhosted E-Mail-Server
  • Mailcow (mailcow.email) – Komplettlösung mit Webmail
  • Postfix + Dovecot + Rspamd – Individuelle Konfiguration für maximale Kontrolle
  • Modoboa (modoboa.org) – E-Mail-Server mit Web-Oberfläche

Google Drive → Selfhosted Cloud-Speicher
Alles synchron
Mit Syncthing alle Daten synchron halten

Google Chrome → Selfhosted Browser-Sync
  • xBrowserSync (xbrowsersync.org) – Favoriten & Einstellungen selbst hosten
  • Homepage
Neues Dashboard
Ein Dashboard mit Statusanzeigen und Verfügbarkeitsprüfungen…

Google Maps → Selfhosted Karten- & Navigationsdienste

Google Kalender → Selfhosted Kalender
  • Nextcloud Kalender – Vollwertige Google-Kalender-Alternative
  • Baïkal (sabre.io/baikal) – Leichtgewichtige CalDAV/Kontakt-Sync Lösung

Google Docs (Docs, Sheets, Slides) → Selfhosted Office-Lösungen

Google Photos → Selfhosted Foto-Galerie
  • Immich – AI-gestützte Fotoverwaltung (kennen wir ja jetzt)
  • PhotoPrism (photoprism.app) – AI-gestützte Fotoverwaltung

Google Play Store → Selfhosted App-Verwaltung
  • F-Droid Server (f-droid.org) – Eigene Open-Source-App-Repo hosten
  • Aurora Store (Mirror Hosting) – Proxy für Google Play (nicht selfhosted, aber anonym nutzbar)

Google Analytics → Selfhosted Web-Analyse-Tools
  • Matomo (matomo.org) – DSGVO-konforme Analyse
  • Plausible (plausible.io) – Minimalistisches Tracking
  • Umami (umami.is) – Leichtgewichtig & Open-Source

Google News → Selfhosted RSS-Reader
Selfhosted RSS-Feeds
Ich habe bereits früher über Newsfeeds berichtet. Dabei lag der Fokus darauf, dass die Nachrichten offline auf dem Smartphone abgelegt werden, sodaß die mobile Datenverbindung möglichst wenig belastet wird. Newsfeeds verwaltenDie richtigen Informationen immer schnell zur Hand.Meister-Tech-BlogMichael Meister Inzwischen fällt dies nicht mehr so ins Gewicht, da die heutigen
  • FreshRSS (freshrss.org) – Leichtgewichtiger RSS-Reader
  • Miniflux (miniflux.app) – Minimalistische RSS-Plattform
  • Tiny Tiny RSS (TT-RSS) (tt-rss.org) – Umfangreiche RSS-Verwaltung

Google Messages / Hangouts → Selfhosted Messenger
Sicherer Ersatz für Teams
Behalten Sie die Kontrolle über Ihre Daten mit Mattermost: Ein sicherer, selbstgehosteter Messaging-Dienst.
  • Matrix (Element) (element.io) – Selbstgehostetes Messenger-Netzwerk
  • Mattermost (mattermost.com) – Team-Kommunikation & Chat
  • Rocket.Chat (rocket.chat) – Selfhosted Slack-Alternative

Google Voice → Selfhosted VoIP & Telefonie