Original Reddit post

Disclosure: I’m the creator of AI Stereo. Demo: https://radio.ai-stereo.com/ AI Stereo is an always-on internet radio station where AI DJs host themed shows, each with their own personality and genre focus, and interact with listeners via live chat. Technical breakdown: The station runs autonomously 24/7 with a rotating schedule of shows like Sunrise Signal and Midday Mosaic, each tied to a distinct DJ persona. Every DJ has a unique personality defined through system prompts — voice, style, and genre knowledge are all shaped by prompt engineering. DJ scripts and live chat responses are powered by Claude (called via the CLI). Speech is rendered using Microsoft Edge TTS. Music is sourced from tracker module files (.xm format) — classic demoscene/chiptune music — converted to MP3 on the fly using openmpt123 and ffmpeg. Show scheduling is driven by a time-of-day-based config with support for day-specific overrides (e.g., special weekend shows). No cron jobs — the engine checks the current time against the schedule and rotates accordingly. The frontend is Next.js (React 19, TypeScript, Tailwind) with a custom audio player featuring a spectrum visualizer, equalizer, sleep timer, and listening history. Audio streaming uses a playlist-based approach — the browser fetches tracks sequentially from an API, with DJ segments interleaved every few tracks. There’s also an Icecast stream powered by a separate Python engine for traditional internet radio clients. The UI theme shifts colors dynamically based on which show is currently airing. Listener chat is moderated with a content filter and rate limiting. The DJ actually reads and responds to messages — unread listener messages get pooled and addressed in the next DJ segment, so it feels like a real call-in show. Limitations: DJ chat can hallucinate — it might reference songs or artists that don’t exist, or make up facts about the music it’s playing. The music library is tracker modules, so genre depth is limited to what’s available in that format. There’s no skip or search — it’s radio, you get what you get. DJ segment generation has a cooldown and takes a few seconds, so there’s a slight gap between tracks. Mobile background playback can be finicky. And since it’s a solo project, uptime depends on my infrastructure staying healthy. Lessons learned: The call-in mechanic was an accident. I originally had the DJ doing monologues between tracks, but it felt dead. Pooling unread chat messages and having the DJ address them in the next segment turned it into something that actually feels alive — people stick around to hear if the DJ responds to them. Tracker modules were the right constraint. I initially wanted to use AI-generated music, but the quality wasn’t consistent enough and licensing was murky. Demoscene .xm files are free, sound great, and have a massive back catalog. The constraint ended up giving the station its identity. Making it feel like radio is harder than making it work like radio. The streaming part was straightforward. The hard part was pacing — getting the ratio of music to DJ talk right, making transitions feel natural, and making the DJ sound like it has opinions rather than just narrating metadata. Solo infrastructure is humbling. There’s no failover. If my server hiccups at 3 AM, the station goes silent and nobody pages me. I’ve learned to build in graceful recovery, but “always on air” is a promise your uptime has to keep. Happy to answer any technical questions.​​​​​​​​​​​​​​​​ submitted by /u/GanjaLadyGrower

Originally posted by u/GanjaLadyGrower on r/ArtificialInteligence