Skip to content

Grab the Mic: live human handoff via Liquidsoap harbor input #533

Description

@genwave-radio

🎤 What

A community member goes live on the station: the on-duty persona introduces them ("we've got a guest in the booth"), the engine switches to their live audio, and when they're done the persona reclaims the air with a back-announce. Radio's soul is liveness — this is the feature that makes the station a stage, not just a speaker.

🔧 Mechanics

  • Engine side: Liquidsoap input.harbor — built for exactly this. Live source with the playout queue as fallback; switch with crossfade; auto-reclaim after N seconds of silence or an explicit release.
  • v1 keeps it honest (KISS): the harbor speaks the icecast source protocol, so v1 can be "point BUTT/Mixxx/OBS at this URL with this token" — which is precisely the workflow the target user (the nerdy tech guy DJ-ing for the friend group) already knows. Browser capture (getUserMedia → Opus → gateway) is a v2 rider, not a prerequisite.
  • Handoff choreography: mic request → persona intro queued at next break → harbor goes live → on release/silence, persona back-announce ("that was Dave, live in the booth"). The intro/outro copy rides the existing patter pipeline.

🔐 Auth

Admin-granted, time-boxed mic tokens. Never open; off by default, and doubly so under SpectatorMode (an open live-input on a public station is a gh-#75-grade hole). Token = who + until-when, revocable from the admin UI.

📏 Sizing

Engine change is small (harbor + switch + silence detector); the token/UI work is the bulk. P3 — sits naturally after the voice epic.

Freaky Friday 2026-08-14 — pitched by ATLAS; Dean: niche but real ("for friends getting together, or the one nerdy tech guy in the friend group… I get that").

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low priorityenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions