Skip to content

Add an agentic live station with synchronized music and DJ streams - #28

Open
Popidge wants to merge 1 commit into
omacom:mainfrom
Popidge:codex/agentic-live-radio
Open

Add an agentic live station with synchronized music and DJ streams#28
Popidge wants to merge 1 commit into
omacom:mainfrom
Popidge:codex/agentic-live-radio

Conversation

@Popidge

@Popidge Popidge commented Sep 4, 2026

Copy link
Copy Markdown

NOTE - this PR was written on my behalf by GPT-6-Astra, including the video demo. I've added some further, handwritten notes in a comment below

This adds a shared live producer and presenter around Omarchy Radio's existing community music. The current player, on-demand tracks, attribution, explicit labels and contribution workflow remain in place. DJ presentation applies only to live radio.

The browser receives two synchronized MP3 stems. Turning the DJ off removes speech and presentation ducking without seeking the music. Choosing a playlist track leaves the station; returning to live rejoins its current programme.

Broadcast behaviour

  • The server commits the music clock before writing links. Catalogue changes take effect after the announced horizon.
  • Separate producer, presenter and grounding calls use attributed source briefs and recent editorial memory. Research tools cover official releases, maintainer updates, community sources and optional X accounts.
  • Exact audio hashes bind reviewed cues, sections, vocal boundaries and word-level lyric timestamps to recordings. Unknown cues stay closed.
  • Rendered TTS is measured before admission. Deadlines, vocal guards and cadence checks run outside the model. Music continues through editorial and TTS failures.
  • Prerecorded idents, a jingle and a 30-second instrumental bed demonstrate station furniture. Runtime generation is limited to presentation speech; catalogue songs stay unchanged.

Fits the current serving arrangement

Keep GitHub Pages for the site and nginx on the existing stream host. The included companion service supplies /api/station, paired MP3 audio, statistics, and a continuous mixed /omarchy/stream with ICY metadata for conventional clients. Audio stays at 128 kbps MP3 / 44.1 kHz.

Compose, reverse-proxy locations, provider configuration and local rehearsal commands are included. This needs one persistent volume and one station writer, with no database, broker or frontend build system. The static site retains its existing stream until station-config.js is explicitly configured.

Demo and validation

Watch the recorded demo. Run notes and transcript.

The show runs in real time with recorded public source excerpts arriving at predetermined times. Models and TTS run live; the idents, jingle and bed are prerecorded. The edit removes music between presentation windows. Source fixtures are disclosed, and no successful prerecorded presenter links replace failed outputs.

40 automated tests cover timing, cue overruns, source grounding, provider failures, paired publication, restart recovery, synchronization, mute behaviour, catalogue updates, CORS, and actual MP3/ICY output. Local browser checks cover MP3 decoding, split frontend/backend origins, live-only controls and return to live. A small concurrent delivery check confirms listeners receive the same programme and audio objects.

Not yet validated: the maintainers' private nginx/CLIAMP deployment, sustained production load, and a physical mobile/Safari browser matrix. Docker configuration is included, but this development account cannot access the Docker daemon, so no container runtime validation is claimed. Semantic grounding remains probabilistic; the model choice and editorial policy need ongoing evaluation. Existing tracks have no reviewed talkover cues, so the recorded demonstration uses guarded junctions.

I don't expect this to be merged as-is. I'm happy to work on it with you and iterate, or for you to take the parts you find useful and implement the idea in your own way. The aim is to show what a capable live producer and presenter could add to the existing radio, while keeping its identity and music intact.

@Popidge

Popidge commented Sep 4, 2026

Copy link
Copy Markdown
Author

Just as a bit of background - I have a broadcast background - have worked as a producer for BBC Local Radio here in the UK, as well as producer, presenter and tech guy at various community and student radio projects over the years. Only a few days ago, I started building a genuinely live agentic radio station, with zero pre-made music - everything live, music generated by your prompts, professional-level presentation and live reactivity. (demo at https://youtu.be/iBidOZ-P3rI?si=dBuRxSILgJoDaqk1)

I'm a keen omarchy user for the past year, plugin maker and semi-pro X-yapper at anyone who mentions omarchy, so when I saw this, i thought "omarchy radio could really do with an agentic dj, huh, if only i had one of those lying around that i've just poured lots of hours and tokens into...".

Just as I made that decision, i got gpt-6-astra access. It handled porting over my agentic DJ to the current omarchy radio surface. It also made that video demo, which I would have cut differently, but you do you i guess, AGI!

So yeah. happy to talk this through, help integrate, build out, maintain, whatever. Plenty of edges to iron out (teaching the tts model to pronounce omarchy, for one!), this is an "intersecting passions" project for me, not just a drive-by PR dump with inflated expectations!

@Popidge
Popidge marked this pull request as ready for review September 4, 2026 21:57
@Popidge

Popidge commented Sep 4, 2026

Copy link
Copy Markdown
Author

Also, in terms of AI models used in this, the demo uses GPT-Luna for LLM and elevenlabs for tts, just because that's what my prior project used. These are easy enough to interchange, as long as they're suitably quick and high-enough quality. Specifically for TTS, Speechify SImba 3.2 is significantly cheaper, low latency and scores better on artificialanalysis, so would be worth a look.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant