纳米AI TTS 是一个基于 OpenAI API 兼容接口的文字转语音(Text-to-Speech)服务。它提供了一个轻量级、易于部署的TTS解决方案,支持多种部署平台。
- ✅ OpenAI API兼容 - 支持
/v1/audio/speech标准接口 - ✅ 多模型支持 - 支持多个语音模型和情绪调整
- ✅ 完整Web UI - 开箱即用的浏览器界面
- ✅ 灵活部署 - Docker、Vercel、本地等多种方式
- ✅ 生产就绪 - 认证、限流、缓存、日志等企业级功能
- ✅ 轻量级 - 无FFmpeg系统依赖,快速启动
# 1. 克隆项目
git clone https://github.com/namitts/nanoai-tts.git
cd nanoai-tts
# 2. 安装依赖
pip install -r requirements.txt
# 3. 配置环境
cp .env.example .env
# 编辑 .env,设置 TTS_API_KEY
# 4. 启动服务
python app.py
# 5. 访问
# 浏览器打开: http://localhost:5001# 构建并运行
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down✅ 已修复: Vercel 部署问题已在 v1.0 中完全解决
👉 详见 VERCEL-DEPLOYMENT.md
重要文档:
所有API请求需要在请求头中包含Bearer Token:
Authorization: Bearer sk-nanoai-your-secret-keyPOST /v1/audio/speech
请求体:
{
"model": "DeepSeek",
"input": "你好,这是一个测试。",
"speed": 1.0,
"emotion": "neutral"
}响应: 音频文件 (audio/mpeg)
示例:
curl -X POST http://localhost:5001/v1/audio/speech \
-H "Authorization: Bearer sk-nanoai-your-secret-key" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek",
"input": "你好世界",
"speed": 1.0
}' \
--output output.mp3POST /v1/audio/speech/batch
请求体:
{
"texts": ["文本1", "文本2"],
"model": "DeepSeek",
"params": {
"speed": 1.0,
"emotion": "neutral"
}
}GET /v1/models
响应:
{
"object": "list",
"data": [
{
"id": "DeepSeek",
"object": "model",
"created": 1701234567,
"owned_by": "nanoai",
"description": "DeepSeek (默认)"
}
]
}GET /health
响应:
{
"status": "ok",
"models_in_cache": 10,
"timestamp": 1701234567,
"version": "1.0.0"
}| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
model |
string | 语音模型ID | DeepSeek |
input |
string | 输入文本 | 你好 |
speed |
float | 语速(0.5-2.0) | 1.0 |
emotion |
string | 情绪(neutral/happy/sad/angry) | neutral |
| 状态码 | 说明 |
|---|---|
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | 认证失败 |
| 404 | 模型不存在 |
| 429 | 请求过于频繁 |
| 500 | 服务器错误 |
| 503 | 服务不可用 |
nanoai-tts/
├── api/ # API相关模块
│ ├── index.py # Vercel Serverless入口 ✨
│ ├── auth.py # 认证模块
│ ├── rate_limit.py # 限流模块
│ └── docs.py # API文档
├── utils/
│ └── logger.py # 日志管理
├── deploy/
│ └── config.py # 部署配置
├── app.py # 主应用(本地开发)
├── nano_tts.py # TTS引擎核心
├── requirements.txt # Python依赖
├── vercel.json # Vercel配置 ✨
├── docker-compose.yml # Docker配置
├── .env.example # 环境变量示例 ✨
├── CODE-OPTIMIZATION.md # 代码优化文档 ✨
└── VERCEL-DEPLOYMENT.md # Vercel部署指南 ✨
| 变量 | 说明 | 默认值 | 必需 |
|---|---|---|---|
TTS_API_KEY |
API密钥 | - | ✅ |
CACHE_DURATION |
缓存时长(秒) | 7200 | ❌ |
PORT |
服务端口 | 5001 | ❌ |
DEBUG |
调试模式 | false | ❌ |
ENVIRONMENT |
运行环境 | development | ❌ |
SENTRY_DSN |
Sentry监控 | - | ❌ |
REDIS_URL |
Redis URL(限流) | - | ❌ |
👉 详见 .env.example
- Flask 2.3.3 - Web框架
- Werkzeug ≥2.2.0 - WSGI工具库
- Flask-CORS 4.0.0 - 跨域支持
- flask-httpauth 4.8.0 - API认证
- flask-limiter 3.8.0 - 请求限流
- python-dotenv 1.0.0 - 环境变量管理
- sentry-sdk - 错误监控(需设置
SENTRY_DSN) - redis - 分布式限流(需设置
REDIS_URL)
python app.pydocker-compose up -d👉 详见 VERCEL-DEPLOYMENT.md
步骤概要:
- 代码推送到GitHub
- Vercel Dashboard导入项目
- 配置环境变量
- 自动部署完成
项目采用标准Python/Flask,支持大多数云平台。关键要求:
- Python 3.12+
- 无系统依赖(不需要FFmpeg)
- 标准WSGI应用
| 指标 | 目标 | 状态 |
|---|---|---|
| 冷启动时间 | < 3秒 | ✅ |
| 模型加载 | 自动缓存 | ✅ |
| 并发请求 | 支持 | ✅ |
| 内存占用 | < 512MB | ✅ |
| 可用性 | 99%+ | ✅ |
- ✅ Bearer Token认证
- ✅ API请求限流
- ✅ CORS跨域配置
- ✅ 环境变量管理
- ✅ 日志记录和监控
- ✨ 代码优化: 移除未使用的依赖,清理代码结构
- ✨ Vercel迁移: 完全重写vercel.json,使用Serverless Functions
- ✨ 依赖清理: 移除prometheus-client、psutil等不必要的包
- ✨ 文档增强: 新增CODE-OPTIMIZATION.md和VERCEL-DEPLOYMENT.md
- ✨ 环境配置: 优化.env.example,文档化所有变量
- 🐛 修复Python 3.9/3.12兼容性问题
- 🐛 修复Werkzeug版本冲突
- 🐛 移除text_processor.py未使用代码
- 🐛 规范化vercel.json配置
- VERCEL-DEPLOYMENT.md - Vercel部署详细指南
- CODE-OPTIMIZATION.md - 代码优化说明
- .env.example - 环境变量示例
欢迎提交Issue和Pull Request!
MIT License
- 基于 NanoAI API
- 灵感来自 OpenAI TTS API
- 📧 Email: [email protected]
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
Made with ❤️ for TTS lovers