refactor: 精简架构,去掉书籍管理,核心 TTS 代理

- 去掉 books/chapters CRUD、SQLAlchemy、SQLite 依赖
- 核心只剩 /api/tts + 智能分段 + 自动重试
- 新增 API_TOKEN 环境变量,管理接口 Bearer Token 鉴权
- 管理接口精简为 preview + config
- 前端重写:TTS 试听 + 配置查看 + 接口文档
- Dockerfile/docker-compose 清理,去掉数据库卷
This commit is contained in:
sunruiling
2026-03-27 15:10:58 +08:00
parent 30544f7f42
commit 2a87020b48
11 changed files with 381 additions and 1503 deletions

108
README.md
View File

@@ -1,14 +1,15 @@
# 📚 TTS Book Service
# 🎙️ TTS Proxy Service
基于**小米 MiMo TTS**的听书音频转换服务,提供 Web 管理界面和听书 App 音频接入接口
小米 MiMo TTS 音频转换代理服务,提供实时 TTS 接口和 Web 管理界面。
## 架构
```
听书 App ──HTTP──▶ 本服务 ──API──▶ 小米 MiMo TTS
├── SQLite (书籍/章节管理)
└── MP3 文件缓存
听书 App / curl ──HTTP──▶ 本服务 ──API──▶ 小米 MiMo TTS
├── 智能文本分段(>2000字自动切分拼接
├── TTS 自动重试5xx 错误最多重试 3 次)
└── MP3 缓存
```
## 快速启动
@@ -16,83 +17,69 @@
```bash
# 1. 配置 API Key
cp .env.example .env
# 编辑 .env 填入你的 MIMO_API_KEY
# 编辑 .env 填入 MIMO_API_KEY
# 2. 启动
docker compose up -d
# 3. 访问管理界面
# http://your-server:17200
# 3. 访问
# 管理界面: http://your-server:3333
# TTS 接口: http://your-server:3333/api/tts
```
## 功能
## 核心功能
### Web 管理界面 (`/`)
- 📖 书籍管理(添加/删除)
- 📑 章节管理(添加/编辑/删除)
- 🎙️ TTS 试听(支持风格 + 音色设置)
- ⚡ 单章/批量音频生成(自动分段拼接)
- ⚙️ 配置查看
### POST `/api/tts` — 实时 TTS
### 核心特性
- **智能文本分段**: 长文本自动在句末/段落边界切分≤2000字/段),逐段生成后拼接
- **多风格支持**: 开心、悲伤、东北话、像个大将军... 任意组合
- **音色切换**: 支持指定不同音色voice 参数)
- **并发批量生成**: 限制 3 路并发,快速完成整本书
文本进 → MP3 出。支持 JSON 和 Form 两种格式,长文本自动分段拼接。
### 听书 App 接口
```bash
# JSON 格式
curl -X POST http://localhost:3333/api/tts \
-H "Content-Type: application/json" \
-d '{"text": "你好世界", "style": "开心", "voice": ""}' \
-o output.mp3
# Form 格式(百度兼容)
curl -X POST http://localhost:3333/api/tts \
-d "tex=你好世界" \
-o output.mp3
```
### GET `/health` — 健康检查
### 管理接口(需 Bearer Token
| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/book/{book_id}` | GET | 获取书籍信息和章节列表 |
| `/api/book/{book_id}/chapter/{chapter_id}/audio` | GET | 下载章节 MP3 音频 |
### 管理 API
| 接口 | 方法 | 说明 |
|------|------|------|
| `/admin/api/books` | GET/POST | 书籍列表/创建 |
| `/admin/api/books/{book_id}` | DELETE | 删除书籍 |
| `/admin/api/books/{book_id}/chapters` | GET/POST | 章节列表/创建 |
| `/admin/api/books/{book_id}/chapters/{id}` | PUT/DELETE | 更新/删除章节 |
| `/admin/api/books/{book_id}/chapters/{id}/generate` | POST | 生成单章音频 |
| `/admin/api/books/{book_id}/generate-all` | POST | 批量生成 |
| `/admin/api/tts/preview` | POST | TTS 试听 |
| `/admin/api/config` | GET | 查看配置 |
| `/admin/api/preview` | POST | TTS 试听,返回音频 URL |
| `/admin/api/config` | GET | 查看当前配置 |
## 接入听书 App
1. 在管理界面添加书籍和章节
2. 为章节生成音频
3. 在听书 App 配置:
- **接入方式**: 音频方式
- **接入地址**: `http://your-server:17200`
- **音频类型**: mp3
- **书籍地址**: `http://your-server:17200/api/book/{book_id}`
在 App 中配置 TTS 音频源:
- **URL**: `http://your-server:3333/api/tts`
- **Method**: POST
- **Body**: `{"text": "{{speakText}}"}`
- **Content-Type**: `audio/mpeg`
App 模板变量:`{{speakText}}`(文本)、`{{speakSpeed}}`(语速 5-50
> App 只能动态传文本。voice/style 需在 JSON body 中写死,或通过其他客户端调用时传入。
## 环境变量
| 变量 | 必填 | 默认值 | 说明 |
|------|------|--------|------|
| `MIMO_API_KEY` | ✅ | - | 小米 MiMo TTS API Key |
| `MIMO_API_KEY` | ✅ | - | MiMo TTS API Key |
| `MIMO_API_ENDPOINT` | ❌ | `https://api.xiaomimimo.com/v1/chat/completions` | API 地址 |
| `MIMO_TTS_MODEL` | ❌ | `mimo-v2-audio-tts` | 模型名称 |
| `MIMO_VOICE` | ❌ | `mimo_default` | 默认音色 |
| `SERVER_PORT` | ❌ | `3333` | 服务端口 |
## 📖 API 文档
完整 API 文档见 [**API.md**](./API.md),包含:
- 所有接口的请求/响应格式
- 参数说明与错误码
- MiMo TTS 风格参考大全
- 文本自动分段机制说明
| `API_TOKEN` | ❌ | - | 管理接口 Bearer Token留空则不鉴权 |
## MiMo TTS 风格参考
在「TTS 试听」中可填写风格,例如:
| 类别 | 示例 |
|------|------|
| 情感 | 开心 / 悲伤 / 生气 / 平静 |
@@ -100,12 +87,11 @@ docker compose up -d
| 角色 | 像个大将军 / 像个小孩 / 孙悟空 |
| 方言 | 东北话 / 四川话 / 台湾腔 / 粤语 |
## 不使用 Docker 运行
## 不使用 Docker
```bash
pip install -r requirements.txt
# 需要系统安装 ffmpeg
# 系统安装 ffmpeg
export MIMO_API_KEY=your_key
cd app
python main.py
cd app && python main.py
```