Déployez Immich en un clic
Vos photos et vidéos, sauvegardées depuis votre téléphone, avec recherche intelligente, visages et albums
Une alternative auto-hébergée à Google Photos et iCloud Photos.
Qu’est-ce que Immich ?
Immich est une bibliothèque de photos et de vidéos auto-hébergée, que l’on fait tourner à la place de Google Photos ou d’iCloud Photos. Ses applications pour iPhone et Android sauvegardent la pellicule en arrière-plan, et la page web comme les applications montrent tout sur une seule chronologie, avec des albums, des favoris, une archive, une carte de l’endroit où chaque photo a été prise et des souvenirs du même jour les années précédentes.
L’apprentissage automatique, qui tourne dans Immich sans rien envoyer à un service cloud, trouve les personnes sur vos photos et regroupe leurs visages, lit le texte dans les images et fait marcher la recherche intelligente, qui retrouve une photo à partir de mots comme « chien sur une plage ». Immich conserve les fichiers RAW, les Live Photos et les photos animées, partage des albums ou des liens avec qui vous voulez et, avec le « Partage avec les partenaires », laisse une autre personne voir votre bibliothèque. Chaque personne sur le serveur a son propre compte.
Ce template fait tourner le serveur d’Immich, son apprentissage automatique, Valkey et son PostgreSQL avec les extensions vectorielles qu’il lui faut, sa bibliothèque dans un volume. L’administrateur est créé à partir de l’e-mail et du mot de passe que vous indiquez avant qu’Immich ne réponde à qui que ce soit, et les liens partagés prennent l’adresse du projet. Immich demande au moins 6 GB de mémoire et 2 cœurs, il tient donc dans l’offre Grow ; vos photos occupent le disque, alors surveillez sa taille à mesure que la bibliothèque grandit.
Hébergement de Immich sur Pethost
- Vous vous connectez à Pethost avec une clé d’accès, GitHub ou Google. Pas encore de machine ? Vous choisissez une offre, et le lien attend qu’elle soit prête.
- Nouveau projet s’ouvre sur Immich. Vous remplissez ce qu’il demande et cliquez sur Créer le projet : E-mail, Mot de passe administrateur.
- En une minute ou deux, Immich tourne à sa propre adresse en HTTPS. Ses secrets sont créés au hasard, et ses données sont dans la sauvegarde nocturne.
- C’est un projet comme les autres : vous ou votre agent pouvez le modifier, revenir à une version précédente ou le restaurer.
Questions sur Immich
Immich est-il gratuit ?
Oui. Immich est open source sous licence AGPL-3.0, et ses créateurs disent que toutes ses fonctions sont gratuites pour toujours, sans rien derrière un paywall. Pour soutenir le projet, vous pouvez l’acheter pour vous ou pour un serveur, ce qui ne débloque rien de plus.
Comment sauvegarder les photos de mon téléphone dans Immich ?
Installez l’application Immich depuis l’App Store ou Google Play, indiquez l’adresse de votre Immich comme « URL du point d’accès au serveur », connectez-vous et activez la « Sauvegarde » pour les albums que vous choisissez. L’application envoie les nouvelles photos et vidéos en arrière-plan, et ignore ce qui s’y trouve déjà.
Immich reconnaît-il les visages ?
Oui. Son apprentissage automatique, qui tourne dans Immich et n’envoie vos photos nulle part, détecte les visages sur chaque photo et les regroupe dans « Personnes », où vous leur donnez un nom. Il lit aussi le texte dans les images, et sa recherche intelligente trouve des photos d’après ce qu’elles montrent.
De combien de mémoire et de disque Immich a-t-il besoin ?
Immich demande au moins 6 GB de mémoire et 2 cœurs, et prend ici environ 1,5 GB au repos, environ 2,5 GB pendant que l’apprentissage automatique traite de nouvelles photos, et davantage au premier envoi, quand il télécharge ses modèles. Le disque contient vos originaux plus les miniatures et les vidéos transcodées : prévoyez donc plus que la taille de la bibliothèque elle-même.
Immich est-il sûr pour l’unique copie de mes photos ?
Immich lui-même conseille une sauvegarde 3-2-1 des photos auxquelles vous tenez : trois copies, sur deux types de support, dont une ailleurs. Pethost sauvegarde les volumes du projet chaque nuit, et Immich fait aussi lui-même des dumps de sa base de données ; gardez quand même les originaux à un autre endroit.
De combien de mémoire et de disque Immich a-t-il besoin ?
Immich prend environ 1,5 GB de mémoire au repos avec sa base de données et l’apprentissage automatique, environ 2,5 GB pendant qu’il traite de nouvelles photos, et davantage au premier envoi, quand il télécharge ses modèles ; le disque, c’est votre bibliothèque plus ses miniatures et ses vidéos. Sur Pethost, l’offre Grow lui suffit, avec de la place pour d’autres applications à côté.
Le fichier Docker Compose de Immich
Le template, c’est ce compose.yaml et les variables écrites dans le .env du projet à sa création. Pethost exécute le fichier tel qu’il est écrit.
Conteneurs : immich-server (ghcr.io/immich-app/immich-server:v3), immich-machine-learning (ghcr.io/immich-app/immich-machine-learning:v3), redis (valkey/valkey:9), database (ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0).
Volumes, dans la sauvegarde nocturne : library, db, model-cache.
services:
immich-server:
image: ghcr.io/immich-app/immich-server:v3
restart: unless-stopped
environment:
DB_HOSTNAME: database
DB_USERNAME: postgres
DB_PASSWORD: ${DB_PASSWORD}
DB_DATABASE_NAME: immich
REDIS_HOSTNAME: redis
TZ: ${TZ:-Etc/UTC}
URL: ${URL}
ADMIN_EMAIL: ${ADMIN_EMAIL}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
# A new Immich makes whoever opens it first its administrator. So its first start runs it on
# port 2284, which nobody reaches, signs the administrator up there with the email and password
# given, and sets the address shared links use; only then does Immich answer on 2283.
command:
- |
set -e
if [ ! -f /data/.pethost-admin ]; then
# In a process group of its own, so that its workers stop with it.
IMMICH_PORT=2284 setsid start.sh &
setup=$$!
SETUP_PID=$$setup node -e '
const base = "http://127.0.0.1:2284/api";
const { URL: url, ADMIN_EMAIL: email, ADMIN_PASSWORD: password } = process.env;
const json = { "content-type": "application/json" };
const call = async (path, options) => {
const response = await fetch(base + path, options);
if (!response.ok) throw new Error(path + ": " + response.status + " " + (await response.text()));
return response.json();
};
const setUp = async () => {
const { isInitialized } = await call("/server/config");
if (isInitialized) return;
const name = email.split("@")[0];
await call("/auth/admin-sign-up", { method: "POST", headers: json, body: JSON.stringify({ email, password, name }) });
const { accessToken } = await call("/auth/login", { method: "POST", headers: json, body: JSON.stringify({ email, password }) });
const headers = { ...json, authorization: "Bearer " + accessToken };
const config = await call("/system-config", { headers });
config.server.externalDomain = url;
await call("/system-config", { method: "PUT", headers, body: JSON.stringify(config) });
};
(async () => {
let failure;
for (let i = 0; i < 300; i++) {
// Immich stops if it cannot start: the container starts again and so does this.
try {
process.kill(Number(process.env.SETUP_PID), 0);
} catch {
process.exit(1);
}
try {
return await setUp();
} catch (error) {
failure = error;
await new Promise((done) => setTimeout(done, 1000));
}
}
console.error(failure);
process.exit(1);
})();
'
kill -- -$$setup
wait $$setup || true
while kill -0 -- -$$setup 2>/dev/null; do sleep 1; done
touch /data/.pethost-admin
fi
unset ADMIN_PASSWORD
exec start.sh
volumes:
- library:/data
depends_on:
redis:
condition: service_started
database:
condition: service_healthy
# Its first start makes the database and the administrator before it answers on 2283.
healthcheck:
test: ["CMD-SHELL", "immich-healthcheck"]
interval: 30s
start_period: 10m
start_interval: 5s
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:v3
restart: unless-stopped
volumes:
- model-cache:/cache
redis:
image: valkey/valkey:9
restart: unless-stopped
healthcheck:
test: redis-cli ping | grep -q PONG || exit 1
database:
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: immich
POSTGRES_INITDB_ARGS: --data-checksums
shm_size: 128mb
volumes:
- db:/var/lib/postgresql/data
volumes:
library:
db:
model-cache:
Aussi dans Médias
- OwncastVidéo en direct et chat sur votre propre page
- NavidromeUn serveur de musique qui diffuse votre propre collection
- RomMUne bibliothèque et un lecteur dans le navigateur pour vos jeux rétro
- KomgaUn serveur et une liseuse web pour vos BD, mangas et livres numériques
- LycheeUne galerie pour téléverser, classer et partager vos photos
- AudiobookshelfVotre propre serveur de livres audio et de podcasts : écoutez dans le navigateur ou les applis, avec la progression gardée d’un appareil à l’autre