Running a continuous broadcast

  1. Sign in at /broadcast/control/ and open Media.
  2. Choose Upload Media, or drop multiple video and audio files onto the library. Leave Add successful uploads to the draft loop automatically checked to build the playlists as files finish. Uncheck it to store files for later reuse. Add all unused media to draft adds library files not already in the current draft.
  3. The upload queue keeps an outcome for each file. A rejected file does not cancel later files. Temporary chunk failures retry automatically; Retry retries an individual failed file. Stop after current file leaves the current file to finish and skips the rest. Keep the tab open until uploads finish.
  4. In Rundown, arrange video/image/text blocks. Use the arrow buttons or drag blocks. Titles and durations are filled from uploaded files. Preview this item jumps to that block; Restart preview starts from the beginning. Editing text or mixer settings does not restart the preview.
  5. In Audio, arrange the independent repeating music playlist. Upload Songs also accepts music in an MP4/M4V/WebM container and uses its sound only. Preview a track with the audio player in its inspector, or use Listen to hear the complete mix.
  6. Save Draft stores the playlists and uploaded metadata without changing the broadcast. Take Preview Live saves the draft and restarts the public loop with it. Open /broadcast/ on the playback device and enable sound once. Existing viewers poll for changes approximately every 12 seconds.

Recovery, editing and large libraries

Unsaved edits are backed up in this browser under your GitHub account. After a refresh, use Restore to Preview to recover them or Discard backup to keep the saved draft. Recovery never changes Program. Review a recovered draft before saving, especially if the saved state changed since the backup. Browser backups are local to this device and can be lost when browser storage is cleared; Save Draft stores your work in the account. Files that have not finished uploading cannot be recovered.

Undo and Redo restore up to 60 recent edit states, including removed or reordered items. Typing is grouped into short edit sequences. The shortcuts are Ctrl/⌘+Z and Ctrl/⌘+Shift+Z outside text fields; inside a text field, the browser retains its normal text undo. These controls change Preview only. They do not undo an upload, delete, or Take Live operation.

The readiness list shows every item with a missing duration or media link. Click an issue to open that item’s inspector. These are configuration checks; use Preview and Listen to check the files and mix before taking the loop live.

The library displays 40 files per page. Search, filtering and sorting cover the entire library. Add all unused media to draft also covers all pages and shows progress; Stop adding after this file keeps the files already added and leaves the rest in the library.

Audio behavior

Master affects video and music. Video controls original clip sound; Music controls the music bed. Duck lowers music to the selected percentage when video sound is enabled; Mute silences the music during that video; Keep playing mixes both. A muted video does not duck the music. Per-video choices override the global setting. Crossfade overlaps adjacent music tracks; fades can also be adjusted per track.

Listen is local monitoring, not a broadcast mute switch. Only one monitor is audible at a time. Browsers may require a click on the player’s sound control before allowing audio. If blocked, that control becomes visible and the dashboard explains what to click.

The public player skips media that fails to load or stalls, continues with available content, and retries failed sources after one minute. If no playable visual items remain, it displays standby while it waits. This is a browser-based loop: keep the playback device awake and connected. Broadcasting to a streaming platform still requires a separate capture/streaming setup.

Validation and deployment

npx playwright test scripts/writer/broadcast-loop.spec.cjs --workers=1 uses a local fixture service, real short audio files, and simulated backend failures. No test publishes media or changes production. node scripts/writer/broadcast-test-server.cjs starts an isolated manual preview at http://127.0.0.1:4190/broadcast/control/.

The site changes deploy through the existing Pages workflow. The Netlify auth bridge must also receive the updated writer-media-library.mjs to return music as well as video. Until that happens, the control room supplements the old video-only response with the public GitHub release index. That fallback is subject to GitHub’s unauthenticated API limits. Existing saved broadcast content is not changed by this code update.