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 :


🧩 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 :

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

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_start et sleep_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