La Darkvalley Show Control Suite est née d'un constat de terrain : dans un lieu immersif, chaque métier a son logiciel, chacun a sa console, son port, sa logique, et personne n'a de vue d'ensemble. L'idée était d'écrire cinq outils qui se ressemblent assez pour qu'on n'ait à apprendre qu'une seule interface.
Ce qui continue
La Suite est arrêtée, il n'y a rien à essayer ici. Son sixième produit, lui, a continué hors d'elle : Whisperwood, le narrateur invisible, toujours en développement et en ligne.
Développement arrêté. Les cinq logiciels sont en cours de remplacement par du matériel choisi et intégré plutôt qu'écrit. Cette page est gardée comme archive : elle dit ce que la Suite a prouvé, et ce qui en reste.
Une architecture commune
Les cinq produits ne partagent pas seulement une charte graphique : ils partagent des invariants d'exploitation, écrits une fois et tenus partout. C'est ce qui rend la Suite installable par la même personne, sur la même machine, sans documentation par produit.
Côté technique, une base unique : React 18, Vite et TypeScript pour les interfaces, Python et FastAPI pour les moteurs, des services systemd, et une bibliothèque de composants partagée entre les cinq.
Les quatre invariants
Un seul tableau de bord par logiciel, un seul port, jamais deux interfaces parallèles : les sections sont des onglets, pas des adresses.
Chaque moteur écoute sur 127.0.0.1 ; nginx sert l'interface,
filtre le réseau local et injecte le jeton. Le moteur n'est jamais exposé.
Les composants d'interface et les briques communes vivent dans un seul paquet : on corrige une fois, les cinq produits en bénéficient.
Chaque produit sait se mettre à jour seul, avec vérification de signature et redémarrage propre côté systemd.
Sentry Watch, la vigie
Hématite · supervisionSentry Watch surveille tout le reste. Il interroge les autres produits et les machines du lieu, relève leur santé, et prévient avant que la salle ne s'en aperçoive : service tombé, latence qui dérive, processeur qui chauffe.
Son mode kiosque est pensé pour un écran de régie qui reste allumé, avec une alerte sonore : un écran de supervision que personne ne regarde ne sert à rien.
- Interface
- nginx, port 8080
- Agent
- Python,
127.0.0.1:3002 - Rôle
- Interrogation des services, alertes, disponibilité sur 24 h, kiosque de régie
- Mise à jour
- Archive signée, refusée si la signature manque

Obsidian Forge, la forge
Obsidienne acajou · automatismesObsidian Forge parle aux machines du décor. C'est le pont entre le monde du spectacle (OSC) et le monde industriel (Modbus) : il interroge des automates, expose leurs états, déclenche des actions, et rend le tout lisible en temps réel.
C'est le produit qui a le plus tourné en conditions réelles, et celui qui a servi de banc d'essai à tous les invariants de la Suite.
- Interface
- nginx, port 80
- Moteur
- FastAPI,
127.0.0.1:8888 - Protocoles
- OSC · Modbus TCP · WebSocket temps réel
- Mise à jour
- Échange de moteur signé, sauvegarde automatique

Flint Sound Engine, le son
Silex · audio réseauFlint joue le son d'un lieu sans machine de lecture dédiée. Le moteur gère les lecteurs, les sorties, les niveaux, et diffuse en AES67 sur le réseau audio de l'installation.
Piloté en OSC, il s'insère dans une conduite existante au lieu de la remplacer.
- Interface
- nginx, port 1881
- Moteur
- FastAPI,
127.0.0.1:8765 - Audio
- AES67, démon local lié à la boucle locale
- Mise à jour
git fetchet vérification de la signature du commit

Hyalite ArtNet, la lumière
Hyalite UV · éclairageLa même grammaire, appliquée à la lumière : univers ArtNet et DMX, patch, états, déclenchements.
Le produit existe à l'état de squelette V1 : interface et authentification sont en place, la logique ArtNet ne l'est pas. Le développement s'est arrêté avant.
- Interface
- nginx, port 1882
- Moteur
- FastAPI,
127.0.0.1:8889 - Cible
- ArtNet et DMX512 : univers, patch, conduites
- État
- Squelette V1 · métier non développé

Iolite Motion, le mouvement
Iolite · animatroniqueLe mouvement de décor : axes, servos, animatroniques, séquences. Iolite devait accueillir la brique de perception, LiDAR et vision, pour faire réagir un décor à la présence des visiteurs.
Comme Hyalite, il est resté au stade du squelette V1 : la coquille est là, le moteur ne l'est pas.
- Interface
- nginx, port 1883
- Moteur
- FastAPI,
127.0.0.1:8890 - Cible
- Axes, servos, séquences · perception en V2
- État
- Squelette V1 · métier non développé

Pourquoi ça s'arrête
La Suite a prouvé ce qu'elle devait prouver : qu'on peut tenir cinq produits sur une seule architecture, un seul canal de mise à jour et une seule grammaire d'interface. Elle a aussi montré ses limites : trois des cinq produits n'apportaient pas assez face à ce que fait déjà du bon matériel.
Le développement est donc arrêté. Les logiciels sont remplacés par du matériel choisi et intégré plutôt qu'écrit. Ce qui reste de la Suite n'est pas perdu pour autant : c'est même ce qui avait le plus de valeur.
- Les invariants d'exploitation. Moteur local, nginx devant, mise à jour signée : ils survivent au code qui les portait.
- La grammaire d'interface. La refonte et la bibliothèque de composants partagée, réemployées telles quelles sur les outils clients.
- La Mineral Heraldry. Cinq sigils générés puis retouchés à la main, qui restent l'identité visuelle de la maison.
- Whisperwood. Le sixième produit, le narrateur invisible, continue sa route hors de la Suite.
