Immich Kiosk
Transform your TV/iPad/Android/Fridge/Browser etc... into a Slideshow
Installation Complète sur DietPi
Raspberry Pi Zero 2 W – Affichage HDMI en Mode Kiosk
Documentation officielle du setup Immich Kiosk
🧩 Introduction
Ce guide détaille l’installation complète d’un écran Immich Kiosk sur un Raspberry Pi Zero 2 W avec DietPi, en utilisant :
-
Immich Kiosk (backend)
-
Chromium en mode Kiosk (frontend)
-
Démarrage automatique plein écran
-
Résolution HDMI 1080p
-
Masquage du curseur
🧩 Préparation de l’image DietPi
Télécharger l’image pour Raspberry Pi Zero 2 W :
👉 DietPi – Raspberry Pi ARMv8 / ARM64
https://dietpi.com/
Flasher la carte SD avec Balena Etcher ou Raspberry PI Imager.
🧩 Configuration avant premier boot
Les fichiers suivants sont à modifier sur la partition /boot/.
✔ dietpi.txt
AUTO_SETUP_LOCALE=fr_FR.UTF-8
AUTO_SETUP_KEYBOARD_LAYOUT=fr
AUTO_SETUP_TIMEZONE=Europe/Paris
AUTO_SETUP_NET_ETHERNET_ENABLED=0
AUTO_SETUP_NET_WIFI_ENABLED=1
AUTO_SETUP_NET_WIFI_COUNTRY_CODE=FR
AUTO_SETUP_NET_USESTATIC=0
AUTO_SETUP_BOOT_WAIT_FOR_NETWORK=1
✔ dietpi-wifi.txt (entrée 0)
aWIFI_SSID[0]='Thymon 2,4Ghz'
aWIFI_KEY[0]='ReseauThymon13'
aWIFI_KEYMGR[0]='WPA-PSK'
🧩 Premier démarrage du Raspberry Pi
Le système configure automatiquement :
-
langue
-
clavier
-
WiFi
-
SSH
Ensuite, on se connecte via SSH pour poursuivre l’installation.
ssh root@IP
🧩 Installation de Chromium en mode Kiosk
Installer Chromium :
dietpi-software install 113
Configurer le mode autostart :
dietpi-autostart
Choisir :11 : Chromium Kiosk Mode
Définir l’URL à afficher :http://127.0.0.1:300
🧩 Configuration de l’affichage HDMI (1080p)
Modifier la résolution HDMI dans :
sudo nano /boot/config.txt
Ajouter :
hdmi_force_hotplug=1
hdmi_group=1
hdmi_mode=16
disable_overscan=1
Configurer Chromium pour 1080p :
sudo nano /boot/dietpi.txt
Définir :
SOFTWARE_CHROMIUM_RES_X=1920
SOFTWARE_CHROMIUM_RES_Y=1080
🧩 Ajustement du script Chromium Autostart
Éditer :
sudo nano /var/lib/dietpi/dietpi-software/installed/chromium-autostart.sh
Remplacer par :
#!/bin/dash
RES_X=$(sed -n '/^[[:blank:]]*SOFTWARE_CHROMIUM_RES_X=/{s/^[^=]*=//p;q}' /boot/dietpi.txt)
RES_Y=$(sed -n '/^[[:blank:]]*SOFTWARE_CHROMIUM_RES_Y=/{s/^[^=]*=//p;q}' /boot/dietpi.txt)
cat > /tmp/xinitrc.tmp << 'EOF'
#!/bin/dash
unclutter -idle 0 -root &
exec "$@"
EOF
chmod +x /tmp/xinitrc.tmp
CHROMIUM_OPTS="--kiosk --no-memcheck --window-size=${RES_X:-1280},${RES_Y:-720} --window-position=0,0"
URL=$(sed -n '/^[[:blank:]]*SOFTWARE_CHROMIUM_AUTOSTART_URL=/{s/^[^=]*=//p;q}' /boot/dietpi.txt)
FP_CHROMIUM=$(command -v chromium-browser)
[ "$FP_CHROMIUM" ] || FP_CHROMIUM=$(command -v chromium)
STARTX='xinit'
[ "$USER" = 'root' ] || STARTX='startx'
exec "$STARTX" /tmp/xinitrc.tmp "$FP_CHROMIUM" $CHROMIUM_OPTS "${URL:-https://dietpi.com/}"
🧩 Installation d’Immich Kiosk (backend)
Télécharger le binaire ARM64 :
wget https://github.com/damongolding/immich-kiosk/releases/latest/download/immich-kiosk_Linux_arm64.tar.gz
Extraire :
tar -xzf immich-kiosk_Linux_arm64.tar.gz
Créer le dossier config :
mkdir -p /root/config
wget -O /root/config/config.yaml https://raw.githubusercontent.com/damongolding/immich-kiosk/refs/heads/main/config.example.yaml
Modifier le fichier config.yaml :
nano /root/config/config.yaml
Exemple :
immich_url: "https://MON_IP_IMMICH:2283"
immich_api_key: "CLE_API_IMMICH"
🧩 Création du service systemd Immich Kiosk
Créer le fichier :
sudo nano /etc/systemd/system/immich-kiosk.service
Ajouter :
[Unit]
Description=Immich Kiosk
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=2
User=root
WorkingDirectory=/root
ExecStart=/root/immich-kiosk --config /root/config/config.yaml
Environment=HOME=/root
[Install]
WantedBy=multi-user.target
Activer le service :
sudo systemctl daemon-reload
sudo systemctl enable immich-kiosk
sudo systemctl start immich-kiosk
🧩 Vérifications finales
Immich Kiosk tourne :
systemctl status immich-kiosk
Port 3000 ouvert :
ss -tulnp | grep 3000
Test local :
curl http://127.0.0.1:3000
Reboot final :
reboot
Après redémarrage, l’écran HDMI affichera Immich Kiosk plein écran 1080p, sans curseur.
🎉 Fin du guide
Tu disposes maintenant d’un setup stable, automatique et optimisé pour diffuser les photos Immich sur un écran dédié.
Réglages complets de config.yaml
Tous les paramètres expliqués
1. Paramètres requis
-
immich_api_key: « clé API » du serveur Immich. -
immich_url: URL de ton serveur Immich, ex :"http://192.168.1.10:2283".
Remarque : seules ces deux valeurs sont absolument obligatoires pour que le Kiosk fonctionne. Immich Kiosk
nano /root/config/config.yaml
2. Horloge / Date
| Paramètre | Valeur par défaut | Description |
|---|---|---|
show_time |
false |
Afficher l’heure à l’écran |
time_format |
24 |
Format 12 ou 24 heures |
show_date |
false |
Afficher la date |
date_format |
YYYY/MM/DD |
Format de la date |
clock_source |
client |
Source de l’heure : client ou autre |
3. Comportement du Kiosk (Kiosk behaviour)
| Paramètre | Valeur | Description |
|---|---|---|
duration |
60 |
Temps d’affichage de chaque image (secondes) |
disable_screensaver |
false |
Empêcher l’écran de s’éteindre ou de se mettre en veille |
optimize_images |
false |
Redimensionner les images pour correspondre à l’écran pour de meilleures performances |
use_gpu |
true |
Utiliser l’accélération GPU si disponible |
4. Sources d’actifs / filtres
| Paramètre | Description |
|---|---|
show_archived |
Autoriser les médias “archivés” à être affichés |
people |
Liste d’IDs de personnes à afficher |
require_all_people |
Si true, n’affiche que les médias qui contiennent toutes les personnes listées |
excluded_people |
Liste de personnes à exclure |
albums |
Liste d’IDs d’albums à afficher |
album_video |
false ou true : afficher les vidéos des albums |
album_order |
random, newest ou oldest : ordre d’affichage des albums |
excluded_albums |
IDs d’albums à exclure |
dates |
Plages de dates au format "YYYY-MM-DD_to_YYYY-MM-DD" |
tags |
Liste de tags à inclure |
excluded_tags |
Liste de tags à exclure |
excluded_partners |
IDs de partenaires à exclure |
memories |
false ou true : afficher la section “souvenirs” |
5. Interface utilisateur (UI)
| Paramètre | Valeur par défaut | Description |
|---|---|---|
disable_ui |
false |
Cacher tous les éléments UI (horloge/date/…) |
frameless |
false |
Enlever les bordures et coins arrondis autour de l’image |
frame_padding |
0 ou [top, right, bottom, left] |
Marges autour de l’image |
hide_cursor |
false |
Cacher le curseur souris |
font_size |
100 |
Taille de police (en pourcentage) |
background_blur |
true |
Flouter l’arrière-plan de l’image actuelle |
background_blur_amount |
10 |
Intensité du flou |
theme |
fade ou solid |
Thème visuel |
layout |
single, splitview, splitview-landscape, portrait, landscape |
Disposition de l’affichage |
6. Transition & affichage des images
| Paramètre | Valeur | Description |
|---|---|---|
transition |
none, fade, cross-fade |
Type de transition entre images |
fade_transition_duration |
1 (s) |
Durée pour fade |
cross_fade_transition_duration |
1 (s) |
Durée pour cross-fade |
show_progress_bar |
false |
Afficher ou non une barre de progression |
image_fit |
none, contain, cover |
Comment l’image remplit l’écran |
image_effect |
none, zoom, smart-zoom |
Effet visuel appliqué à l’image |
image_effect_amount |
120 |
Intensité de l’effet |
use_original_image |
false |
Utiliser l’image originale sans optimisation |
7. Métadonnées des images
| Paramètre | Description |
|---|---|
show_owner |
Afficher le propriétaire de l’image |
show_album_name |
Afficher le nom de l’album |
show_person_name |
Afficher le nom de la personne identifiée |
show_person_age |
Afficher l’âge de la personne |
show_image_time |
Afficher l’heure de la prise de vue |
image_time_format |
12 ou 24 heures |
show_image_date |
Afficher la date de prise |
image_date_format |
Format de date |
show_image_description |
Afficher la description de l’image |
show_image_exif |
Afficher les données EXIF (focale, ISO, etc.) |
show_image_location |
Afficher le lieu de prise |
hide_countries |
Liste de pays à exclure de l’affichage |
show_image_id |
Afficher l’ID de l’image |
show_more_info |
Afficher un overlay “plus d’infos” sur l’image |
show_more_info_image_link |
Mettre un lien vers l’image originale |
show_more_info_qr_code |
Afficher un QR code vers l’image originale |
like_button_action |
Action du bouton “J’aime” : album, favorite, ou les deux |
hide_button_action |
Action du bouton “Masquer” : tag, archive, ou les deux |
8. Fonction météo (Weather feature)
| Paramètre | Description |
|---|---|
weather: |
Liste d’objets météo : • name: nom de la ville • lat, lon: coordonnées • api: clé API OpenWeatherMap • unit: metric ou imperial • lang: langue • forecast: false ou true |
9. Iframes / contenu externe
| Paramètre | Description |
|---|---|
iframe: |
Liste d’URLs ou de chemins d’accès local à intégrer Ex : - https://example.com/page ou - ./local.html |
10. Multi-utilisateurs / webhooks / mode hors ligne
| Paramètre | Description |
|---|---|
immich_users_api_keys: |
Map utilisateur → clé API (permet plusieurs utilisateurs) |
show_user |
Afficher le nom de l’utilisateur courant |
offline_mode: |
Objet : enabled, number_of_assets, max_size, parallel_downloads, expiration_hours Permet d’utiliser le Kiosk hors connexion |
kiosk: |
Sous-objet non modifiable via URL : • port : port d’écoute (ex : 3000) • behind_proxy : `true |
11. Sleep mode (mode veille)
Le sleep mode permet de rendre le cadre photo inactif sur une plage horaire (ex : la nuit). Quand il est actif, l’écran devient noir (et peut afficher une horloge/date très discrète si show_time ou show_date est activé).
Important : pour activer le mode veille, il faut définir
sleep_startetsleep_end. Le format est en 24h : soit l’heure (22,7), soit HHmm (1332,1508). Pour éviter les surprises YAML, tu peux écrire les heures entre guillemets (ex."07").
| Paramètre | Valeur par défaut | Description |
|---|---|---|
sleep_start |
(non défini) |
Heure de début du mode veille (24h : 22 ou 1332). |
sleep_end |
(non défini) |
Heure de fin du mode veille (24h : 7 ou 1508). |
sleep_icon |
true |
Afficher une icône pendant le mode veille. |
sleep_dim_screen |
false |
Dim l’écran pendant le sleep mode (fonctionne uniquement avec Fully Kiosk Browser). |
disable_sleep |
false |
Permet de bypass le sleep mode (pratique pour tester). Peut aussi se faire via l’URL. |
🧪 Exemple (veille de 22:00 à 07:00)
# Sleep mode
sleep_start: "22"
sleep_end: "07"
# Optionnel
sleep_icon: true
sleep_dim_screen: false
disable_sleep: false
🧷 Astuce test rapide (bypass via URL)
http://{URL_DU_KIOSK}?disable_sleep=true
Note : sleep_dim_screen nécessite Fully Kiosk Browser (version Pro) et l’option “Enable JavaScript Interface”.
📝 Exemple complet minimal
immich_api_key: "TON_API_KEY"
immich_url: "http://192.168.1.10:2283"
# Horloge
show_time: true
time_format: 24
show_date: true
date_format: YYYY/MM/DD
# Kiosk behaviour
duration: 45
disable_screensaver: true
optimize_images: true
use_gpu: true
# Sources d’actifs
albums:
- "ALBUM_ID_1"
people:
- "PERSON_ID_1"
tags:
- "famille"
# UI / image
layout: single
theme: fade
image_fit: cover
hide_cursor: true
frameless: true
# Métadonnées
show_album_name: true
show_person_name: true
show_image_date: true
image_date_format: DD/MM/YYYY
# Kiosk interne
kiosk:
port: 3000
cache: true
prefetch: true
ℹ️ Bonnes pratiques
-
Garder le fichier
config.yamlà jour et sauvegardé. -
Pour tester un réglage, relancer le service :
systemctl restart immich-kiosk -
Vérifier toujours la page :
curl http://127.0.0.1:3000pour s’assurer que le backend répond.