Skip to content

Features ​

Audio Sources (Radios) ​

See the Audio Sources reference for technical details (architecture, commands, throttling, modes).

KHInsider Radio ​

Play game music from KHInsider playlists via a hidden Electron window.

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

  • Persistent shuffle until manually disabled
  • Watchdog/retry every 5s, stale after 15s
  • Position updates throttled to 3s during stable playback

SMTC (System Media Transport Controls) ​

Read metadata from the active system media player (Spotify, YouTube Music, Tidal…) without OAuth - with direct play/pause/next controls. It is the only external playback source since ADR-012.

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

  • 1000ms polling, suspended when app is inactive or system is sleeping
  • OS-specific implementation (Windows WinRT native via C++/NAPI, Linux MPRIS).
  • Maintainability: SMTC handler utilized factory patterns and refined enumeration logic (SonarCloud optimized).
  • Radio Overlay: one overlay for every music source. Music picks which player feeds it (KHInsider or the system player) and every theme is available on it.
  • Multi-session aware (Windows): enumerates every active media session via GlobalSystemMediaTransportControlsSessionManager.GetSessions() and auto-prefers Spotify when present, so the desktop app is detected even when Windows promotes a browser tab to "current". KHInsider also surfaces here because the hidden window pushes navigator.mediaSession metadata.

Timer ​

Source of truth in the main process (prevents drift between dashboard and overlays).

Commands: start, stop, reset, get_state

  • State persisted in local SQLite
  • Heartbeats throttled to 5s (except on timer end or manual seek)
  • Simultaneous sync: dashboard (IPC) + overlays (WS)

Twitch ​

Commands: connect, disconnect, status, get_profile

  • OAuth PKCE authentication with local callback on 127.0.0.1:47285
  • Access to streamer profile and live status - see the Profile page

Twitch Alerts ​

Highly customizable alerts for follows, subs, raids, and cheers. Build them visually in the Alerts Creator and manage their images in the Assets Manager.

  • Shiny Effects: 20% probability of a "shiny" alert with chromatic aberration, radial rays, and unique sound effects.
  • Dynamic Assets: Automatic asset resolution via STREAMOOS_MANIFEST with cache-busting.
  • Priority Queue: Alerts are queued and played based on priority (Raid > Sub > Follow).

Stream Planning ​

Schedule and manage your Twitch streams directly from the StreamooS dashboard. Segments sync bidirectionally with the Twitch Schedule API.

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

  • 9-week calendar view (4 past + current + 4 future)
  • Create, update, and delete stream segments with title, category, duration, and timezone
  • Recurring weekly streams support
  • Conflict detection between local and Twitch-side changes
  • Category search with Twitch Helix API integration

Discord Rich Presence ​

Commands: connect, disconnect, status

  • Automatically updated from KHInsider metadata
  • Progress timestamps based on app uptime
  • Lazy-loaded discord-rpc

Mobile Remote ​

PWA accessible on the local network via HTTPS (port 8080) with PIN pairing. See Mobile Remote Setup.

Custom Overlays ​

StreamooS supports user-created overlays alongside the built-in ones.

  • Add: import a custom HTML overlay via the dashboard
  • List: view all custom overlays
  • Remove: delete a custom overlay
  • Open: launch a custom overlay in an external window

Custom overlays connect to the same ws://127.0.0.1:8765 endpoint and receive all feature updates.

System Tray ​

StreamooS runs in the background via a system tray icon.

  • Hide to tray on close: Closing the dashboard window hides it to the system tray instead of quitting; a one-shot notification ("StreamooS is running in the background") explains this on first close.
  • Status Indicators: Visual feedback for WebSocket and Remote Control connectivity.
  • Quick Actions: Access to dashboard and application quit.
  • Now Playing: Displays the current track metadata directly in the tray menu.
  • Localized: Menu items in French, English, and German via the main-process i18n loader; the tray refreshes automatically when the user switches language.
  • Graceful shutdown: Single instance lock + per-handler 5s timeout in HandlerRegistry.shutdownAll() ensures every feature (KHInsider window, Twitch EventSub, Remote PWA, WS server, mDNS) is cleanly stopped - ports 8765 / 8080 / 8766 are released immediately so a relaunch never hits EADDRINUSE.

Internationalization (i18n) ​

Languages: French (default), English, German Automatic detection via the browser with user preference persistence.

Overlay Themes ​

The Music overlay (KHInsider and the system player behind one page) and the Timer overlay each support multiple visual themes, configurable from the dashboard or with the set_overlay_config WebSocket command.

OverlayAvailable Themes
Musicstreamoos (default), animal-crossing, retro-rpg, modern-gamer, ghibli, xp, glass, noisy, minimal-dark
Timerstreamoos (default), minimal-dark

Overlays also support configurable position (9 anchor points: top-left, top-center, top-right, middle-left, center, middle-right, bottom-left, bottom-center, bottom-right) and toggles for album art, cover, and progress bar visibility.

Security & Performance ​

MechanismDetail
SandboxingAll Electron windows sandboxed (contextIsolation: true)
IPC Origin VerificationStrict validation of protocol, host, and port for all inbound IPC
IPC Payload ValidationZod-backed schemas for all telemetry and state update IPC channels
CSWH ProtectionWS server validates Origin header (strict allowlist)
Targeted BroadcastingWebSocket server broadcasts only to features the client is subscribed to
XSS SanitizationtextContent / createElement - never innerHTML in overlays
ThrottlingTimer 5s · SMTC 3s · KHInsider 3s
Centralized URL SecurityUnified protocol/domain allowlist and path-traversal guards for all navigations
Navigation LockdownDashboard restricted to the renderer's local URL
Lazy LoadingDiscord RPC instantiated on demand only
Runtime ValidationAll IPC/WS commands validated by Zod schemas
Remote SecurityHTTPS (TLS) + dynamic JWT (safeStorage)
TokenssafeStorage only - never plaintext in SQLite
E2E StabilityStandardized data-testid selectors to bypass hydration/localization flakiness

Released under the MIT License.