Immich groeide in twee jaar van hobbyproject tot de meest actieve zelfgehoste fotobeheeroplossing. Versie 2.0 bereikte in oktober 2025 de stabiele release; sindsdien zijn OCR-zoekfunctie, command palette en verbeterde gezichtsherkenning erbij gekomen. Dit is wat je nodig hebt om het op eigen hardware te draaien — en waar je op moet letten voor je docker compose up typt.
Waarom Immich zo hard groeit
Google Photos heeft zijn gratis onbeperkte opslag afgebouwd, iCloud kost maandelijks geld, en Amazon Photos geeft je het ongemakkelijke gevoel dat je betaalt om je eigen herinneringen te bewaren. Immich biedt een alternatief dat sterk op Google Photos lijkt — dezelfde tijdlijn-interface, kaartweergave, dezelfde manier om foto's aan mensen toe te wijzen — maar waarbij de gegevens op jouw hardware staan.
Wat Immich onderscheidt van Nextcloud Photos of PhotoPrism is het volwaardige ML-pakket dat standaard meegeleverd wordt. Bij elke upload worden CLIP-embeddings berekend — vectorrepresentaties van de visuele inhoud — waarmee je kunt zoeken op "zonsondergang aan zee" zonder ooit een tag te hebben aangemaakt. Gezichtsherkenning clustert bijgesneden gezichtsuitsneden via een DBSCAN-variant, zodat je bibliotheek automatisch georganiseerd raakt zonder jouw input.
Versie 2.2 (oktober 2025) voegde OCR-zoekfunctie toe: tekst op foto's — straatnamen, menukaarten, whiteboards — is doorzoekbaar. De justified layout werd volledig herschreven voor merkbaar snellere thumbnailberekening in grote albums. Versie 2.4 bracht een command palette (Ctrl+K) voor snelle navigatie, en versie 2.5 (januari 2026) zorgt dat bewerkte foto's standaard worden gedownload in plaats van de onbewerkte originelen.
"Bij elke upload berekent Immich CLIP-embeddings — zoeken op 'zonsondergang aan zee' werkt zonder dat je ooit een tag aanmaakte."
Installatie via docker compose
Docker Compose is de enige officieel ondersteunde installatiemethode. De vroeger populaire docker-compose (met koppelteken) wordt niet meer ondersteund; je hebt het nieuwere docker compose subcommando nodig, wat standaard aanwezig is in Docker Engine 20.10 en hoger.
De minimale systeemeisen zijn 6 GB RAM en twee CPU-kernen, maar in de praktijk draait Immich al op een N100 mini-PC met 8 GB als je de machine-learning container op lage concurrency instelt. Aanbevolen is 8 GB of meer, zeker als je een grote bibliotheek hebt of de ML-functies vol wil benutten. Het platform ondersteunt zowel amd64 als arm64, dus een Raspberry Pi 5 of een Odroid-bord werkt ook.
De installatiestappen zijn minimaal:
# Maak een werkmap aan
mkdir ~/immich-app && cd ~/immich-app
# Download de officiële compose-bestanden
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
# Pas het .env-bestand aan
nano .env
In het .env-bestand stel je drie zaken in: UPLOAD_LOCATION (het pad waar je foto's worden opgeslagen, bij voorkeur een apart volume of een mount naar je NAS), DB_DATA_LOCATION (voor de PostgreSQL-database), en DB_PASSWORD. Gebruik voor die laatste een willekeurige string van minstens dertig tekens — de database is niet van buitenaf bereikbaar, maar het is een goede gewoonte.
UPLOAD_LOCATION=/mnt/photos
DB_DATA_LOCATION=/home/gebruiker/immich-db
DB_PASSWORD=eenlangewillekeurigestring
TZ=Europe/Brussels
Daarna:
docker compose up -d
Na een minuut of twee — afhankelijk van je internetverbinding, want de images zijn samen zo'n 3 à 4 GB — is Immich bereikbaar op poort 2283. De eerste gebruiker die zich registreert, wordt automatisch beheerder.
Een punt om op te letten: Immich heeft vorig jaar de database-extensie VectorChord geïntroduceerd als vervanging voor het verouderde pgvecto.rs. Als je een bestaande installatie upgradet, volg je het officiële upgradepad stap voor stap — overgeslagen versies kunnen databasemigraties missen die later voor problemen zorgen.
ML-config: wanneer je GPU nodig hebt
De machine-learning container draait standaard op de CPU. Voor een bibliotheek van tienduizend foto's is dat prima: de initiële indexering duurt een paar uur op een moderne vierkernige processor, maar eenmaal klaar verwerkt Immich nieuwe uploads snel genoeg dat je er niets van merkt. Het wordt een ander verhaal als je honderdduizenden foto's hebt, als je de ML-functies na elke upload direct wil zien, of als je Immich op dezelfde machine draait als andere werklasten.
Voor NVIDIA-GPU-ondersteuning voeg je een apart compose-bestand toe:
# In je docker-compose.yml, onder de immich-machine-learning service:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
Vereisten voor NVIDIA-GPU-acceleratie: compute capability 5.2 of hoger (Maxwell-architectuur en later), een officiële NVIDIA-driver geïnstalleerd op de host, en driver versie 545 of hoger (voor CUDA 12.3 ondersteuning). De nvidia-container-toolkit moet ook geïnstalleerd zijn en geconfigureerd als Docker runtime.
Voor AMD-GPU's en Intel Arc/Quick Sync bestaat ook ondersteuning via OpenVINO en ROCm, gedocumenteerd in de officiële hardware-acceleratiepagina. De instelling activeer je in de Immich-beheerinterface onder Administration > System Settings > Machine Learning. Daar vind je ook de instelling voor het CLIP-model: standaard draait Immich op ViT-B/32, een compact model dat goed presteert voor de meeste bibliotheken. Wie betere zoekresultaten wil voor niet-Engelse content of complexere zoekopdrachten, kan overstappen naar een groter model zoals ViT-L/14 — maar dat verdubbelt het geheugengebruik van de ML-container ruwweg.
Voorbeeld-stack — Immich op NAS/mini-PC
docker compose subcommando)Reverse proxy en externe toegang
Immich op poort 2283 op je thuisnetwerk is handig, maar het mobiele synchronisatieschema werkt pas echt goed als je ook buiten huis verbinding kunt maken. Dat vereist een reverse proxy met HTTPS. De twee meest gebruikte opties zijn Nginx Proxy Manager (laagdrempelig, webinterface) en Traefik (meer configuratie, maar uitstekend geïntegreerd met Docker-labels).
Voor Nginx is de meest vergeten instelling de uploadlimiet. Standaard weigert Nginx bestanden groter dan 1 MB — voor foto's en video's direct een probleem:
server {
listen 443 ssl;
server_name immich.jouwnaam.be;
client_max_body_size 50000M;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
location / {
proxy_pass http://192.168.1.x:2283;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket-ondersteuning voor de live-updates in de webinterface
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Voor Traefik is de meest voorkomende valkuil de standaard timeout van 60 seconden op de entrypoint. Zodra een video-upload die grens nadert, kapt Traefik de verbinding af met een 499-foutcode. Voeg in je Traefik-configuratie respondingTimeouts.readTimeout en writeTimeout toe op de entrypoint die Immich bedient, en zet die op minstens 600 seconden.
SSL-certificaten regel je via Let's Encrypt, ingebouwd in zowel Nginx Proxy Manager als Traefik. Een DNS-challenge werkt ook als Immich niet publiek bereikbaar is — Cloudflare en de meeste grote DNS-providers worden ondersteund.
Backup en migratie
Immich slaat originele bestanden op in UPLOAD_LOCATION en beheert de database in de PostgreSQL-container. Voor een compleet herstel heb je beide nodig. Immich maakt automatisch databasebackups aan in UPLOAD_LOCATION/backups — standaard dagelijks, met bewaring van de laatste vijf kopieën. Die instelling is aanpasbaar via de beheerinterface onder Administration > Jobs.
Een handmatige databasebackup maak je met:
docker exec -t immich_postgres pg_dumpall --clean --if-exists \
--username=postgres | gzip > /backup/immich_db_$(date +%Y%m%d).sql.gz
Herstel doe je door het databasevolume te verwijderen (docker compose down -v), de PostgreSQL-container opnieuw te starten en de dump terug te spelen via psql, waarna je de volledige stack weer opbrengt.
Wie overstapt vanuit Google Photos, gebruikt het best immich-go: een CLI-tool die Google Takeout-archieven importeert met albums en metadata intact. De tool koppelt JSON-sidecar-bestanden automatisch aan de bijbehorende foto's — betrouwbaarder dan bestanden direct uploaden en hopen dat de EXIF-gegevens kloppen.
Een valkuil bij nieuwere installaties: de Storage Template is standaard uitgeschakeld. Zonder die instelling slaat Immich bestanden op met UUID-bestandsnamen, wat de structuur op schijf onleesbaar maakt voor andere tools. Schakel Storage Template in via de beheerinterface en draai daarna de Storage Template Migration-job, dan worden alle bestanden hernoemd naar een leesbare mapstructuur zoals UPLOAD_LOCATION/library/gebruiker/jaar/maand/bestandsnaam.jpg.
Veelgestelde vragen
Werkt de mobiele app ook als ik niet thuis ben?
Ja, zolang Immich bereikbaar is via een publiek domein of een VPN. De iOS- en Android-apps ondersteunen automatische achtergrondback-up: zodra er nieuwe foto's op het toestel staan, uploadt de app ze. Op iOS moet je achtergrond-app-verversing toestaan; op Android zijn strikte batterij-optimalisatie-instellingen (aanwezig op Samsung en Xiaomi) de meest voorkomende oorzaak van een back-up die stopt. De website dontkillmyapp.com beschrijft per fabrikant hoe je dat oplost.
Hoe zwaar is de machine-learning container op de CPU?
Bij de initiële indexering van een grote bibliotheek kan de ML-container een kern volledig bezetten voor uren. Na die eerste indexering is de belasting minimaal: nieuwe uploads worden individueel verwerkt en duren seconden. Je kunt de concurrency van de ML-worker beperken via de systeeminstellingen als je de machine ook voor iets anders gebruikt.
Kan ik Immich combineren met een NAS?
Ja. Mount het NAS-volume via NFS of SMB op de hostmachine en wijs dat pad toe als UPLOAD_LOCATION in het .env-bestand. Zorg dat de mount stabiel is voordat je de containers start — een onstabiele NFS-mount terwijl de database schrijft, geeft corruptie.
Is Immich stabiel genoeg voor mijn volledige fotobibliotheek?
Versie 2.0 is als stabiele release aangemerkt. Het upgradepad vereist wel aandacht: sla nooit meerdere versies over en lees de releasenotes op breekpunten. Houd altijd een recente databasebackup bij de hand.