Studio / Docs/ Modular Studio Console
Console & Layout Castium Studio Docs

Modular Studio Console

Managing cards, proportional columns, analog VU meters, and soundboard drops.

Multi-Station Console & Channel Dial Architecture

CASTIUM provides native multi-station radio broadcasting from a single running console instance on a single port. Broadcasters can run multiple concurrent radio stations simultaneously, each with completely isolated audio pipelines, distinct web player front-ends, independent branding, chat rooms, listener request queues, and streaming mounts—with zero virtual audio cables required.


1. Zero-Cable Multi-Station Audio Routing & Independent Internal Players

Traditional broadcast setups require complex matrices of third-party virtual audio cables (e.g. VB-Audio Cable A, B, C) or separate application instances to run multiple streams. When multiple applications share a virtual audio driver, Windows volume mixer attenuation causes capture silence, or both streams mix and bleed together into the output.

CASTIUM completely eliminates this complexity with two flexible routing models:

  1. Dedicated Internal Player Engines (Zero Audio Drivers):

    • Each station pipeline (StationPipeline.Player) has its own independent LocalMusicPlayerService Auto-DJ instance.
    • Music files (MP3, AAC, FLAC, WAV, OGG) are decoded entirely in software memory directly into the station's broadcast stream.
    • Operations are 100% silent in the broadcaster's physical studio/room by default (EnableLocalMonitor = false).
    • Broadcasters can audition or cue any station at any time by toggling 🎧 Monitor in the console header or player cards, routing audio to headphones without affecting listeners.
    • Each station maintains its own independent playlist, shuffle state, crossfade settings, and volume levels without interfering with other stations.
  2. WASAPI Process-Loopback Capture:

    • Individual stations can capture specific running Windows processes (e.g., Spotify, browser, media player) directly via Process ID loopback.
Station Typical Audio Source Ingest Mechanism Example Stream Mount Web Player URL
Station 1 (Root) Built-in Player (Auto-DJ) Software Memory PCM Stream /stream (or /) http://localhost:9696/
Station 2 Built-in Player (Jazz) Software Memory PCM Stream /jazz http://localhost:9696/?station=jazz
Station 3 Spotify Desktop WASAPI Process Loopback (Spotify.exe) /spotify http://localhost:9696/?station=spotify

Each station pipeline runs its own:

  • Dedicated LocalMusicPlayerService with independent playlists, volume, and cue monitoring.
  • Dedicated BroadcastHub tracking client connections and listeners.
  • Dedicated AudioDuckingMixer mixing the station's audio source with optional live DJ microphone ducking.
  • Dedicated MultiFormatTranscoder encoding on-the-fly to MP3, AAC, Opus, or lossless FLAC.
  • Dedicated SongRequestController, LiveChatService, SongReactionService, and SongHistoryService.

2. Dedicated Console Cards & Settings

CASTIUM includes modular dashboard cards specifically tailored for multi-station operations:

  • Multi-Station Network & Channels (card-station-manager):

    • Displays a live network overview of all configured stations.
    • Shows real-time listener counts, on-air indicators, and direct mount URLs.
    • One-click copy for stream URLs (e.g., http://localhost:9696/jazz).
    • Set Primary / Root Station designation.
    • Direct on-air toggles per channel.
  • Station Audio & Encoder Settings (card-station-settings):

    • Configure individual station names, genre tags, and mount paths.
    • Select audio source type (BuiltInPlayer, ProcessLoopback, VirtualAudioCable, DefaultAudioDevice).
    • Per-station audio encoders (MP3, AAC, FLAC) and bitrates (128 kbps to 320 kbps).
    • Feature toggles for per-station live chat, listener song requests, and reactions.
  • Scoped Playback & Playlist Cards (card-console-player, card-playlist-manager):

    • Each card reflects the currently selected station from the Station Switcher Bar or card header dropdown.
    • Broadcasters can manage distinct playlists and load different music crates for Station 1, Station 2, etc. simultaneously.
    • Headphone cue monitoring toggle (🎧 Monitor) allows private listening to verify mixes before airing.

3. Console Station Switcher Tab Bar

In the CASTIUM Dashboard, a persistent Station Switcher Bar sits directly beneath the top header:

  • Station Tabs: Each tab displays a live status dot (🟢 ON AIR / gray OFFLINE), the station's display name, a ROOT badge for the primary station, and its URL mount path (e.g., /stream, /jazz).
  • Independent On-Air Controls: Broadcasters can start or stop individual stations independently via the ON AIR / GO LIVE button on each tab, or use the global master transmitter control.
  • Context-Sensitive Cards: Clicking a station tab switches the active editing context of all console cards (Audio Routing, Web Branding, Song Requests, Live Chat, Queue, Console Player, and Settings).
  • Add Station Modal: Broadcasters can add unlimited new stations with custom display names, URL mount paths, and audio sources.

4. Web Player Channel Dial

Listeners browsing the CASTIUM Web Player get an interactive, real-time Channel Dial in the top navigation bar:

  • Dynamic Discovery (/api/stations): On page load, the web player queries /api/stations to fetch all available stations, their live transmission statuses, current listener counts, genres, themes, and stream URLs.
  • 1-Click Channel Surfing: Clicking any channel pill in the dial smoothly hot-swaps the audio stream, reconnects Server-Sent Events (SSE), and updates branding, track metadata, chat messages, and reactions without page reloads.
  • Direct Link Support: Listeners can bookmark or share direct links with the ?station= query parameter (e.g. http://castium.net:9696/?station=jazz) or direct media player mounts (e.g. http://castium.net:9696/jazz in VLC, Winamp, or mobile apps).
  • Primary / Root Station Access: The designated root station is accessible directly at the root URL http://castium.net:9696/ and /stream, making it the default entry point for any incoming listener.

5. Multi-Mount HTTP & SSE API Routing

All stations share the same configured HTTP port (default: 9696) using path and query-based routing:

  • Audio Streams: GET /{mount} or GET /{mount}.mp3 (e.g., /stream, /jazz, /rock).
  • Root Stream: GET /stream automatically routes to the designated primary/root station.
  • Server-Sent Events (SSE): GET /api/events?station={mount} or GET /api/{mount}/events.
  • Branding: GET /api/branding?station={mount} or GET /api/{mount}/branding.
  • Chat & Moderation: GET /api/chat?station={mount} & POST /api/chat?station={mount}.
  • Reactions: GET /api/reactions?station={mount} & POST /api/reactions?station={mount}.
  • Song Requests: POST /api/requests?station={mount}.
  • Station Directory: GET /api/stations (JSON array of all configured stations).
  • PWA Manifests: GET /manifest.webmanifest?station={mount} (dynamic, station-scoped Web App Manifest).

6. Dynamic Station-Scoped PWA Mobile Web Apps

Each station functions as an independent Progressive Web App (PWA) on iOS and Android:

  • Isolated App Identity (id): The server dynamically generates distinct W3C Web App Manifests per station (/pwa/{mount}), preventing mobile operating systems from overwriting different stations under the same origin.
  • Dedicated Start URLs: When a user adds a channel to their home screen (e.g. from ?station=vault), the mobile app launches in fullscreen standalone mode directly into that station's stream and chat room (/?station=vault).
  • Independent Home Screen Icons & Names: Each station displays its own custom station name, icon/logo, and theme accent color on the listener's phone home screen.
  • Side-by-Side Installation: Listeners can install multiple stations from the same broadcaster (e.g., Main Station, Smooth Jazz, and Classic Rock) as separate apps side-by-side on their home screen.