A quick local text-to-speech web UI. Three engines, multi-voice speaker tags, MP3 output.

| Engine | Speed | Method |
|---|---|---|
| Chatterbox | slow | voice cloning from audio sample |
| Kokoro 82M | fast | pre-trained voice models |
| Qwen3 VoiceDesign | very slow | text description → voice |
setup.bat
Downloads model weights automatically on first use (~300 MB for Kokoro, larger for Chatterbox/Qwen3).
run.bat
Opens http://localhost:3776 in your default browser.
Drop .mp3/.wav files into voice_samples/ — they appear in the voice dropdown.
Instead of using the voice dropdown, you can insert [name] tags anywhere in the text to switch voices mid-generation:
[geralt] Some text in Geralt's voice.
[narrator] Back to the narrator.
For Qwen3, define a voice on first use with a description:
[narrator: Calm professional male narrator, slight British accent]
Text here...
The sample is saved to voice_samples/qwen3/ and reused in future generations. Generating again with a tag that includes description will override the saved voice.
9 commits
Python
47.9%
JavaScript
30.4%
CSS
12.3%
HTML
6.6%
Batchfile
2.8%
A quick local text-to-speech web UI. Three engines, multi-voice speaker tags, MP3 output.

| Engine | Speed | Method |
|---|---|---|
| Chatterbox | slow | voice cloning from audio sample |
| Kokoro 82M | fast | pre-trained voice models |
| Qwen3 VoiceDesign | very slow | text description → voice |
setup.bat
Downloads model weights automatically on first use (~300 MB for Kokoro, larger for Chatterbox/Qwen3).
run.bat
Opens http://localhost:3776 in your default browser.
Drop .mp3/.wav files into voice_samples/ — they appear in the voice dropdown.
Instead of using the voice dropdown, you can insert [name] tags anywhere in the text to switch voices mid-generation:
[geralt] Some text in Geralt's voice.
[narrator] Back to the narrator.
For Qwen3, define a voice on first use with a description:
[narrator: Calm professional male narrator, slight British accent]
Text here...
The sample is saved to voice_samples/qwen3/ and reused in future generations. Generating again with a tag that includes description will override the saved voice.
9 commits
Python
47.9%
JavaScript
30.4%
CSS
12.3%
HTML
6.6%
Batchfile
2.8%