AI-Generated Internet Radio / AI 生成的网络电台
Next.js 16 + React 19 + TypeScript + Tailwind CSS 4
A multi-agent orchestrated AI radio experience with real-time content generation and intelligent audio mixing.
RadioNowhere is an AI-driven internet radio platform that generates dynamic radio shows in real-time using a multi-agent system. The platform features three core agents working in concert:
The radio station operates under the identity "NOWHERE FM 404.2" (无处电台), broadcasting diverse programs including talk shows, historical stories, science trivia, urban legends, interviews, late-night thoughts, music specials, and interactive entertainment.
The station exists in a fictional atmosphere blending cyberpunk aesthetics with post-apocalyptic warmth. Radio Nowhere - The Frequency of the Lost provides solace for wandering souls through melancholic yet comforting programming, creating a unique "post-apocalyptic romanticism" experience.
| Agent | Role | Key Features |
|---|---|---|
| Writer Agent | Content Generation | ReAct tool-calling (MAX_REACT_LOOPS: 30), dynamic program types, multi-character support, world-bible context |
| Director Agent | Show Orchestration | Timeline management, double-buffered preloading, session persistence, music URL caching (10min TTL) |
| TTS Agent | Speech Synthesis | 30+ Gemini voices, Microsoft TTS backup, priority queue (MAX_CONCURRENT_TTS: 5), audio caching |
The Writer Agent dynamically generates diverse content:
Framework:
- Next.js: 16.1.1 # App Router for full-stack React
- React: 19.2.3 # Latest React with concurrent features
- TypeScript: 5.0 # Type-safe development
Path Aliases:
- @shared: # Shared utilities, services, components
- @entities: # Business entities and models
- @features: # User-facing features and business logic
- @widgets: # Compositional UI components
- @pages: # Page-level components
- @app: # Application-wide setup
Styling & Animation:
- Tailwind CSS: 4 # Utility-first CSS with v4 improvements
- tailwind-merge: 3.4.0 # Merge Tailwind classes intelligently
- Framer Motion: 12.25.0 # Production-ready animation library
- Lucide React: 0.562.0 # Beautiful & consistent icon toolkit
Audio & State:
- Howler.js: 2.2.4 # Web audio engine
- @types/howler: 2.2.12 # TypeScript definitions
- Zustand: 5.0.9 # Lightweight state management
AI Services:
- @google/generative-ai: 0.24.1 # Gemini AI SDK
Utilities:
- clsx: 2.1.1 # Conditional className utility
The project follows the Feature-Sliced Design (FSD) architecture for better scalability and maintainability.
radio-nowhere/
├── app/ # Next.js App Router (Pages Layer)
│ ├── api/proxy/ # API proxy route
│ ├── layout.tsx # Root layout
│ └── page.tsx # Main entry point
│
├── src/
│ ├── widgets/ # Compositional UI (Widgets Layer)
│ │ ├── radio-player/ # Main Radio Player widget
│ │ ├── settings-panel/ # Configuration panel widget
│ │ └── agent-monitor/ # Agent status monitoring widget
│ │
│ ├── features/ # User-facing functionality (Features Layer)
│ │ ├── agents/ # Director Agent & Execution logic
│ │ ├── content/ # Writer Agent & Script generation
│ │ ├── tts/ # Text-to-Speech logic & providers
│ │ ├── music-search/ # GD Music API & Search logic
│ │ ├── history-tracking/ # Playback history
│ │ └── time-announcement/ # Hourly time service
│ │
│ ├── shared/ # Common resources (Shared Layer)
│ │ ├── services/ # Core services (Audio, AI, Storage)
│ │ ├── types/ # Core domain types
│ │ ├── hooks/ # Reusable React hooks
│ │ └── ui/ # Project-wide UI components
│
├── public/ # Static assets
└── package.json
@features/content/lib/writer-agent.ts)The Writer Agent generates radio content using the ReAct (Reasoning + Acting) pattern with a tool-calling capability.
Key Features:
search_music - Search for specific artists or songs via GD Studio APIget_lyrics - Fetch LRC format lyrics for music integrationfetch_news - Get today's trending news for content inspirationcheck_duplicate - Verify concept uniqueness within 1-hour historysubmit_show - Submit the final ShowTimeline JSON@features/content/lib/world-context.ts@features/agents/lib/director-agent.ts)The Director Agent orchestrates the entire radio show, managing timelines, audio playback, and session persistence.
Key Features:
ShowTimeline via playback-controller.ts and music-executor.ts.preload-manager.ts).SessionStore.@features/tts/lib/tts-agent.ts)The TTS Agent handles all text-to-speech generation with support for Gemini and Microsoft TTS.
Key Features:
StorageService to minimize API latency.@shared/services/audio-service/mixer.ts)A multi-track audio controller using Howler.js for seamless music and voice mixing.
Features:
@features/music-search/lib/gd-music-service.ts)Integrates with GD Studio Music API for smart music discovery.
@features/music-search/lib/lyrics-parser.ts for real-time synchronization.Configure API keys through the Settings Panel (stored in localStorage):
Clone & Install
bash
git clone <repository-url>
npm install
Start Development
bash
npm run dev
Configure
This project is licensed under the MIT License.
🎵 RadioNowhere - The Frequency of the Lost 🎵
$ claude mcp add RadioNowhere \
-- python -m otcore.mcp_server <graph>