DeepSeek Harness Hub
← 返回列表

Gishi1/OpenAI-TTS-API-Relay-Server

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

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 文件。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群