🎙️ 科科罗TTS
](https://hub.docker.com/r/neosun/kokoro-tts)   
Kokoro-82M文本转语音多功能Docker镜像
Web UI•REST API•WebSocket•流式处理•批处理•MCP
______________________________________________________________________
✨ 特性
- 🎨 漂亮的Web UI -具有实时音频播放功能的现代界面
- 🔌 REST API -带有Swagger文档的全功能HTTP端点
- 📡 双向通信 -实时双向TTS通信
- 🌊 流媒体 -生成时交付的音频块
- 📦 批处理 -在一个请求中处理多个文本
- 🤖 MCP服务器 -AI代理集成(Claude等)
- 🌍 多语言 -英语、中文、日语、西班牙语、法语、印地语、意大利语、葡萄牙语
- 🚀 GPU加速 -CUDA支持自动内存管理
- 📱 54+声音 -各种各样的男性和女性声音
🚀 快速开始
docker run -d --name kokoro-tts --gpus all -p 8300:8300 neosun/kokoro-tts:latest打开http://localhost:8300在您的浏览器中。
📦 安装
先决条件
- Docker 20.10+
- 支持CUDA的NVIDIA GPU(可选,CPU回退可用)
- nvidia-docker2(用于GPU支持)
Docker运行
# With GPU
docker run -d \
--name kokoro-tts \
--gpus all \
-p 8300:8300 \
-e GPU_IDLE_TIMEOUT=600 \
--restart unless-stopped \
neosun/kokoro-tts:latest
# CPU only
docker run -d \
--name kokoro-tts \
-p 8300:8300 \
--restart unless-stopped \
neosun/kokoro-tts:latestDocker Compose
services:
kokoro-tts:
image: neosun/kokoro-tts:latest
container_name: kokoro-tts
ports:
- "8300:8300"
environment:
- GPU_IDLE_TIMEOUT=600
- KEEP_MODEL_LOADED=true # Never release model from memory
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
restart: unless-stoppeddocker-compose up -d验证安装
# Health check
curl http://localhost:8300/health
# Generate speech
curl -X POST http://localhost:8300/api/tts \
-H "Content-Type: application/json" \
-d '{"text":"Hello world","voice":"af_heart"}' \
-o output.wav⚙️ 配置
| 变量 | 默认值 | 描述 |
|---|---|---|
PORT | 8300 | 服务器端口 |
GPU_IDLE_TIMEOUT | 300 | GPU内存释放前几秒 |
KEEP_MODEL_LOADED | false | 从不从内存中释放模型(设置为 true 最低延迟) |
NVIDIA_VISIBLE_DEVICES | all | GPU设备选择 |
📖 用法
Web用户界面
| 选项卡 | 说明 |
|---|---|
| 单 | 生成单个音频文件 |
| 流 | 实时流媒体播放 |
| 双向通信 | 双向实时TTS |
| 批次 | 一次处理多个文本 |
REST API
生成语音(WAV)
curl -X POST http://localhost:8300/api/tts \
-H "Content-Type: application/json" \
-d '{"text":"Hello world","voice":"af_heart","speed":1.0}' \
-o output.wav生成语音(Base64)
curl -X POST http://localhost:8300/api/tts/base64 \
-H "Content-Type: application/json" \
-d '{"text":"Hello world","voice":"af_heart","speed":1.0}'流媒体
curl -X POST http://localhost:8300/api/tts/stream \
-H "Content-Type: application/json" \
-d '{"text":"Long text here...","voice":"af_heart"}'批处理
curl -X POST http://localhost:8300/api/tts/batch \
-H "Content-Type: application/json" \
-d '{
"items": [
{"id":"1","text":"First","voice":"af_heart"},
{"id":"2","text":"Second","voice":"am_michael"}
]
}'双向通信
const ws = new WebSocket('ws://localhost:8300/ws/tts');
ws.onopen = () => {
ws.send(JSON.stringify({
text: "Hello world",
voice: "af_heart",
speed: 1.0
}));
};
ws.onmessage = (e) => {
const data = JSON.parse(e.data);
if (data.status === 'chunk') {
// Play audio: data.audio (base64)
}
};MCP集成
{
"mcpServers": {
"kokoro-tts": {
"command": "docker",
"args": ["exec", "-i", "kokoro-tts", "python", "/app/docker/server.py", "mcp"]
}
}
}🎤 可用声音
模型
| 模型 | 语言 | 声音 | 最适合 |
|---|---|---|---|
hexgrad/Kokoro-82M | 9 | 54 | 一般用途 |
hexgrad/Kokoro-82M-v1.1-zh | 3 | 103 | 中文优化 |
语音示例
| 语言 | 女 | 男 |
|---|---|---|
| 🇺🇸 美国英语 | af_heart, af_bella, af_nicole | am_michael, am_fenrir |
| 🇬🇧 英式英语 | bf_emma,bf_isabella | bm_george,bm_fable |
| 🇨🇳 中文 | zf_xiaobei,zf_xiaoyi | zm_yunjian,zm_yunyang |
| 🇯🇵 日语 | jf_alpha,jf_tebukuro | jm_kumo |
| 🇪🇸 西班牙语 | ef_dora | em_alex |
| 🇫🇷 法语 | ff_siwis | - |
📚 API文档
- Swagger用户界面: http://localhost:8300/docs
- ReDoc: http://localhost:8300/redoc
🏗️ 项目结构
kokoro/
├── docker/
│ ├── server.py # FastAPI server
│ ├── ui_template.py # Web UI
│ └── mcp_server.py # MCP tools
├── kokoro/ # Core TTS library
├── Dockerfile
├── docker-compose.yml
└── README.md🛠️ 技术栈
- 后端:Uvicorn快速API
- TTS发动机:科科罗-82M(风格TTS 2)
- 深度学习:PyTorch,CUDA
- 容器:Docker、NVIDIA容器工具包
🤝 贡献
欢迎投稿!请随时提交拉取请求。
- 克隆该仓库
- 创建功能分支(
git checkout -b feature/amazing) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing) - 打开拉取请求
📖 文档
- 流媒体优化指南 -我们如何将延迟从2秒减少到50毫秒
📝 更新日志
v1.1.1(2025-01)-🔒 保持模型加载
🆕 新功能
- 添加
KEEP_MODEL_LOADED环境变量 - 当设置为
true,模型永久保留在GPU内存中 - 完全消除冷启动延迟,持续51毫秒TTFB
📊 最新演出(2025-01-29)
- 本地TTFB: 51-53毫秒 (稳定)
- Cloudflare TTFB: 138-178毫秒
- 第一块: 54毫秒,71.5KB
v1.1.0(2025-01)-🚀 流媒体延迟优化
⚡ 主要性能改进
- 首次播放速度提高40倍 -从2s+减少到~50ms
- 第一块小6倍 -从436KB减少到71.5KB
- TTFB速度提高10倍 -从~500ms减少到~50ms(局部)
🔧 后端优化
- 按句子/子句拆分音频(
[.!?。!?,,;;::]+)而不是换行 - 启动时模型预热-消除冷启动延迟(93ms→ 56ms)
- 添加
X-Accel-Buffering: no和Cache-Control: no-cache标头 - 现在,每个句子都会生成流块,以便立即交付
🎨 前端优化
- 无阻塞音频解码
.then()而不是await - 浏览器自动播放策略的AudioContext自动恢复
- 第一块解码后立即播放
- 并行块接收和音频解码
📊 绩效指标面板 (流选项卡)
- 首字节时间(TTFB)-测量服务器响应时间
- 首次播放时间-测量实际音频开始时间
- 总时间-实时运行时间计数器
- 数据大小-接收到的总字节数
🎛️ UI增强
- 在流、WebSocket、批处理选项卡中添加了模型选择器
- 在流、WebSocket、批处理选项卡中添加了语音选择器
- 在流、WebSocket、批处理选项卡中添加了速度滑块
- 流媒体播放期间实时指标更新
- 改进了状态指示器和吐司通知
🐛 漏洞修补
- 固定WebSocket
sendWS()使用错误的型号选择器 - 修复了“批处理”选项卡缺少音频播放控件的问题
- 固定了UI页脚中的版本号显示
v1.0.0(2025-01)-🎉 初始版本
✨ 核心功能
- 漂亮的Web UI,有4个选项卡(单选项卡、流选项卡、WebSocket选项卡、批处理选项卡)
- 带有Swagger/ReDoc文档的完整REST API
- WebSocket实时双向TTS
- 块生成时的流式音频传输
- 多个文本的批处理
🤖 AI集成
- 用于AI代理集成的MCP服务器(Claude、Cursor等)
- 基于工具的人工智能工作流TTS生成
🌍 多语言支持
- 9种语言:英语、中文、日语、西班牙语、法语、印地语、意大利语、葡萄牙语、韩语
- 54+种声音,有男性和女性选择
- 多型号支持:Kokoro-82M(通用)和Kokoro-82M-1.1-zh(中文优化)
🚀 基础设施
- GPU加速,支持CUDA
- 具有可配置空闲超时的自动GPU内存管理
- GPU不可用时CPU回退
- Docker容器化部署
v1.0.0(2025-01)-🎉 初始版本
✨ 核心功能
- 漂亮的Web UI,有4个选项卡(单选项卡、流选项卡、WebSocket选项卡、批处理选项卡)
- 带有Swagger/ReDoc文档的完整REST API
- WebSocket实时双向TTS
- 块生成时的流式音频传输
- 多个文本的批处理
🤖 AI集成
- 用于AI代理集成的MCP服务器(Claude、Cursor等)
- 基于工具的人工智能工作流TTS生成
🌍 多语言支持
- 9种语言:英语、中文、日语、西班牙语、法语、印地语、意大利语、葡萄牙语、韩语
- 54+种声音,有男性和女性选择
- 多型号支持:Kokoro-82M(通用)和Kokoro-82M-1.1-zh(中文优化)
🚀 基础设施
- GPU加速,支持CUDA
- 具有可配置空闲超时的自动GPU内存管理
- GPU不可用时CPU回退
- Docker容器化部署
📄 许可证
此项目根据Apache许可证2.0获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
- 海克斯格勒/科科罗-82M -令人惊叹的TTS模型
- 风格TTS 2 -模型架构
______________________________________________________________________
⭐ 星迹

