← 返回列表
未验证
OpenAI TTS API 中继服务器
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/1/30 · 已提供中文文档
综合分
15.6
GitHub 分
15.6
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Gishi1/OpenAI-TTS-API-Relay-Server该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/17(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
OpenAI TTS API 中继服务器
一个提供 OpenAI 兼容 TTS API 的中继服务器,支持多种后端提供商,包括免费和付费选项。
功能特性
- 兼容 OpenAI API - 可直接替代 OpenAI 的 /v1/audio/speech 端点
- 多提供商 - 在不同 TTS 后端之间无缝切换
- 免费选项 - Edge TTS 和 gTTS 无需任何 API 密钥即可使用
- 付费选项 - 支持 OpenAI、ElevenLabs、Azure 和 Google Cloud
- 代理支持 - 通过 HTTP/HTTPS 代理路由请求
- 原生语音名称 - 直接使用提供商原始的语音名称(默认)
- 可选的语音映射 - 可选择将 OpenAI 语音名称映射到特定提供商的语音
- API 密钥配置文件 - 为多租户场景提供按 API 密钥区分的不同配置
- 流式传输支持 - 为支持的提供商提供音频流式传输
- Web UI - 用于测试和配置的 Next.js 管理界面
- Docker 就绪 - 使用 Docker 和 Docker Compose 轻松部署
支持的提供商
| 提供商 | 免费 | 需要 API 密钥 | 流式传输 | 质量 |
|----------|------|------------------|-----------|---------|
| Edge TTS (Microsoft) | 是 | 否 | 是 | 高 |
| gTTS (Google Translate) | 是 | 否 | 否 | 基础 |
| OpenAI | 否 | 是 | 是 | 高 |
| ElevenLabs | 否 | 是 | 是 | 非常高 |
| Azure Cognitive Services | 否 | 是 | 是 | 高 |
| Google Cloud TTS | 否 | 是 | 否 | 高 |
| Coqui TTS (自托管) | 是 | 否 | 否 | 不定 |
快速开始
使用 pip
克隆仓库
git clone https://github.com/yourusername/openai-tts-relay.git
cd openai-tts-relay
安装依赖
pip install -r requirements.txt
运行服务器(默认使用 Edge TTS - 免费,无需 API 密钥)
python -m tts_relay.main
使用 Docker
构建并运行
docker-compose up -d
或手动构建
docker build -t openai-tts-relay .
docker run -p 8000:8000 openai-tts-relay
使用方法
基本 API 用法 (curl)
使用提供商原生语音名称生成语音(默认行为)
直接使用实际的 Edge TTS 语音名称
curl -X POST http://localhost:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Hello, this is a test of the TTS relay server.",
"voice": "en-US-AriaNeural"
}' \
--output speech.mp3
使用特定提供商及其原生语音名称
curl -X POST http://localhost:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "tts-edge",
"input": "Using Edge TTS provider.",
"voice": "en-US-JennyNeural"
}' \
--output speech.mp3
在请求体中指定提供商
curl -X POST http://localhost:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Using gTTS provider.",
"voice": "en",
"provider": "gtts"
}' \
--output speech.mp3
列出某个提供商可用的语音curl http://localhost:8000/v1/voices?provider=edge
使用 OpenAI Python 库
python
from openai import OpenAI
指向你的中继服务器
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed" # 除非你已配置身份验证
)
使用原生提供商语音名称生成语音
response = client.audio.speech.create(
model="tts-1", # 或 "tts-edge"、"tts-gtts" 等
voice="en-US-AriaNeural", # 使用原生 Edge TTS 语音名称
input="Hello from the TTS relay server!"
)
保存到文件
response.stream_to_file("speech.mp3")
使用 JavaScript/Node.js
javascript
import OpenAI from 'openai';
import fs from 'fs';
const openai = new OpenAI({
baseURL: 'http://localhost:8000/v1',
apiKey: 'not-needed',
});
async function generateSpeech() {
const response = await openai.audio.speech.create({
model: 'tts-1',
voice: 'en-US-JennyNeural', // 使用原生 Edge TTS 语音名称
input: 'Hello from JavaScript!',
});
const buffer = Buffer.from(await response.arrayBuffer());
fs.writeFileSync('speech.mp3', buffer);
}
generateSpeech();
配置
环境变量
bash
服务器
TTS_SERVER__HOST=0.0.0.0
TTS_SERVER__PORT=8000
TTS_SERVER__LOG_LEVEL=info
TTS_SERVER__API_KEY=your-secret-key # 可选身份验证
默认提供商
TTS_PROVIDERS__DEFAULT=edge
代理(可选)
HTTP_PROXY=http://proxy:8080
HTTPS_PROXY=http://proxy:8080
提供商 API 密钥(可选 - 启用付费提供商)
OPENAI_API_KEY=sk-...
ELEVENLABS_API_KEY=...
AZURE_SPEECH_KEY=...
AZURE_SPEECH_REGION=eastus
GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
配置文件
创建一个 config.yaml 文件(参见 config.example.yaml):
yaml
server:
host: "0.0.0.0"
port: 8000
log_level: "info"
providers:
default: "edge"
edge:
enabled: true
default_voice: "en-US-AriaNeural"
默认情况下,直接使用原生提供商语音名称
use_voice_mapping: false
可选:启用语音映射以使用 OpenAI 语音名称
use_voice_mapping: true
voice_mapping:
alloy: "en-US-AriaNeural"
echo: "en-US-GuyNeural"
elevenlabs:
enabled: true
api_key: "your-api-key"
use_voice_mapping: false
API 端点
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| POST | /v1/audio/speech | 生成语音(兼容 OpenAI) |
| GET | /v1/models | 列出可用模型 |
| GET | /v1/providers | 列出可用提供商 |
| GET | /v1/voices | 列出提供商的语音 |
| GET | /v1/profile | 获取当前 API 密钥配置文件信息 |
| GET | /health | 健康检查 |
| GET | /docs | Swagger UI 文档 |
请求格式
json
{
"model": "tts-1",
"input": "Text to convert to speech",
"voice": "alloy",
"response_format": "mp3",
"speed": 1.0,
"provider": "edge" // 可选:覆盖默认提供商
}
语音名称
默认行为:原生提供商语音名称
默认情况下(use_voice_mapping: false),服务器会直接将语音名称传递给提供商。请使用提供商的原生语音名称:
bash
Edge TTS - 使用 Microsoft 神经语音名称
curl ... -d '{"voice": "en-US-AriaNeural", "provider": "edge"}'
gTTS - 使用语言代码
curl ... -d '{"voice": "en", "provider": "gtts"}'
ElevenLabs - 使用语音 ID
curl ... -d '{"voice": "21m00Tcm4TlvDq8ikWAM", "provider": "elevenlabs"}'
要发现可用的语音,请使用 /v1/voices 端点:bash
curl http://localhost:8000/v1/voices?provider=edge
可选:OpenAI 语音映射
在配置中启用 use_voice_mapping: true,以将 OpenAI 语音名称映射到提供商语音:
| OpenAI 语音 | Edge TTS | gTTS | ElevenLabs |
|--------------|----------|------|------------|
| alloy | en-US-AriaNeural | en | Rachel |
| echo | en-US-GuyNeural | en | Domi |
| fable | en-GB-SoniaNeural | en-uk | Bella |
| onyx | en-US-DavisNeural | en | Arnold |
| nova | en-US-JennyNeural | en | Dorothy |
| shimmer | en-US-AnaNeural | en | Adam |
你可以在配置文件中自定义映射。
API 密钥配置文件
你可以为不同的 API 密钥配置不同的设置,从而支持多租户部署,让每个用户/应用程序都有自己的提供商配置。
yaml
server:
API key profiles - each key has its own configuration
api_key_profiles:
User 1: Uses ElevenLabs with their own API key
"sk-user1-abc123":
name: "user1"
description: "User 1 - Premium ElevenLabs"
providers:
default: "elevenlabs"
elevenlabs:
enabled: true
api_key: "user1-elevenlabs-key"
default_voice: "21m00Tcm4TlvDq8ikWAM"
User 2: Uses Edge TTS with Spanish voices
"sk-user2-xyz789":
name: "user2"
description: "User 2 - Spanish Edge TTS"
providers:
default: "edge"
edge:
enabled: true
default_voice: "es-ES-ElviraNeural"
User 3: Uses OpenAI TTS with a proxy
"sk-user3-def456":
name: "user3"
providers:
default: "openai"
openai:
enabled: true
api_key: "sk-openai-key-for-user3"
proxy:
enabled: true
http_url: "http://user3-proxy:8080"
每个配置文件都可以覆盖:
- providers - 不同的 TTS 提供商及其设置
- proxy - 不同的代理设置
使用 /v1/profile 端点检查当前配置文件:bash
curl -H "Authorization: Bearer sk-user1-abc123" http://localhost:8000/v1/profile
代理支持
为所有出站请求配置代理:
yaml
config.yaml
proxy:
enabled: true
http_url: "http://proxy.example.com:8080"
https_url: "http://proxy.example.com:8080"
no_proxy:
- "localhost"
- "127.0.0.1"
或通过环境变量:
bash
HTTP_PROXY=http://proxy:8080
HTTPS_PROXY=http://proxy:8080
添加自定义提供商
要添加新的 TTS 提供商:
1. 在 tts_relay/providers/ 中创建一个新文件
2. 实现 TTSProvider 接口
3. 使用 register_provider() 注册提供程序
示例:
python
from tts_relay.providers.base import TTSProvider, TTSResult
from tts_relay.providers.registry import register_provider
class MyCustomProvider(TTSProvider):
name = "custom"
display_name = "My Custom TTS"
is_free = True
supports_streaming = False
supported_formats = [ResponseFormat.MP3]
async def synthesize(self, text, voice, format, speed, **kwargs):
Your implementation here
return TTSResult(audio_data=b"...", content_type="audio/mpeg", format=format)
async def list_voices(self):
return [VoiceInfo(voice_id="default", name="Default", provider=self.name)]
register_provider("custom", MyCustomProvider)
Web UI
web/ 目录中包含一个 Next.js 管理界面。
功能
- 连接到任意 TTS 中继服务器实例
- 浏览可用的提供程序及其状态
- 浏览每个提供程序的语音
- 使用任意语音测试 TTS 合成
- 下载生成的音频文件
运行 Web UI
bash
cd web
Install dependencies
npm install
Run development server
npm run dev
Build for production
npm run build
npm start
UI 将可在 http://localhost:3000 访问
截图
Web UI 提供:
- 仪表盘 - 服务器连接状态和配置文件信息
- TTS 测试器 - 使用任意提供程序和语音生成语音
- 提供程序 - 查看所有已配置的提供程序及其设置
- 语音 - 浏览每个提供程序的可用语音
开发
bash
Install with dev dependencies
pip install -e ".[dev]"
Run with auto-reload
python -m tts_relay.main --reload
Run tests
pytest
许可证
MIT 许可证 - 请参阅 LICENSE 文件。同作者(Gishi1)的其他插件
扫码进群