我需要这个吗?
“本地”有两种含义:在浏览器中运行的 SSN 内置音色,或你自己运行的语音服务器。
| 我想要… | 执行操作 |
|---|---|
| 无需安装的免费音色 | 使用 内置音色。大多数人做到这里即可。 |
| 使用我已经运行的语音服务器 | 连接服务器. |
| 克隆音色 | 参阅 音色克隆. |
| OBS 中的 Fish Audio | 请参阅 Fish Audio 设置. |
| 付费云端音色 | 请参阅 TTS 参考. |
内置音色(无需安装)
它们直接在浏览器的 SSN 中运行,无需服务器、Docker 或 API 密钥。
| 音色 | 音质 | 电脑负载 | 链接参数值 |
|---|---|---|---|
| Kokoro | 出色 | 中等,GPU 更快。 | ttsprovider=kokoro |
| Piper | 很好 | 低,仅 CPU。 | ttsprovider=piper |
| Kitten | 良好 | 很低,仅 CPU。 | ttsprovider=kitten |
| eSpeak-NG | 机械感 | 极低,仅 CPU。 | ttsprovider=espeak |
四步设置
- 添加
&speech=en-US&ttsprovider=kokoro到您的dock.html链接。(或piper,kitten,espeak.) - 将该链接作为以下来源加入 OBS: 浏览器来源。声音由该页面产生。
- 在属性中开启 通过 OBS 控制音频.
- 发送简短测试聊天,例如
Testing local TTS.
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kokoro
连接自己的 TTS 服务器
服务器可提供更多音色、音色克隆,或让多个工具共用一种声音。SSN 按以下接口与其通信: 兼容OpenAI 语音服务器,无需 API 密钥。
- 启动服务器。 Kokoro-FastAPI 最简单。
- 在 SSN 打开 TTS 提供商列表并选择 自定义/本地文字转语音端点.
- 在 自定义 / 本地 API 端点,输入服务器地址,例如
http://127.0.0.1:8880/v1/audio/speech. - API 密钥留空。
- 选择服务器认识的音色:
af_bella用于 Kokoro,nova用于 openedai-speech。 - 将链接复制到 OBS 并发送测试聊天。
| 服务器 | 模型 | GPU | 磁盘 | 端口 |
|---|---|---|---|---|
| Kokoro-FastAPI (推荐) | Kokoro 82M | 可选 | ~2 GB | 8880 |
| openedai-speech (Piper) | Piper | 仅CPU | <1 GB | 8000 |
| kokoro-web | Kokoro 82M | 可选 | ~2 GB | 3000 |
这些需要 Docker Desktop 已安装并运行,个人使用免费。
localhost 规则
这是最常见的错误。
localhost 和 127.0.0.1 始终表示“当前这台电脑”。 如果 OBS 与语音服务器位于两台电脑, 127.0.0.1 在 OBS 中指向 OBS 电脑。
| 您的配置 | 使用此地址 |
|---|---|
| OBS 和服务器在同一台电脑 | http://127.0.0.1:8880/v1/audio/speech |
| 服务器在家中另一台电脑 | http://192.168.x.x:8880/v1/audio/speech,改为该电脑的本地 IP |
| SSN 应用测试正常,OBS 无声 | OBS 需要自己能访问的地址。应用测试成功不能证明 OBS 能访问服务器。 |
还要确认防火墙允许该端口,且 Docker 已公开端口(-p 8880:8880).
Kokoro-FastAPI
Kokoro-FastAPI 将 Kokoro 作为本地服务器运行。支持 CPU,无需 GPU。
- 打开终端(命令提示符、PowerShell 或 Terminal),运行以下一种:
docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2
NVIDIA GPU(更快):
docker run --gpus all -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-gpu:v0.2.0post4
首次运行下载约 1.5–2 GB,只需一次。 - 打开
http://localhost:8880/web/。应出现可试听音色的页面(超过 67 种)。 - 使用此链接(服务器在另一台电脑时修改地址):
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8880/v1/audio/speech&voiceopenai=af_bella
af_bella, af_sarah, am_adam 或 bf_emma。OpenAI 音色名,例如 nova 或 alloy 可能无效。随 Docker 自动启动:
docker run -d --restart unless-stopped -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2
openedai-speech(Piper 和 XTTS-v2)
方案 A:轻量 Piper 服务器(CPU)
不到 1 GB,不支持音色克隆。
docker run -d --restart unless-stopped -p 8000:8000 ghcr.io/matatonic/openedai-speech-min
音色: alloy, echo, fable, onyx, nova, shimmer.
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=openai&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova
在 Windows 从源码运行(HTTP 500 错误)
添加其虚拟环境中的 Scripts 文件夹添加到 PATH ,否则找不到 piper.exe 或 ffmpeg.exe.
cd openedai-speech $env:Path = "$PWD\.venv\Scripts;$env:Path" .\.venv\Scripts\python.exe speech.py --xtts_device none -H 127.0.0.1 -P 8000
方案 B:XTTS-v2 音色克隆(GPU)
需要完整服务器,而不是 openedai-speech-min。预计需要约 4 GB 显存,CPU 也能运行但较慢。
四步设置 XTTS-v2
- 获取并启动服务器:
git clone https://github.com/matatonic/openedai-speech.git cd openedai-speech Copy-Item sample.env speech.env docker compose up -d
在macOS或Linux上使用cp sample.env speech.env。Docker 需要 GPU 访问权限,模型首次使用时下载。 - 准备获准使用的干净参考音频:单声道、22050 Hz、6–30 秒:
ffmpeg -i input.mp3 -ac 1 -ar 22050 -t 6 -y voices/me.wav
- 在
config/voice_to_speaker.yaml,在现有的以下部分添加:tts-1-hd部分(保留已有音色):tts-1-hd: me: model: xtts speaker: voices/me.wav language: en更改me改为 SSN 将发送的名称。 - 运行
docker compose restart,然后使用:dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8000/v1/audio/speech&openaimodel=tts-1-hd&voiceopenai=me&openaiformat=wav
openaimodel=tts-1-hd 是必需的。 没有它时 SSN 发送 tts-1,服务器会改用 Piper。 voiceopenai 必须与 YAML 文件中的音色名称一致。被浏览器拦截?运行 桥接 ,只更改 openaiendpoint 为 http://127.0.0.1:8124/v1/audio/speech.
本地 TTS 桥接
SSN 的小型辅助程序:接收 SSN 请求,转交语音服务器,再以浏览器可接受的方式返回音频。需要 Node.js。
http://127.0.0.1:8124/v1/audio/speech,即使语音服务器在另一台电脑也是如此。
- 告诉桥接服务器的位置。PowerShell:
$env:SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech"
服务器在另一台电脑?使用其本地 IP,例如http://192.168.x.x:8880/v1/audio/speech. - 在 SSN 文件夹中运行
node scripts/local-tts-bridge.cjs。保持运行。 - 让 SSN 指向桥接:
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=af_bella
macOS/Linux,一行命令: SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech" node scripts/local-tts-bridge.cjs。在 local-tts-bridge 文件夹中, node server.cjs 效果相同。用以下参数更改端口: SSN_TTS_BRIDGE_PORT=8125。所有选项: 桥接服务README.
GPT-SoVITS 模式
GPT-SoVITS使用自己的 /tts 格式,由桥接转换。
$env:SSN_TTS_REF_AUDIO_PATH="C:\voices\speaker.wav" $env:SSN_TTS_REF_TEXT="Reference audio transcript here." $env:SSN_TTS_TARGET="http://127.0.0.1:9880/tts" node scripts/local-tts-bridge.cjs --mode gptsovits
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&openaiformat=wav
F5-TTS 服务器模式
部分 F5-TTS 包装层使用 /synthesize_speech/?text=...&voice=...。桥接负责格式转换。
$env:SSN_TTS_TARGET="http://127.0.0.1:7860/synthesize_speech/" node scripts/local-tts-bridge.cjs --mode f5
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=default_en&openaiformat=wav
声音克隆
克隆不是 SSN 设置,而是部分语音服务器的功能。SSN 发送聊天文字,服务器选择克隆音色。
- 录制一位说话者的干净音频,通常 3–30 秒,尽量减少背景噪声。
- 部分服务器也需要音频中说出的准确文字。
- 服务器将音频转换成音色配置。
- SSN 通过以下方式发送聊天文字:
ttsprovider=customtts. - 服务器返回音频(通常 WAV 或 MP3),SSN 负责播放。
显存不超过 6 GB 时,先从兼容 OpenAI 服务器上的小模型开始。大模型也可用,但可托管到别处。
| 选项 | 克隆所需材料 | 6 GB GPU 够用吗? | 如何连接 |
|---|---|---|---|
| XTTS-v2 / openedai-speech | 简短 WAV 音频 | 可以,约 4 GB | 直连, /v1/audio/speech。项目已归档。 |
| chatterbox-tts-api / Chatterbox-TTS-Server | 参考音频 | 使用 Turbo 或较小分段时很可能够用 | 直连或桥接。GPU 比 CPU 更流畅,设置因分支而异。 |
| Qwen3-TTS (0.6B / 1.7B) | 3 秒音频 | 很可能够用(0.6B Base) | 需要兼容 OpenAI 的包装层。 |
| GPT-SoVITS | 5 秒,1 分钟效果更好 | 使用 fp16 / 轻量安装时很可能够用 | 桥接 --mode gptsovits. |
| F5-TTS | 音频及其文字稿 | 可能 | 包装层或桥接 --mode f5 带有 F5-TTS_server. |
| MisoTTS 8B | 提示音频 | 不够,推荐 24 GB | 仅远程托管,仓库中没有本地 REST 端点。 |
内置 Kokoro 和 Kokoro-FastAPI 不支持音色克隆。
已通过 SSN 测试的内容
已使用以下两种方式检查: dock.html 和 featured.html:
- openedai-speech (Piper):已验证 CPU 真实语音,含直连和桥接。
- Chatterbox-TTS-Server:已验证 CPU 真实语音,使用
Emily.wav,包括直接连接和通过桥接连接。 - chatterbox-tts-api:已验证请求格式,含直连和桥接。
- GPT-SoVITS 和 F5-TTS_server:仅通过桥接模式。
- F5-TTS官方项目 和 Qwen3-TTS:需要先加包装层(仅提供 CLI、Gradio 或库)。
需要什么电脑?
这是粗略起点,不是保证。模型大小、文本长度和其他应用都会影响内存用量。
| 选项 | 最低配置 | 较舒适配置 |
|---|---|---|
| 系统文字转语音/eSpeak | 任何电脑 | 任何电脑 |
| 内置Kitten | 低端CPU,4 GB内存 | 笔记本 CPU,8 GB 内存 |
| 内置Piper | 现代 CPU,4–8 GB 内存 | 现代CPU,8 GB内存 |
| 内置Kokoro | 现代CPU,8 GB内存 | WebGPU GPU 或快速 CPU,8–16 GB 内存 |
| Kokoro-FastAPI | CPU,8 GB内存 | 可选 NVIDIA GPU,8–16 GB 内存 |
| openedai-speech Piper | CPU,4–8 GB 内存 | CPU,8 GB内存 |
| openedai-speech XTTS | NVIDIA GPU 约 4 GB,8–16 GB 内存 | 6 GB以上显存的NVIDIA GPU,16 GB内存 |
| Chatterbox | 部分版本可用 CPU,较慢 | 6 GB以上显存的NVIDIA GPU,16 GB内存 |
| GPT-SoVITS / F5-TTS / Qwen3-TTS | CPU 可测试,较慢 | 6 GB以上显存的NVIDIA GPU,16 GB内存 |
| MisoTTS 8B | 6 GB 不够 | 24 GB GPU 或远程主机 |
将音频送入 OBS
OBS 浏览器源(推荐)
适用于内置音色和自己的服务器。
- 添加一个 浏览器来源 ,使用你的
dock.htmlTTS 链接。 - 开启 通过 OBS 控制音频.
- 点击 确定。TTS 现在会出现在 OBS 混音器中。
SSN 桌面应用
桌面应用使用相同链接设置,但声音从应用而非 OBS 播放。使用以下方式采集: 桌面音频 或 音频输入捕获(Audio Input Capture)。要将 TTS 与其他声音分开,请将应用输出到虚拟音频线: 音频路由步骤.
更多桌面应用细节
应用窗口对浏览器权限(CORS)的限制比 Chrome 少。服务器拒绝浏览器请求时,桥接仍是最稳妥的选择。内置 Kokoro 可使用应用自身的 ninjafy.tts 路径,而不在浏览器中加载模型。
&speech=en-US 且未指定提供商)取决于 OBS 中已有的音色。通常没有,或无法产生可采集的声音。请改用上面的提供商。并排比较
| 选项 | 设置 | 质量 | 私人 | 可用于 OBS | 费用 |
|---|---|---|---|---|---|
| 内置Kokoro | 无 | 5/5 | 是 | 是 | 免费 |
| 内置Piper | 无 | 4/5 | 是 | 是 | 免费 |
| 内置Kitten | 无 | 3/5 | 是 | 是 | 免费 |
| 内置eSpeak | 无 | 2/5 | 是 | 是 | 免费 |
| Kokoro-FastAPI | Docker | 5/5 | 是 | 是 | 免费 |
| openedai-speech | Docker | 4/5 | 是 | 是 | 免费 |
| ElevenLabs | API 密钥 | 5/5 | 否 | 是 | 付费方案 |
| 系统 TTS | 无 | 2/5 | 是 | 需要设置音频路由 | 免费 |
解决问题
| 问题 | 试试这个 |
|---|---|
| 应用测试正常,OBS 无声 | OBS 必须自行访问服务器。服务器在另一台电脑?替换 127.0.0.1 替换为本地 IP。检查 通过 OBS 控制音频。仍被拦截?在 OBS 电脑运行桥接。 |
| 只读第一个字母或几个单词 | 移除 ttsquick ,从 OBS 链接移除(例如 &ttsquick=14)并刷新。测试时也移除 typewriter= 排除时序问题。 |
| 服务器无响应 | 确认 Docker 和容器正在运行。在服务器电脑打开 http://127.0.0.1:8880/web/ (Kokoro-FastAPI 或你的服务器端口)。在 OBS 电脑打开 http://SERVER_LAN_IP:8880/web/。如果失败,OBS 也无法访问,请检查服务器防火墙。 |
| “Blocked by CORS”、“private network”或“failed fetch” | 请求尚未到达服务器就被浏览器拦截。运行 node scripts/local-tts-bridge.cjs 在 OBS 电脑上运行,并使用 http://127.0.0.1:8124/v1/audio/speech。托管的测试版 Dock 页面更容易被拦截,桥接或本地应用窗口更方便。 |
| 音色不对或找不到音色 | Kokoro-FastAPI: af_bella, af_sarah, am_adam,或其网页中的音色。openedai-speech: nova, echo, alloy。部分服务器区分大小写。 |
| 能播放但 OBS 采集不到 | 开启 通过 OBS 控制音频。测试时观察 OBS 混音器音量表,确保已设置 &ttsprovider=;系统 TTS 可能需要桌面音频或虚拟音频线。 |
| 找不到Docker镜像 | 镜像标签会变化,请在以下位置查看当前标签: Kokoro-FastAPI 或 openedai-speech. |
面向服务器开发者
SSN 与自定义服务器的通信方式。仅在构建或调试服务器时需要阅读。
chat text -> SSN -> your endpoint (or the bridge) -> TTS server -> audio -> SSN plays it
SSN 发送什么
带有 ttsprovider=customtts, localtts 或 openai,SSN 发送 JSON POST:
POST /v1/audio/speech
{
"model": "tts-1",
"input": "Chat message text",
"voice": "af_bella",
"response_format": "mp3",
"speed": 1.0
}
未设置 API 密钥时,SSN 不发送 Authorization 请求头。
SSN 能播放什么
| 响应 | 是否可用? | 说明 |
|---|---|---|
| 音频文件 | 是 | 最佳。 audio/mpeg, audio/wav, audio/ogg, audio/aac,或浏览器可播放的任何格式。 |
| 包含音频 URL 的 JSON | 是 | 检查 url, audio_url, output_url, data.url,以及第一个 data[] 条目。 |
| 包含base64音频的JSON | 是 | 检查 audio, audio_data, audioContent, b64_json、嵌套的 data 字段,以及数据URL。 |
| 原始PCM | 仅在有封装时 | 以 WAV 文件或 base64 WAV 发送。 |
格式: mp3 体积小且广泛支持。 wav 适合克隆服务器和桥接测试。使用 opus 仅在服务器和浏览器均支持时使用。
暂不支持流式播放。 SSN 等待完整响应后再播放,请保持聊天消息简短。
自己的服务器链接设置
| 设置 | 示例 | 功能 |
|---|---|---|
ttsprovider | customtts | 使用自己的服务器。(openai 也可用。) |
openaiendpoint | http://localhost:8880/v1/audio/speech | 服务器地址,端口需与服务器一致。 |
speech | en-US | 开启英语 TTS。 |
voiceopenai | af_bella | 音色名称,取决于服务器。 |
openaimodel | tts-1-hd | 模型名称。默认 tts-1. |
openaiformat | mp3 | mp3、wav、opus 或 flac。 |
openaispeed | 1.0 | 语速(0.5–2.0)。 |
也接受: customttsendpoint, localttsendpoint, customttsvoice, localttsvoice, customttsmodel, localttsmodel, customttsformat, localttsformat。朗读选项,例如 simpletts, skipmessages 和 ttsquick 适用于所有提供商: 所有链接设置.
示例链接:
Kokoro-FastAPI: dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:8880/v1/audio/speech&voiceopenai=af_bella&openaispeed=1.1 openedai-speech: dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova kokoro-web: dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:3000/api/v1/audio/speech&voiceopenai=af_bella