# Intégration externe - Subsonic

**URL:** <https://community.gladysassistant.com/t/integration-externe-subsonic/10762>\
**Category:** Développement\
**Tags:** integration-externe\
**Created:** [Août 29, 2026, 9:24 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762 "2026-08-29T21:24:55Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![guim31](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/guim31/32/4840_2.png) [@guim31](https://community.gladysassistant.com/u/guim31)\
**Post date:** [Août 29, 2026, 9:24 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/1 "2026-08-29T21:24:55Z")

</div>

![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/d/e/de22f1618bad64c4b5ff456d8c8ecdae79706bce.jpeg)

# [Intégration] Subsonic — reliez Gladys à votre serveur musical (Navidrome, Airsonic…)

Bonjour à tous 👋

Je viens de publier **Subsonic** , une intégration externe qui relie Gladys à n’importe quel serveur musical implémentant l’[API Subsonic](https://www.subsonic.org/pages/api.jsp) : **Navidrome** , Airsonic-Advanced, Gonic, LMS, Subsonic…

Mon besoin de départ était simple : que Gladys sache ce qui se passe sur mon instance Navidrome, et puisse déclencher de la musique depuis mes scènes. Elle est développée et testée d’abord contre Navidrome, mais rien n’y est spécifique à ce serveur.

🔗 **Dépôt : [GitHub - guim31/gladys-subsonic · GitHub](https://github.com/guim31/gladys-subsonic)**

* * *

## Ce que ça apporte

### Appareil « Subsonic server » — 6 capteurs

| Capteur | Ce qu’il donne |
| --- | --- |
| **Now playing** | Le morceau en cours, au format `Artiste — Titre (auditeur)` |
| **Album cover** | La pochette de l’album écouté, rafraîchie à chaque changement de morceau |
| **Active streams** | Combien de morceaux sont écoutés en ce moment |
| **Songs / Artists / Albums in library** | La taille de votre bibliothèque |

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/b/7/b7b797a25b03024ba52f9978df36735d666d25c3.png)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/4/e/4e01b5ff0891142064c55bfb1ff10f828f5a9463.jpeg)

#### Afficher la pochette sur le tableau de bord

La pochette emprunte le canal image de Gladys : ajoutez un widget **Caméra** et choisissez l’appareil « Subsonic server ». Le nom du widget surprend au premier abord, mais c’est le seul de Gladys qui affiche l’image d’un appareil et se met à jour en direct. Le widget **Photo** , lui, n’accepte qu’une liste d’URL figées saisies à la main : il ne peut pas suivre ce qui joue.

### Appareil « Subsonic jukebox » (optionnel)

Pilotage de la lecture **côté serveur** (fonction jukebox de l’API) : lecture/pause, précédent/suivant, volume et état de lecture. À activer explicitement, côté Gladys **et** côté serveur. Le widget **Musique** du tableau de bord pilote directement ces commandes.

### Boutons dans l’écran de configuration

- **Tester la connexion** — affiche l’identité du serveur (ex. `navidrome 0.63.2`, API 1.16.1)
- **Scanner la bibliothèque musicale**
- **Jukebox : lecture aléatoire** (N morceaux au hasard)
- **Jukebox : jouer une playlist** (par son nom)

* * *

## Quelques idées de scènes

- **Ne pas déranger** : si `Active streams > 0`, ne pas lancer l’aspirateur ou couper les enceintes.
- **Réveil en musique** : à 7 h, l’action « jouer une playlist » lance votre playlist du matin sur le jukebox.
- **Réagir au morceau** : le capteur « Now playing » est une feature texte, et Gladys déclenche ses scènes sur le changement de sa valeur — vous pouvez donc faire réagir votre installation à **chaque nouveau morceau** (afficher le titre, ajuster les lumières…).
- **Tableau de bord** : la pochette en grand (widget Caméra), le titre en cours et les commandes du jukebox côte à côte.

* * *

## Installation

**Prérequis : Gladys 4.86.0 ou plus.**

Depuis **Intégrations → Installer une intégration** , cherchez « Subsonic » dans le catalogue.

Ensuite, dans l’onglet **Configuration** :

1. **URL du serveur** : la racine, sans `/rest` — ex. `http://192.168.1.10:4533` (port par défaut de Navidrome).
2. **Utilisateur** / **Mot de passe** : un compte de votre serveur (créez-en un dédié si possible).
3. **Méthode d’authentification** : laissez **Jeton**. Le mot de passe ne transite jamais, seul un hachage md5 salé est envoyé. Basculez sur **Legacy** uniquement pour un serveur très ancien (API \< 1.13) ou un compte LDAP qui refuse le jeton.
4. Cliquez sur **Tester la connexion** , puis récupérez l’appareil dans l’onglet **Découverte**.

### Pour le jukebox

Il joue la musique **sur la machine qui héberge le serveur** (celle reliée à vos enceintes). Il faut l’activer des deux côtés — dans Navidrome :

```toml
[Jukebox]
Enabled = true

```

(ou `ND_JUKEBOX_ENABLED=true`), puis cocher **Activer l’appareil jukebox** dans la configuration de l’intégration.

* * *

## Ce que ça ne fait pas (pour éviter les malentendus)

Autant être clair sur les limites, qui viennent de l’API Subsonic elle-même :

- **Le jukebox joue sur l’hôte du serveur** , pas sur la machine de Gladys : ce n’est pas une solution multiroom.
- **Impossible de piloter un autre client** (votre téléphone, le lecteur web) : l’API ne permet pas de commander la lecture d’un client tiers.
- **Pas d’annonce vocale** via cette intégration : l’action « Jouer une notification » de Gladys envoie une URL audio TTS, or le jukebox Subsonic ne sait jouer que des morceaux de la bibliothèque. Ça reste le terrain de Sonos / Chromecast.

* * *

## Côté technique

Construite à partir du [template officiel JavaScript](https://github.com/GladysAssistant/integration-template-js) et du SDK `@gladysassistant/integration-sdk`. Node 24 Alpine, image multi-arch (amd64 + arm64), rootfs en lecture seule, tests unitaires et CI (Prettier / ESLint / tests) sur chaque commit. Licence Apache-2.0.

Petit soin particulier sur les requêtes envoyées au serveur : la liste complète des artistes n’est relue que lorsque la bibliothèque a changé (signature de scan) ou une fois par heure, au lieu d’être retéléchargée à chaque relevé — les valeurs restent pourtant publiées à chaque cycle. La pochette suit la même logique : elle n’est téléchargée que lorsque le morceau change, et dans la plus grande taille qui tienne sous la limite du canal image.

* * *

Les retours, remontées de bugs et idées de fonctionnalités sont les bienvenus, ici ou dans les issues du dépôt. Si vous l’essayez avec autre chose que Navidrome, ça m’intéresse beaucoup de savoir si tout se comporte bien 🙂

---

<div class="post-metadata">

**Author:** ![Tolkyen](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/t/ba8739/32.png) [@Tolkyen](https://community.gladysassistant.com/u/Tolkyen)\
**Post date:** [Août 31, 2026, 12:43 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/2 "2026-08-31T12:43:03Z")

</div>

Bonjour @guim31 , je voulais savoir comment lier LMS dont je dispose avec ton intégration. Ma configuration LMS ne nécessite pas d’authentification et c’est obligatoire dans l’intégration. Y-a-t-il une solution ?

---

<div class="post-metadata">

**Author:** ![guim31](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/guim31/32/4840_2.png) [@guim31](https://community.gladysassistant.com/u/guim31)\
**Post date:** [Août 31, 2026, 12:55 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/3 "2026-08-31T12:55:11Z")

</div>

Salut @Tolkyen 👋

Bonne nouvelle : ça devrait fonctionner sans rien changer, mais il faut passer par une **clé d’API**.

Ce n’est pas l’intégration qui est trop exigeante : le protocole Subsonic transporte des identifiants dans _chaque_ requête, il n’a tout simplement pas de mode « sans authentification ». Et côté LMS (si c’est bien Lightweight Music Server que tu utilises), c’est encore plus net — sa [documentation](https://github.com/epoupon/lms/blob/master/SUBSONIC.md#authentication) précise que son API Subsonic accepte **uniquement** l’authentification par clé d’API, indépendamment du fait que ton interface web ne te demande rien.

Concrètement :

1. Dans LMS, ouvre la page **Settings** de ton utilisateur et **génère une clé d’API**.
2. Dans la configuration de l’intégration Gladys :
  - **Utilisateur** : ton identifiant LMS
  - **Mot de passe** : la **clé d’API** (et non un mot de passe de compte)
  - **Méthode d’authentification** : laisse **Jeton**

3. Clique sur **Tester la connexion**.

J’ai vérifié dans le code de LMS : avec la méthode Jeton, il calcule le hachage salé de chacune des clés d’API de ton utilisateur et les compare à celui qu’on envoie — donc le schéma par défaut de l’intégration convient. Si jamais ça coince, bascule sur **Legacy** , LMS gère aussi ce format.

Un point d’attention quand même : je n’ai testé que Navidrome. Le jukebox notamment risque de se comporter différemment — LMS a sa propre implémentation. Ton retour m’intéresse beaucoup, tu serais le premier sur LMS 🙂

---

<div class="post-metadata">

**Author:** ![Tolkyen](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/t/ba8739/32.png) [@Tolkyen](https://community.gladysassistant.com/u/Tolkyen)\
**Post date:** [Août 31, 2026, 4:30 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/4 "2026-08-31T16:30:58Z")

</div>

Je comprends d’où vient mon problème, quand j’ai lu LMS, j’ai compris Logitech Media Server et non Lightweight Music Server 😅

---

<div class="post-metadata">

**Author:** ![guim31](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/guim31/32/4840_2.png) [@guim31](https://community.gladysassistant.com/u/guim31)\
**Post date:** [Août 31, 2026, 4:59 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/5 "2026-08-31T16:59:13Z")

</div>

Ah mince… en effet ça ne pouvait pas fonctionner, Logitech Media Server n’est pas basé sur l’API Subsonic ! Va falloir que tu demandes une intégration pour toi 😉

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [Septembre 1, 2026, 11:55 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/6 "2026-09-01T11:55:48Z")

</div>

Hello,

Merci pour cette intégration  
Je suis en train de l’installer avec un serveur navidrome  
J’ai donc créé un utilisateur dédié  
La connexion est ok mais j’ai un message d’erreur sur le scan :

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/c/f/cf306dd2779b1b85cd2ddf5a3f806f0c4cdbf423.png)

J’ai créé un utilisateur classique sans droit administrateur  
J’ai peut-être raté un truc mais je vois pas quoi 😅

J’ai testé via la méthode Jeton et Legacy et j’ai le même résultat

Merci

---

<div class="post-metadata">

**Author:** ![guim31](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/guim31/32/4840_2.png) [@guim31](https://community.gladysassistant.com/u/guim31)\
**Post date:** [Septembre 1, 2026, 6:50 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/7 "2026-09-01T18:50:03Z")

</div>

Salut @prohand, merci pour le retour 🙂

`startScan` est le seul endpoint utilisé par l’intégration que **Navidrome réserve aux administrateurs** (c’est codé en dur dans son routeur Subsonic). Ton utilisateur dédié étant un compte standard, Navidrome refuse l’opération — d’où l’erreur 50. C’est d’ailleurs pour ça que Jeton et Legacy donnent le même résultat : l’authentification passe très bien (ton « Tester la connexion » est vert), c’est l’autorisation qui bloque, et la méthode d’authentification n’y change rien.

Deux options :

- **Ne rien faire** — c’est ce que je recommande. Ce bouton n’est qu’un raccourci de confort : Navidrome scanne déjà tout seul (selon sa planification et sa surveillance des dossiers), et les capteurs de l’intégration suivront au relevé suivant. Aucune autre fonctionnalité n’a besoin des droits admin.
- **Passer ce compte en administrateur** dans Navidrome, si tu tiens à déclencher le scan depuis Gladys.

Tout le reste fonctionne parfaitement avec un compte standard : les capteurs, le morceau en cours, la pochette d’album, et même le jukebox (là, c’est `Jukebox.Enabled` côté serveur qui compte, pas les droits admin).

Le vrai défaut ici est de mon côté : le message s’affiche en vert, comme un succès, alors que c’est un refus — et il n’explique pas la cause. Je vais corriger ça pour qu’il apparaisse clairement comme une erreur, avec la raison. Merci de l’avoir signalé !

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [Septembre 1, 2026, 6:56 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/8 "2026-09-01T18:56:01Z")

</div>

Merci pour le retour  
Je viens de vérifier et effectivement je vois bien mon serveur 🙂

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/8/c/8cb27b049256c14f9a3d4ec80c63fec7225cecf3.png)

Merci 😉

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [Septembre 1, 2026, 7:08 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/9 "2026-09-01T19:08:46Z")

</div>

Je ne sais pas si c’est un bug ou normal mais je viens d’arrêter la musique côté Navidrome et il m’indique qu’il y a toujours une musique en cours d’écoute

---

<div class="post-metadata">

**Author:** ![guim31](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/guim31/32/4840_2.png) [@guim31](https://community.gladysassistant.com/u/guim31)\
**Post date:** [Septembre 1, 2026, 7:48 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/10 "2026-09-01T19:48:45Z")

</div>

Pour la musique qui reste affichée : ce n’est pas un bug, c’est le fonctionnement de la liste « en cours de lecture » de Navidrome. Une session y est conservée après l’arrêt — 30 minutes si le lecteur a signalé la pause ou l’arrêt, sinon jusqu’à la fin théorique du morceau, car le protocole Subsonic classique n’a pas de notion d’« arrêt » : un client se contente de ne plus rien demander.

Mais je ne tirais pas parti d’une information que Navidrome fournit : l’état réel de chaque session. C’est corrigé dans la prochaine version — seules les sessions réellement en lecture sont désormais comptées, donc ton arrêt sera pris en compte au relevé suivant (60 s max).

Il restera un cas irréductible : un lecteur qu’on ferme sans qu’il prévienne le serveur reste listé jusqu’à la fin du morceau. Là, personne ne peut faire mieux.

Et j’ai aussi corrigé le message du scan : il s’affiche maintenant en rouge, avec l’explication (droits administrateur) plutôt qu’un code d’erreur brut. Merci pour ces deux retours!! 🙂

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [Septembre 1, 2026, 8:00 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/11 "2026-09-01T20:00:09Z")

</div>

Merci pour les corrections ☺

---

<div class="post-metadata">

**Author:** ![guim31](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/guim31/32/4840_2.png) [@guim31](https://community.gladysassistant.com/u/guim31)\
**Post date:** [Octobre 6, 2026, 6:59 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/12 "2026-10-06T06:59:07Z")

</div>

🎵 **Subsonic 1.1.0 est disponible** , avec trois **widgets de tableau de bord** : **En écoute** (qui écoute quoi, avec les pochettes), **Jukebox** (une vraie télécommande : lecture/pause, précédent, suivant, aléatoire) et **Bibliothèque** (morceaux, artistes, albums, état du dernier scan et bouton Scanner). Plus besoin de passer par le widget Caméra pour afficher une pochette !

⚠ Cette version demande **Gladys 5.1 minimum** : mettez d’abord Gladys à jour, sinon la mise à jour de l’intégration ne vous sera pas proposée.

La mise à jour se fait dans **Intégrations** ; vos appareils et vos scènes ne changent pas. @prohand, un retour de ton Navidrome serait le bienvenu 🙂

---

<div class="post-metadata">

**Author:** ![prohand](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/prohand/32/15713_2.png) [@prohand](https://community.gladysassistant.com/u/prohand)\
**Post date:** [Octobre 8, 2026, 11:17 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/13 "2026-10-08T11:17:57Z")

</div>

De mon côté je n’utilise pas le mode jukebox donc je ne pourrai pas remonter des choses de ce coté là.  
Par contre au niveau du widget d’écoute je vois le nom de l’application qui est en ecoute :

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/7/c/7c6a0598955152bd8b11701d23c7360ddeecfcd6.png)  
Je ne sais pas si à la place ou rajouter on peut mettre le nom de la personne qui ecoute.

Edit : Je vois dans les logs que le nom de l’utilisateur remonte donc il doit y avoir une possibilité 😅

Merci 😉

---

<div class="post-metadata">

**Author:** ![guim31](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/guim31/32/4840_2.png) [@guim31](https://community.gladysassistant.com/u/guim31)\
**Post date:** [Octobre 9, 2026, 5:15 UTC](https://community.gladysassistant.com/t/integration-externe-subsonic/10762/14 "2026-10-09T17:15:41Z")

</div>

Subsonic 1.1.1 est disponible : le badge du widget « En écoute » affiche maintenant la personne qui écoute, et le lecteur (Symfonium, etc.) apparaît d’un clic sur la ligne. Merci pour l’idée 👍
