Skip to content

Fonctionnalités ​

Radios et sources audio ​

Voir la page dédiée aux radios pour le détail technique (architecture, commandes, throttling, modes).

KHInsider Radio ​

Lecture de musique de jeux depuis KHInsider via une fenêtre Electron cachée.

Commandes : play, pause, next, shuffle, volume, get_state, activate, deactivate, diagnostic

  • Shuffle persistant jusqu'à désactivation manuelle
  • Watchdog/retry toutes les 5s, stale après 15s
  • Updates de position throttlées à 3s pendant la lecture stable

SMTC (System Media Transport Controls) ​

Lecture des métadonnées du lecteur système actif (Spotify, YouTube Music, Tidal…) sans OAuth - contrôles directs play/pause/next. C'est la seule source de lecture externe depuis l'ADR-012.

Commandes : start_monitoring, stop_monitoring, get_state, play, pause, next, previous

  • Polling 1000ms, suspendu si l'app est inactive ou le système en veille
  • Implémentation spécifique à l'OS (Windows SMTC natif via C++/NAPI, Linux MPRIS)
  • Overlay Radio : un seul overlay pour toutes les sources musicales. Musique choisit le lecteur qui l'alimente (KHInsider ou le lecteur système) et tous les thèmes y sont disponibles.
  • Multi-sessions (Windows) : énumère toutes les sessions média actives via GlobalSystemMediaTransportControlsSessionManager.GetSessions() et préfère Spotify automatiquement, donc le client desktop est détecté même quand Windows promeut un onglet navigateur en "current". KHInsider apparaît aussi ici car la fenêtre cachée pousse les métadonnées navigator.mediaSession.

Timer ​

Source de vérité dans le main process (évite la dérive entre dashboard et overlays).

Commandes : start, stop, reset, get_state

  • État persistant en SQLite locale
  • Heartbeats throttlés à 5s (sauf fin de timer ou saut manuel)
  • Sync simultanée dashboard (IPC) + overlays (WS)

Twitch ​

Commandes : connect, disconnect, status, get_profile

  • Authentification OAuth PKCE avec callback local sur 127.0.0.1:47285
  • Acces au profil streameur et statut du live, voir la page Profil

Twitch Alerts ​

Alertes hautement personnalisables pour les follows, subs, raids et cheers. Construis-les visuellement dans le Créateur d'alertes et gère leurs images dans la Médiathèque.

  • Effets Shiny : 20% de probabilité d'une alerte "shiny" avec aberration chromatique, rayons radiaux et effets sonores uniques.
  • Assets Dynamiques : Résolution automatique des assets via STREAMOOS_MANIFEST avec cache-busting.
  • File d'attente prioritaire : Les alertes sont mises en attente et jouées selon leur priorité (Raid > Sub > Follow).

Planification de streams ​

Planifie et gere tes streams Twitch directement depuis le dashboard StreamooS. Les segments se synchronisent de maniere bidirectionnelle avec l'API Twitch Schedule.

Commandes : planning:sync, planning:get_weeks, planning:create, planning:update, planning:delete, twitch:search_categories

  • Vue calendrier sur 9 semaines (4 passees + courante + 4 futures)
  • Creation, modification et suppression de segments avec titre, categorie, duree et fuseau horaire
  • Support des streams recurrents hebdomadaires
  • Detection de conflits entre modifications locales et cote Twitch
  • Recherche de categories via l'API Twitch Helix

Discord Rich Presence ​

Commandes : connect, disconnect, status

  • Presence mise a jour automatiquement depuis les metadonnees KHInsider
  • Timestamps de progression bases sur l'uptime de l'application
  • Chargement differe de discord-rpc

Telecommande Mobile ​

PWA accessible sur le reseau local via HTTPS (port 8080) avec PIN pairing. Voir Setup telecommande.

Overlays personnalises ​

StreamooS supporte l'importation d'overlays personnalises en plus des overlays integres.

  • Ajouter : importer un overlay HTML personnalise via le dashboard
  • Lister : voir tous les overlays personnalises
  • Supprimer : retirer un overlay personnalise
  • Ouvrir : lancer un overlay personnalise dans une fenetre externe

Les overlays personnalises se connectent au meme endpoint ws://127.0.0.1:8765 et recoivent toutes les updates de features.

Barre système (Tray) ​

StreamooS fonctionne en arrière-plan via une icône dans la barre système.

  • Fermeture → tray : fermer la fenêtre dashboard la masque vers le tray au lieu de quitter l'app ; une notification one-shot ("StreamooS tourne en arrière-plan") explique le pattern au premier close.
  • Indicateurs de statut : Feedback visuel pour la connectivité WebSocket et Télécommande.
  • Actions rapides : Accès au dashboard et fermeture de l'application.
  • Lecture en cours : Affiche les métadonnées du morceau actuel directement dans le menu contextuel.
  • Localisé : Menu en Français, Anglais et Allemand via le loader i18n côté main ; le tray se rafraîchit automatiquement au changement de langue.
  • Shutdown propre : Single instance lock + timeout 5s par handler dans HandlerRegistry.shutdownAll() garantissent que chaque feature (fenêtre KHInsider, EventSub Twitch, PWA remote, serveur WS, mDNS) est arrêtée proprement - les ports 8765 / 8080 / 8766 sont libérés immédiatement, donc un relaunch ne tombe jamais sur EADDRINUSE.

Internationalisation (i18n) ​

Langues : Français (défaut), Anglais, Allemand Détection automatique via le navigateur avec persistance du choix.

Themes d'overlay ​

L'overlay Musique (KHInsider et le lecteur systeme derriere une seule page) et l'overlay Timer supportent plusieurs themes visuels, configurables depuis le dashboard ou avec la commande WebSocket set_overlay_config.

OverlayThemes disponibles
Musiquestreamoos (defaut), animal-crossing, retro-rpg, modern-gamer, ghibli, xp, glass, noisy, minimal-dark
Timerstreamoos (defaut), minimal-dark

Les overlays supportent egalement une position configurable (9 points d'ancrage : top-left, top-center, top-right, middle-left, center, middle-right, bottom-left, bottom-center, bottom-right) et des toggles pour la pochette, le cover, et la barre de progression.

Securite et Performance ​

MécanismeDétail
SandboxingToutes les fenêtres Electron sandboxées (contextIsolation: true)
IPC Origin VerificationOrigine vérifiée pour tous les handlers IPC critiques
CSWH ProtectionServeur WS valide l'en-tête Origin (allowlist stricte)
XSS SanitizationtextContent / createElement - jamais innerHTML dans les overlays
ThrottlingTimer 5s · SMTC 3s · KHInsider 3s
Navigation LockdownDashboard limité à l'URL locale du renderer
Lazy LoadingDiscord RPC instancié à la demande uniquement
Validation RuntimeToutes les commandes IPC/WS validées par des schémas Zod
Sécurité RemoteHTTPS (TLS) + JWT dynamique (safeStorage)
TokenssafeStorage uniquement - jamais en clair dans SQLite

Released under the MIT License.