Gladys disposera bientôt d’un Photo Widget de dashboard (box.type = 'photo') qui affiche
un diaporama à partir d’une liste d’URLs saisies à la main ({ url, caption }). Les images sont
récupérées via un proxy serveur (GET /api/v1/dashboard/photo/proxy?url=) pour rester
accessible à distance (Gladys Plus).
Objectif : permettre à l’utilisateur d’alimenter automatiquement ce diaporama depuis
un serveur Immich (gestionnaire de photos auto-hébergé).
L’utilisateur connecte son Immich une fois, puis choisit une source dynamique (un album,
ou ses souvenirs « ce jour-là ») ; le widget affiche les photos correspondantes et se
rafraîchit tout seul.
Périmètre v1
Sources : Album au choix + Souvenirs « ce jour-là »
Qualité d’image : preview (~1440px)
Architecture : service Immich complet (page de config + proxy authentifié)
2. L’API Immich — ce qu’elle permet
2.1 Authentification
Toutes les requêtes portent le header x-api-key: <clé>.
La clé se génère dans Immich : Account Settings → API Keys. Permissions minimales
utiles : album.read, asset.read, memory.read.
Base URL = adresse du serveur Immich, ex. http://192.168.1.20:2283. Tous les chemins
ci-dessous sont préfixés par /api.
Point structurant : le proxy actuel de Gladys (dashboard.getPhoto.js) fait un GET sans
header → il ne peut pas parler à Immich. Il faut donc un proxy dédié Immich qui injecte x-api-key et pointe sur la base URL configurée.
2.2 Choisir quelles photos afficher (les sources)
Source
Endpoint
Réponse utile
Liste des albums
GET /api/albums
[{ id, albumName, assetCount, albumThumbnailAssetId, shared }] — sert à peupler le sélecteur d’album
Réponse = flux binaire image/*. Le proxy Immich le convertit au format déjà attendu par
le widget : "<contentType>;base64,<data>".
2.4 Champs d’asset exploitables pour la légende
originalFileName, fileCreatedAt / localDateTime, et exifInfo (description, city, dateTimeOriginal). Permet d’auto-générer une légende (ex. « Rome — 12 août 2019 »).
3. Comportement fonctionnel attendu
3.1 Connexion de l’intégration (une fois)
Nouvelle carte Immich dans la liste des intégrations.
Page de config demandant URL du serveur + clé API.
Bouton « Tester la connexion » → appelle GET /api/albums pour valider URL + clé, et
remonte une erreur claire si échec (URL injoignable, 401 clé invalide).
3.2 Configuration du widget (par l’utilisateur, à l’édition du dashboard)
Le Photo Widget gagne un choix de mode de source :
Immich — Album — un menu déroulant liste les albums (via GET /api/albums) ;
l’utilisateur en choisit un.
Immich — Souvenirs — affiche les photos renvoyées par GET /api/memories
(« il y a X ans, ce jour-là ».
Options existantes conservées et applicables à tous les modes : cadrage (cover/contain),
intervalle de défilement, affichage/masquage des légendes, titre du widget.
Pour les modes Immich, la légende peut être auto-générée depuis les métadonnées de l’asset (date + lieu) plutôt que saisie à la main.
3.3 Affichage (runtime)
À l’ouverture, le widget résout la source Immich en liste d’assets (album ou souvenirs),
puis affiche chaque image en preview via le proxy Immich authentifié.
Diaporama : défilement automatique selon l’intervalle, navigation avant/arrière et
indicateurs (déjà présents dans PhotoBox.jsx).
Cache image en mémoire + préchargement de l’image suivante (déjà présents), réutilisés tels quels.
Rafraîchissement de la liste : la liste d’assets (surtout « souvenirs », qui change
chaque jour) est ré-interrogée périodiquement / au montage du widget, à décider.
3.4 Cas limites & décisions fonctionnelles à valider
Album vide / souvenirs vides du jour → état vide explicite (message), pas d’erreur.
Vidéos dans un album (asset.type = VIDEO) → filtrées (on ne garde que IMAGE) ou
affichage de leur poster ? → à trancher (proposition : ignorer les vidéos en v1).
Gros albums → limiter le nombre d’assets chargés (ex. plafond + éventuel ordre
aléatoire) pour éviter des milliers d’entrées ? → à trancher.
Ordre d’affichage : chronologique (par fileCreatedAt), inverse, ou aléatoire ?
→ à trancher (proposition : plus récent d’abord).
Plafond 5 Mo du proxy : preview reste largement sous la limite, donc conservé. À
revoir seulement si on ajoute le mode « original » ou vidéo plus tard.
La segunda iteración (0.1.2) está lista y probada en mi caso.
Crear una clave API en tu servidor Immich
Completar los campos en la integración externa de Immich
Guardar, probar la conexión y actualizar el diaporama
En la pestaña « descubrimiento », guardar el dispositivo (cambiar su nombre si se desea). Es posible elegir la habitación en la pestaña « Dispositivos »
Hay que añadir una… « cámara Immich » en el dashboard deseado y ¡listo!
¡Lo publico en la tienda, adelante con sus comentarios!
Edición:
Voy a seguir probando, pero creo que tendré un mejor resultado si añado la cámara en el dashboard antes de actualizar el diaporama. Parece que si se actualiza primero, la foto es demasiado grande, mientras que en el sentido contrario, se reduce.
Edición 2: No, es solo que la imagen es muy grande si está en modo retrato…
[2026-08-13T22:03:12.795Z] [ERROR] [immich-slideshow] No se pudo publicar la siguiente diapositiva de Immich EmptyPhotoSourceError: No hay imágenes disponibles en “MonAlbum”.
at ImmichSlideshow.next (file:///app/src/slideshow.js:118:13)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async publishNextSlide (file:///app/src/devices/slideshowCamera.js:61:17)
at async publish (file:///app/src/devices/slideshowCamera.js:118:9) {
code: 'EMPTY_SOURCE'
}
Sin embargo, tengo imágenes en este álbum
Cuando pongo la fuente en « Recuerdos - Ese día » todo funciona correctamente
Otro pequeño problema, no hay portada en la integración
Y si es posible en las mejoras poder agregar varios álbumes - 1 álbum por dispositivo sería genial creo
También he tenido este error:
[2026-08-13T22:09:51.808Z] [ERROR] [immich-slideshow] No se pudo publicar la siguiente diapositiva de Immich Error: publishCameraImage: el tamaño máximo de la imagen es de 153600 bytes (150 KB)
at GladysIntegration.publishCameraImage (/app/node_modules/@gladysassistant/integration-sdk/lib/gladys-integration.js:606:13)
at publishNextSlide (file:///app/src/devices/slideshowCamera.js:63:16)
at async publish (file:///app/src/devices/slideshowCamera.js:118:9)
[2026-08-13T22:10:51.644Z] [INFO] [immich-slideshow] Publicado “20250812_123806_1800.jpeg” de Recuerdos — en este día
Sí, lo sé, pero no entiendo por qué. Cuando lo lanzo en modo desarrollador, lo tengo, pero no en la versión de lanzamiento. Tengo el mismo problema con las otras integraciones desarrolladas o en desarrollo…
Ahora es posible listar los UUID de los 50 últimos álbumes, ¡más práctico! Para ello, una nueva acción está disponible al final de la página de configuraciones.
Atención, ahora es necesario que el asset.read esté marcado en los permisos de la clave API en Immich.
Lo miro esta noche
Y para la portada, quizá funcione la próxima vez, tengo buenas esperanzas
Por fin una imagen de portada (pero… Quizás la modifique en una próxima versión, ya que no es muy legible) Edito: Y además, no es un diaporama de videos. En fin…
En resumen, hay que elegir una carpeta donde se guardarán las fotos y ejecutar el comando de Docker (no me acuerdo exactamente, pero primero hay que descargar un archivo, editarlo y luego ejecutar el comando).
Edición: @mutmut fue más rápido Ya está instalado en mi Beelink S13
Gracias por esta bonita integración
Creo que a largo plazo sería más interesante que el widget de Fotos tenga en cuenta esta fuente de fotos adicionales (en lugar de reutilizar la Cámara).
¿Qué opinas? En ese caso, puedo hacer una solicitud de funcionalidad en el núcleo de Gladys + SDK
Por mi parte, no estoy convencido porque solo hay la posibilidad de configurar un segundo servidor vinculado a un segundo reproductor de diapositivas, pero funciona como se solicitó