AI-Powered Radio Drama Production Studio
Turn a story idea into a fully-produced, voice-acted radio drama โ automatically.
English ยท ็ฎไฝไธญๆ ยท ๆฅๆฌ่ช
| Settings & Providers | Music & SFX Library |
|---|---|
![]() |
![]() |
| Agent Workbench | Live Progress |
|---|---|
![]() |
![]() |
EchoForge is a local-first desktop studio that produces complete radio dramas (audio dramas) from a script or even just a story idea:
Story idea โโโถ LLM writes the script โโโถ TTS voices every character
โ โ
โโโ ๐ต Adaptive BGM (intro โ ducking under speech โ outro)
โโโ ๐ Sound effects punctuating the dialogue
โโโ ๐ต Instrumental interludes with timed duration
โโโ ๐ฌ Ending credits theme with fade-out
โผ
Final MP3 / WAV export
It requires no audio-editing skills โ write (or let the AI write) a script in a simple text format, and EchoForge handles casting, performance, music and mixing.
- Three TTS providers โ Fish Audio (cloned voices, 4 models) ยท MiniMax (Coding Plan
sk-cpkeys work! 13 built-in voices) ยท Microsoft Edge TTS (free, no key, 63 zh/en/ja voices) - Voice transformation (DSP) โ make ONE voice play MANY characters: 12 presets (Boy / Elder / Elf / Robotโฆ) + manual pitch (ยฑ12 semitones, WSOLA time-preserving), formant shift, brightness, breathiness, roughness
- SSML pronunciation control โ
<break time="500ms"/>works across ALL providers (native on Microsoft, auto-converted elsewhere); emotion markers[softly](S2) /(softly)(S1) - Per-character voice binding with volume / speed / dB fine-tuning and character profiles
- Voice preview per voice-model and per role
- Content-hash caching โ successful segments are never billed twice
- BGM with adaptive ducking: each dialogue block is wrapped in
[intro โ speech(BGM ducks to 25%) โ outro] - Per-directive fade control:
#BGM=Night Piano,3,8sets 3s fade-in / 8s fade-out - Instrumental interludes
#MUSIC=track,12โ timed music-only segments (auto-loops if the track is shorter) - Ending theme
#END=track,20with a long fade-out - 5 built-in royalty-free BGM tracks (โฅ2 min each, mostly piano) + batch upload your own
- 20 built-in programmatically-synthesized royalty-free SFX (thunder, doorbell, footsteps, page-flip, birds, campfireโฆ)
#SFX=thunder,1.2โ punctuate dialogue with volume control; independent SFX library with batch upload
- Works with any OpenAI-compatible API (OpenRouter, DeepSeek, Kimi, Qwen, Doubao, Ollamaโฆ) and Anthropic Claude (auto-detected)
- One-click model discovery (
โกfetches the full model list) - Context-rich prompting โ the full project state (characters + profiles + voice bindings + BGM/SFX libraries + emotion-marker style matching the selected TTS model) is injected into every generation
- Agent Workbench โ fully automated series production:
- AI writes the prologue + Episode 1
- You give rounds of feedback โ AI revises (round 2, 3, โฆ)
- Generate next episode with full story continuity
- Apply to workbench โ auto voice-binding โ auto generation
- Clean light UI with grouped navigation (Configure / Create / Produce)
- Live progress: percentage, stage pipeline (Ready โ Per-segment โ Mix โ Export โ Done), and a card showing exactly which line is being processed
- Segment timeline table โ edit text, BGM, fades and durations inline; regenerate single segments
- RPM limiting + classified retries (429/503/network back-off, friendly Chinese/English errors for 401/402)
- Offline mock mode โ rehearse the full mix with placeholder voices, zero API cost
| Platform | File | How |
|---|---|---|
| ๐ช Windows | EchoForge-vX-win-x64.exe |
double-click |
| ๐ง Linux | EchoForge-vX-x86_64.AppImage (or the raw binary) |
chmod +x && ./EchoForge* |
| ๐ macOS | EchoForge-macOS-Linux-source-vX.zip |
bash install-macos.sh โ EchoForge.app |
| ๐ค Android | EchoForge-Android-Termux-vX.zip |
bash install-android.sh in Termux |
| ๐ฑ Any phone (PWA) | โ | run EchoForge on any computer with --host 0.0.0.0, open http://pc-ip:8080 on the phone, Add to Home Screen |
The macOS/Linux/Android packages contain identical source + one-click installers that create
.app/ launchers automatically. All three ship every feature โ TTS providers, voice transform, SSML, i18n, Agent.
- Download
EchoForge-v2.0.0-win-x64.exefrom Releases (~55 MB, single file) - Double-click โ first launch self-extracts the runtime (3โ10 s) and opens your browser at
http://127.0.0.1:17860 - Configure keys:
- TTS: free API key from fish.audio (model
s2.1-pro-freeis free) - LLM (optional): any OpenRouter / DeepSeek / local Ollama key for AI scriptwriting
- TTS: free API key from fish.audio (model
- Try Agent Workbench โ type a story idea โ ๐
SmartScreen note: the binary is unsigned โ click More info โ Run anyway. Upgrades are automatic: launching a newer EXE cleanly replaces the running old service.
git clone https://github.com/TechnologyStar/EchoForge.git
cd EchoForge
pip install -r requirements.txt
python app.py # opens http://127.0.0.1:17860Windows users can also double-click build.bat (needs Python 3.11โ3.13) to produce their own single-file EXE via PyInstaller.
The whole drama is plain text:
// ===== Act 1 =====
#BGM=Rainy Night Piano,3,8 โ BGM with 3s fade-in / 8s fade-out
#SFX=doorbell โ punctuate with a sound effect
ใNarratorใLate at night, the bell of the old bookstore rang.
Store owner: "This lateโฆ a customer?"
#MUSIC=Suspense Pulse,10 โ 10-second instrumental interlude
Girl: [softly] I'm looking for a book that never grows old.
#END=Moonlight Lullaby,18 โ ending theme, fades out
| Directive | Meaning |
|---|---|
ใRoleใline or Role: line |
Dialogue (both forms, mixable) |
#BGM=name[,fadein,fadeout] |
Background music for subsequent lines |
#BGM=none |
Clear BGM |
#SFX=name[,volume] |
Sound effect insert (volume 0โ1.5) |
#MUSIC=name,seconds |
Music-only interlude (timed) |
#END=name,seconds |
Ending theme (long fade-out) |
// comment |
Ignored line |
[softly] / (softly) |
Emotion markers โ brackets for S2 models, parentheses for S1 |
Full specification: docs/script-format.md
- Getting Started โ keys, first drama, FAQ
- LLM Providers โ OpenRouter / DeepSeek / Kimi / Qwen / Doubao / Claude / Ollama
- Audio Engine โ how ducking, fades and mixing work
- Android (Termux):
pkg install python flask requests numpy soundfile lameenc,pip install edge-tts, thenbash run-android.shโ serves on port 8080, open from any browser on the same Wi-Fi - macOS / Linux:
pip install -r requirements.txt && python app.py(identical to Windows source mode;--host 0.0.0.0 --port 8080for LAN)
| Layer | Choice |
|---|---|
| Backend | Python 3.11 ยท Flask ยท NumPy ยท soundfile ยท lameenc |
| Frontend | Vanilla JS ยท hand-rolled light-theme design system |
| TTS | Fish Audio REST (/v1/tts, model via header) |
| LLM | OpenAI-compatible + Anthropic native (auto-switch) |
| Packaging | Custom C launcher (static zlib self-extractor, launcher.c) ยท mingw-w64 cross-compiled |
The single-file EXE layout: [C launcher | zlib payload | u64 length | magic] โ the launcher version-checks a running service, performs automatic upgrades (kills the old service), and self-extracts the Python runtime on first run. No PyInstaller dependency for official builds.
- UI localization (EN / ZH / JA switcher) โจ v2.0
- SSML-level pronunciation control โจ v2.0
- Multi-episode batch export with ID3 tags โจ v2.0
- Waveform preview timeline โจ v2.0
- macOS / Linux builds
Issues and PRs are welcome! The audio synthesizers (bgm_synth.py, sfx_synth.py) are pure NumPy โ new royalty-free BGM/SFX recipes are especially appreciated.
MIT โ the built-in BGM/SFX are programmatically synthesized and royalty-free.
โญ If EchoForge saved you an afternoon of audio editing, consider starring the repo!
Made with ๐๏ธ and a lot of piano notes.



