Skip to content

Schedule

The Schedule system lets you plan which content plays at specific times. br\u016bhi’s scheduling on Desktop and Cloud are architecturally different but share the same intent: the right content plays at the right time, automatically.

[Screenshot: Desktop horizontal month grid — day rows, 24-hour time axis, coloured blocks, zoom level control, snap interval selector]

The grid shows one row per day, with a horizontal 24-hour time axis (00:00 to 24:00). Scroll vertically to move between days.

Zoom levels: 0.5× | 1× | 2× (default) | 4×. Use higher zoom to place blocks precisely in short time windows.

Snap intervals: 1 min | 5 min (default) | 15 min | 30 min. Drag operations snap to the selected interval.

TypeColourDescription
Audio FileBlueA single audio file plays at the scheduled time
PlaylistPurpleA playlist (regular or smart) loads and starts playing
Live SessionRedMarks a period as a live slot; no automatic content is loaded
  1. Click on an empty area of the grid at the desired start time.
  2. The Quick Add panel opens pre-filled with that date and time.
  3. Choose the block type, enter a label, and select the audio file or playlist.
  4. Click Add to place the block.
  • Move horizontally — Drag the block left/right to change its start time.
  • Move vertically — Drag up/down to move the block to a different day.
  • Resize — Drag the right edge to change the block’s duration.

Blocks snap to the active snap interval during drag operations.

Locked blocks (amber badge) cannot be moved or resized. Lock a block from its detail modal to protect a confirmed broadcast slot.

Click a block to open its detail modal:

  • Label, type, date, times, and duration are displayed.
  • Load to Deck — Immediately loads the block’s content to the active deck.
  • Queue Playlist — Adds the playlist to the current broadcast queue.
  • Lock / Unlock — Protects the block from accidental changes.

Click the day label on the left of the grid to open the Day Overview:

  • Total scheduled blocks
  • Total scheduled hours
  • Available (unscheduled) hours
  • Block list for the day

The Desktop scheduler monitors wall-clock time and fires each block as its scheduled start time arrives. Execution uses the same trigger engine as Automation.

Fire debounce: if a block fires while another block’s action is still executing, the new action is queued and retried after 150 ms. A re-fire guard prevents the same block from firing twice within 1 second.


Each station has a fallback priority chain:

Live WebRTC stream
→ Live harbor input (HTTP push)
→ Scheduled playlist (API-driven)
→ Silence (fallback)

The higher-priority source is always preferred. If a DJ is live, the scheduled playlist pauses. When the DJ disconnects, Liquidsoap automatically falls back to the scheduled playlist.

Create a time-based playlist schedule with the API:

POST /api/stations/{id}/schedule
Content-Type: application/json
{
"playlist_id": "pl_abc123",
"start_time": "08:00",
"end_time": "12:00",
"days": ["monday", "tuesday", "wednesday", "thursday", "friday"]
}

The API generates a Liquidsoap playlist file and signals the station to hot-reload it without restarting the stream.

Time-based automation rules (trigger type: schedule) can trigger source switches at specific times. See Automation.