Guide technique
Cette page s'adresse aux utilisateurs avancés et aux intégrateurs : comment Tune est construit, son API et les détails d'exploitation. Pour les réglages courants, voir Configuration.
Architecture
- Serveur : un seul programme,
tune-server, écrit en Rust. Il indexe la bibliothèque, décode l'audio, pilote les appareils et sert l'interface web, l'API et les flux audio, le tout sur un même port (8888 par défaut). - Interface web : une application Svelte servie par le serveur (dossier
web/à côté du programme, ouTUNE_WEB_DIR). - Base de données : SQLite par défaut ; PostgreSQL en option (voir Configuration). Les migrations s'appliquent au démarrage.
- Décodage : décodeurs intégrés (Symphonia, plus des décodeurs WavPack et APE propres à Tune, et libopus). Le rééchantillonnage se fait par interpolation sinc (rubato). La lecture ne passe pas par ffmpeg ; un ffmpeg minimal est fourni avec les versions publiées, uniquement pour l'encodage AAC du convertisseur.
- Découverte : SSDP pour DLNA/UPnP, mDNS pour AirPlay et Chromecast, découverte Squeezebox sur UDP 3483.
- Tune se présente aussi lui-même au réseau comme serveur multimédia UPnP (sa bibliothèque est visible des applications de contrôle DLNA) et, zone par zone, comme renderer UPnP.
API HTTP
Toutes les routes sont sous /api/v1. Une liste des routes au format JSON est servie par GET /api/v1/system/api-docs (lien Documentation API dans Réglages › Système › À propos). Tune ne fournit pas de description OpenAPI.
| Route | Rôle |
|---|---|
GET /api/v1/system/health | État du serveur : ok ou degraded (HTTP 200), error (HTTP 503) |
GET /api/v1/system/version | Version du serveur |
GET /api/v1/system/stats | Statistiques (route utilisée par le contrôle de santé de l'image Docker) |
POST /api/v1/system/scan, GET /api/v1/system/scan/status | Lancer un scan, suivre son avancement |
GET /api/v1/system/logs?lines=N | Dernières lignes du journal (1000 par défaut) |
GET /api/v1/system/diagnostics/bundle | Archive de diagnostic |
GET /api/v1/zones | Liste des zones |
GET /api/v1/zones/{id}/status | État de lecture d'une zone |
POST /api/v1/zones/{id}/play, /pause, /resume, /stop, /next, /previous, /seek, /volume | Commandes de lecture |
GET /api/v1/zones/{id}/queue | File d'attente |
GET /api/v1/search | Recherche dans la bibliothèque et les services |
GET /api/v1/library/albums, /artists, /tracks | Bibliothèque |
Les événements en temps réel (lecture, file, scan…) passent par un WebSocket sur /ws (ou /api/v1/ws). Les anciennes routes /api/scan sans v1 n'existent plus.
Authentification
Elle est désactivée par défaut : l'API est alors ouverte à tout le réseau local. Elle s'active par l'API (/api/v1/auth/config) : les comptes sont les profils Tune, les mots de passe sont hachés en Argon2, et les sessions sont des jetons JWT de 24 heures. Un jeton d'API longue durée s'obtient par POST /api/v1/auth/token. Les en-têtes acceptés sont Authorization: Bearer <jeton> et Authorization: ApiKey <clé>. Même avec l'authentification active, /system/health et /system/version restent publics. Tune ne fournit pas de HTTPS : placez un proxy inverse devant lui si vous en avez besoin.
Compatibilité Squeezebox / LMS
- Serveur SlimProto intégré sur le port 3483 (TCP et UDP, réglable par
TUNE_SLIMPROTO_PORT), pour Squeezelite et les lecteurs Squeezebox. - Port de commande texte compatible LMS sur 9090 (
TUNE_CLI_PORT), qui passe au port libre suivant si 9090 est pris.
Exploitation
- Paquet .deb : programme dans
/opt/tune/, données dans/var/lib/tune/, configuration dans/etc/default/tune-server(conservée lors des mises à jour), unitétune-server.servicesous l'utilisateurtune.apt purgene supprime jamais/var/lib/tune. - Docker : image
renesenses/tune(amd64, arm64). Elle tourne sous l'utilisateur non roottune(uid 1000), avec les volumes/dataet/music. Elle n'inclut ni les sorties audio locales ni PostgreSQL. Sur arm64, AirPlay 2 n'est pas disponible et Tune utilise AirPlay 1. - Tune OS : base Fedora. Programme dans
/opt/tune, servicetune, données dans/opt/tune/data, port 80 redirigé vers 8888, SSH actif (connexion root refusée). - Journal :
RUST_LOGpermet un filtrage fin par module.
Voir aussi
- Configuration : variables, ports, emplacements
- OAAT : le protocole de Tune
- Raccourcis clavier