跳到主要内容

tts-proxy API

个人 TTS 中转接口。公网路径统一挂在 /api/tts-proxy,目前接两个上游:

  • Google Translate 非官方 TTS:GET,返回 MP3。
  • MiMo V2.5 TTS:POST,返回 WAV。

这两个中转接口不做服务端排队,正常按请求并发直发到上游。

路由

GET  /api/tts-proxy
GET /api/tts-proxy/health
GET /api/tts-proxy/google?text=Good%20job&lang=en
POST /api/tts-proxy/mimo

GET /api/tts-proxy/google

中转这个上游:

https://translate.google.com/translate_tts?ie=UTF-8&tl=en&client=tw-ob&q=Good+job

服务端拼接规则:

ie=UTF-8
tl=<lang 或 tl,默认 en>
client=tw-ob
q=<text>

参数:

字段必填默认说明
text-要合成的文本。服务端限制 200 字符以内。
langen语言代码,例如 enzh-CNja
tl-lang 的别名;同时传时优先使用 lang
formatmp3只作为调用方标识保留;上游固定返回 audio/mpeg,不能调音色、音调或语速。

示例:

curl "https://6767.chat/api/tts-proxy/google?text=Good%20job&lang=en" \
--output google.mp3

Google 长度探测

2026-05-22 通过 translate.google.com/translate_tts 实测:

q 字符数HTTPContent-Type
1200audio/mpeg
50200audio/mpeg
100200audio/mpeg
150200audio/mpeg
200200audio/mpeg
201400text/html; charset=utf-8

因此中转把 text 限制为 200 字符。更长文本需要客户端自己分段,多段音频自行拼接。

POST /api/tts-proxy/mimo

中转 MiMo V2.5 TTS OpenAI 兼容接口:

POST https://api.xiaomimimo.com/v1/chat/completions

服务端使用环境变量:

MIMO_API_KEY=<你的 key>

也兼容:

XIAOMIMIMO_API_KEY=<你的 key>
MIMO_API_URL=https://api.xiaomimimo.com/v1/chat/completions
TTS_PROXY_URL=http://127.0.0.1:7890

海外上游默认走 http://127.0.0.1:7890。如果要直连,设置 TTS_PROXY_URL=direct

MiMo 是国内上游,中转策略是优先直连;只有网络层请求失败时才 fallback 到代理。HTTP 4xx/5xx 会直接返回错误,不会自动重试。

并发与限流

服务端对全部 /api/* 请求加了并发上限:

MAX_CONCURRENT_API_REQUESTS=500

超过时服务端直接返回:

429 Too Many Requests

Google 和 MiMo 这两个 TTS proxy 不做内部串行队列,也不做列表轮询;单个请求会直接并发发给对应上游。

如果上游自己返回 429,中转会直接透传 429,不会改写成 502

请求参数:

字段必填默认说明
text-要合成的正文,服务端限制 3000 字符以内。
voicemimo_default预置音色 ID,例如 mimo_default冰糖茉莉苏打白桦MiaChloeMiloDean
prompt风格自然语言控制,放到 MiMo 的 user message。
styleprompt 的别名。

服务端固定:

{
"model": "mimo-v2.5-tts",
"audio": {
"format": "wav"
}
}

示例:

curl -X POST "https://6767.chat/api/tts-proxy/mimo" \
-H "Content-Type: application/json" \
--data '{"text":"测试一下 MiMo 语音合成。","voice":"冰糖"}' \
--output mimo.wav

带风格控制:

curl -X POST "https://6767.chat/api/tts-proxy/mimo" \
-H "Content-Type: application/json" \
--data '{"text":"今天的任务完成了。","voice":"Chloe","prompt":"Bright, bouncy, fast pace, rising pitch at the end."}' \
--output mimo.wav

GET /api/tts-proxy/health

返回两个上游的配置状态,不会请求上游。

{
"success": true,
"service": "tts-proxy",
"status": "ok",
"concurrency": {
"active": 0,
"limit": 500
},
"providers": {
"google": {
"upstream": "https://translate.google.com/translate_tts",
"textMaxLength": 200,
"format": "mp3",
"outboundProxyConfigured": true
},
"mimo": {
"upstream": "https://api.xiaomimimo.com/v1/chat/completions",
"model": "mimo-v2.5-tts",
"credentialsConfigured": true,
"textMaxLength": 3000,
"defaultVoice": "mimo_default",
"format": "wav",
"outboundProxyConfigured": true,
"proxyMode": "direct-first"
}
}
}

错误

状态码说明
400缺少 text、文本过长,或 Google lang/tl 格式无效。
500MiMo key 没有配置。
429服务端并发超过 500,或 Google / MiMo 上游自身返回 429。
502上游请求失败、上游返回非音频或 MiMo 没有返回音频 data。

更新日志

2026-05-22 初始发布

  • 新增 /api/tts-proxy/google,中转 Google Translate 非官方 TTS。
  • 新增 /api/tts-proxy/mimo,中转 MiMo V2.5 TTS。
  • Google text 限制为 200 字符;MiMo text 限制为 3000 字符。
  • TTS proxy 不做服务端排队;上游 429 直接透传。