A TTS that fits in your CPU (and pocket)
Pocket TTS
一款轻量级文本转语音(TTS)应用,专为在 CPU 上高效运行而设计。
不用再为使用 GPU 和托管 TTS 模型的 Web API 而烦恼。借助 Kyutai 的 Pocket TTS,生成语音只需执行 pip install 并调用一个函数。
支持 Python 3.10、3.11、3.12、3.13 和 3.14。需要 PyTorch 2.5 及以上版本。无需使用 PyTorch 的 GPU 版本。
🔊 演示 | 🐱💻GitHub 仓库 | 🤗 Hugging Face 模型卡 | ⚙️ 技术报告 | 📄 论文 | 📚 文档
核心亮点
- 可在 CPU 上运行
- 模型小巧,参数量 100M
- 支持音频流式传输
- 低延迟,约 200ms 即可获取首个音频块
- 快于实时,在 MacBook Air M4 的 CPU 上可达约 6 倍实时速度
- 仅使用 2 个 CPU 核心
- 提供 Python API 和 CLI
- 支持声音克隆
- 多语言支持:英语、法语、德语、葡萄牙语、意大利语、西班牙语
- 可处理无限长的文本输入
- 可在浏览器中的客户端运行
未来可能会增加更多语言。
无需安装,直接通过网站试用
访问 Kyutai 网站,即可直接在浏览器中试用。你可以输入文本、选择不同音色,并生成语音,全程无需安装。
通过 CLI 试用
generate 命令
你可以在命令行中直接使用 pocket-tts。我们推荐使用
uv,它会在隔离环境中即时安装所需依赖(uv 安装说明见 这里)。
你也可以使用 pip install pocket-tts 手动安装。
在 Linux 上,请查看 仅 CPU 安装,以避免引入 PyTorch 的 CUDA 版本。
这会生成一个 wav 文件 ./tts_output.wav,使用默认语音朗读默认文本,并显示一些速度统计信息。
uvx pocket-tts generate
# or if you installed it manually with pip:
pocket-tts generate
使用 --voice 修改音色,使用 --text 修改文本。我们提供一份小型音色目录。
在运行 generate、export-voice 或 serve 时,可使用 --language 选择预训练语言模型(默认:english)。非英语语言还提供了更大的 24 层变体,质量更高,但速度较慢。例如,可使用 --language italian_24l 进行选择。
--config 选项可接受本地 YAML 路径、https:// URL 或 hf:// 路径(例如 hf://<repo_id>/<path>[@revision]),用于自定义权重。
您可以查看 此页面,其中详细列出了每种音色的许可证信息。
- alba (en)
- giovanni (it)
- lola (es)
- juergen (de)
- rafael (pt)
- estelle (fr)
- anna (en)
- azelma (en)
- bill_boerst (en)
- caro_davy (en)
- charles (en)
- cosette (en)
- eponine (en)
- eve (en)
- fantine (en)
- george (en)
- jane (en)
- jean (en)
- javert (en)
- marius (en)
- mary (en)
- michael (en)
- paul (en)
- peter_yearsley (en)
- stuart_bell (en)
- vera (en)
--voice 参数也可以接受普通 wav 文件作为声音克隆输入。
您可以使用自己的样本,或查看我们的 音色库。
我们建议在使用 Pocket TTS 之前先 清理样本,因为样本的音频质量也会被复现。
有关更多细节和示例,请查看 generate 文档。
若要快速尝试多种音色和提示,建议优先使用 serve 命令。
serve 命令
此外,你还可以启动一个本地服务器,通过 HTTP 请求生成音频。
uvx pocket-tts serve
# or if you installed it manually with pip:
pocket-tts serve
访问 http://localhost:8000 即可体验网页界面;由于模型在请求之间常驻内存,其速度会快于命令行。
请参阅 serve 文档 获取更详细的说明与示例。
export-voice 命令
对用于声音克隆的音频文件(如 .wav 或 .mp3)进行处理相对较慢,而加载 safetensors 文件 -- 由音频文件转换而来的语音嵌入 -- 则非常快。你可以使用 export-voice 命令完成该转换。请参阅 export-voice 文档 获取更详细的说明与示例。
将其作为 Python 库使用
你可以在 Colab 上通过 这里 试用该 Python 库。
使用以下方式安装该包:
pip install pocket-tts
# or
uv add pocket-tts
仅 CPU 安装
在 Linux 上,PyPI 默认提供 PyTorch 的 CUDA 构建版本,因此 pip install pocket-tts 也会
下载 nvidia-* CUDA 运行时 wheel 包,尽管 pocket-tts 运行在 CPU 上。这会使安装
体积增加数 GB(使用 torch 2.13 时,大约为 3 GB 而不是 200 MB)。从
PyTorch CPU 索引安装则会获取 CPU 构建版本,并且不会安装 NVIDIA 包:
pip install pocket-tts --extra-index-url https://download.pytorch.org/whl/cpu
若要无需安装即可运行 CLI,请将相同的索引传递给 uvx:
uvx --index https://download.pytorch.org/whl/cpu pocket-tts generate
使用 uv 时,请在项目中显式声明包索引:
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[tool.uv.sources]
torch = [{ index = "pytorch-cpu" }]
在 macOS 或 Windows 上不需要这样做,因为默认的 PyTorch wheel 包已经仅包含 CPU 支持。
你可以把这个包当作一个简单的 Python 库,用来根据文本生成音频。
from pocket_tts import TTSModel
import scipy.io.wavfile
tts_model = TTSModel.load_model()
voice_state = tts_model.get_state_for_audio_prompt(
"alba" # One of the pre-made voices, see above
# You can also use any voice file you have locally or from Hugging Face:
# "./some_audio.wav"
# or "hf://kyutai/tts-voices/expresso/ex01-ex02_default_001_channel2_198s.wav"
)
audio = tts_model.generate_audio(voice_state, "Hello world, this is a test.")
# Audio is a 1D torch tensor containing PCM data.
scipy.io.wavfile.write("output.wav", tts_model.sample_rate, audio.numpy())
如果你有多个想要使用的音色,可以同时保留多个音色状态。
load_model() 和 get_state_for_audio_prompt() 是相对耗时的操作,
因此如果条件允许,建议将模型和音色状态保留在内存中。
为了加快音色加载,你可以将音色状态导出为 safetensors 文件:
from pocket_tts import TTSModel, export_model_state
model = TTSModel.load_model()
# Export a voice state for fast loading later
model_state = model.get_state_for_audio_prompt("some_voice.wav")
export_model_state(model_state, "./some_voice.safetensors")
# Later, load it quickly, this is quite fast as it's just reading the kvcache
# from disk and doesn't do any others computations.
model_state_copy = model.get_state_for_audio_prompt("./some_voice.safetensors")
audio = model.generate_audio(model_state_copy, "Hello world!")
你可以查阅 Python API 文档 了解更多细节和示例。
GPU 运行
Pocket TTS 专为在 CPU 上运行而设计。在单线程 CPU 性能较强的硬件上(例如 Apple Silicon),我们没有观察到 GPU 加速效果,这主要是因为 batch size 为 1,且模型非常小。不过,实际表现取决于硬件:在一台配备 Tesla T4 的云端 x86 VM(4 vCPUs)上实测,将模型迁移到 GPU 后,相比 CPU 可稳定获得约 2.6 倍的速度提升(对于短文本和长文本输入,CPU 上的 RTF 约为 2.3-2.5x,GPU 上约为 6.28x)。如果你的 CPU 受线程数限制,或整体弱于现代笔记本芯片,那么尝试使用 GPU 是值得的。
这并非官方支持(TTSModel.load_model() 没有 device 参数),但由于 TTSModel 是一个普通的 nn.Module,你可以自行移动它:
tts_model = TTSModel.load_model()
tts_model.to("cuda")
...
audio = tts_model.generate_audio(voice_state, "Hello world, this is a test.")
# generate_audio() returns a tensor on the same device as the model, so on GPU you need
# to move it back to CPU before calling .numpy():
scipy.io.wavfile.write("output.wav", tts_model.sample_rate, audio.detach().cpu().numpy())
如果你想使用 GPU,有几点需要注意:
generateCLI 命令提供了--device选项(默认值为cpu,在 CLI 参考 中有说明 — 注意,该页面自身的描述(“由于模型很小,使用 GPU 可能不会带来速度提升”)正是本小节要纠正的内容,依据是上面的 T4 测量结果);serve命令和 Docker 镜像未提供任何设备选项,并且始终在 CPU 上运行。pip install pocket-tts/uv add pocket-tts会安装 PyPI 上当前可用的torch构建,它可能需要比你驱动所支持的更新 CUDA 版本。此时torch.cuda.is_available()会静默返回False(你只会看到一个关于过时驱动的UserWarning,而不是错误)。如果发生这种情况,请显式安装与你的驱动 CUDA 版本匹配的torch构建,例如pip install torch --index-url https://download.pytorch.org/whl/cu121。quantize=True(int8 动态量化)仅在 CPU 上可用;在对已移到 CUDA 的模型上调用时,会抛出NotImplementedError: Could not run 'quantized::linear_dynamic' ... 'CUDA' backend。 另外,可选的torchao后端(pip install pocket-tts[quantize])声明了torch>=2.11— 对于全新安装来说没有问题(截至本文撰写时,PyPI 上已有 torch 2.11+),但如果你固定了较旧的torch(例如为了匹配较旧的 GPU 驱动的 CUDA 构建,如上文所述),添加这个附加依赖可能会引入与你固定的torch不兼容的torchao,即使是在 CPU 上也会使quantize=True失效。请确保torchao对torch的版本要求与你实际安装的torch一致。
不支持的功能
目前,我们尚未支持以下功能(但欢迎提交 Pull Request 来添加):
我们尝试在 GPU 上运行该 TTS 模型,但在单线程 CPU 性能非常强劲的硬件上,并未观察到相较于 CPU 执行有速度提升,尤其因为我们使用批大小为 1,并且模型非常小。关于其他硬件上的测量结果以及自行尝试时需要注意的事项,请参见上文"在 GPU 上运行"部分。
开发与本地环境配置
我们欢迎贡献!欢迎在 GitHub 上提交 issue 或 Pull Request。
你可以在 CONTRIBUTING.md 文件中找到开发说明。其中还介绍了如何以可编辑模式安装包,用于本地开发。
浏览器端实现
Pocket TTS 足够轻量,可直接以 WebAssembly/JavaScript 形式在浏览器中运行。 我们目前尚未提供官方支持,但你可以试用以下任一社区实现:
- wasm-pocket-tts,由 @LaurentMazare 提供:使用 XN 实现的 Pocket TTS Rust 移植版。演示可在此查看
- pocket-tts-onnx-export,由 @KevinAHM 提供:将模型导出为 .onnx,并使用 ONNX Runtime Web 运行。演示可在此查看
- pocket-tts,由 @babybirdprd 提供:Candle 版本(Rust),提供 WebAssembly 和 PyO3 绑定,因此也可在网页端运行。
- jax-js,由 @ekzhang 提供:使用 jax-js,即一个面向 Web 的机器学习库。演示可在此查看
替代实现
- pocket-tts-mlx,由 @jishnuvenugopal 提供 —— 针对 Apple Silicon 优化的 MLX 后端
- pocket-tts-xn,由 @LaurentMazare 提供 —— 使用 XN 实现的 Pocket TTS Rust 移植版。
- pocket-tts-candle,由 @babybirdprd 提供 —— Candle 版本(Rust),提供 WebAssembly 和 PyO3 绑定。
- PocketTTS.cpp,由 @VolgaGerm 提供 —— 基于 ONNX Runtime 的单文件 C++ 运行时,支持 CLI、HTTP 服务和 FFI C API。
- sherpa-onnx,由 @csukuangfj 提供 —— 可在 Windows、macOS、Linux 以及嵌入式开发板(Raspberry Pi、Jetson、RK3588 等)上运行 PocketTTS,并提供 12 种编程语言的绑定:C++、C、Python、JavaScript、Java、C#、Kotlin、Swift、Go、Dart、Rust、Pascal,此外还提供 WebAssembly。
- pocket-tts-csharp,由 @TheAjaykrishnanR 提供 —— 一个使用 TorchSharp 和 TorchSharp.PyBridge 实现的 Pocket TTS C# 移植版,便于在 .NET 项目中作为库使用。
- pocket-tts-timestamped,由 @dpm63 提供 —— 一个新增词级时间戳支持的派生版本。
- Pocket-TTS-LiteRT,由 @john-rocky 提供 —— LiteRT(.tflite)模型图,可通过 LiteRT CompiledModel API 在 Android 手机 GPU 上运行,在 Pixel 8a 上约可达到 1 倍实时速度,并附带 Python 和 Kotlin 使用示例。
社区训练的模型
若要使用社区模型,只需使用 --config 参数,并将其指向该模型 yaml 文件的 url。例如:
uvx pocket-tts generate --config https://raw.githubusercontent.com/kyutai-labs/pocket-tts/refs/heads/main/pocket_tts/config/english_2026-04.yaml
It also works with Hugging Face URLs like hf://kyutai/pocket-tts/config/english_2026-04.yaml or local paths like ./english_2026-04.yaml.
上述列出的预置声音均为使用我们发布的权重预先计算得到的嵌入,因此不适用于社区模型。使用 --config 时,--voice 默认为 alba 的音频文件,任何模型都可以克隆该声音。向 --voice 传入你自己的音频文件,即可使用其他声音。
我们建议在 URL 中以某种方式插入 commit hash,以避免模型作者引入破坏性更改。例如:
uvx pocket-tts generate --config https://raw.githubusercontent.com/kyutai-labs/pocket-tts/891886a61a1ed45fd429a0a63bd96181e6cff637/pocket_tts/config/english_2026-04.yaml
或使用 hf://...
uvx pocket-tts generate --config hf://user/repo/config_file.yaml@commit_hash
社区训练模型列表
- pocket-tts-czech 由 @vvolhejn 提供(Kyutai 内部训练):
uvx pocket-tts generate \
--config hf://vvolhejn/pocket-tts-czech/czech.yaml@7b7760dd0fe994a0800f2fdbc837dc4b8f219d1c \
--text "Dnešek je velmi dobrý den"
- Pocket TTS Hindi 由 Saryps Labs 发布(社区研究版本):
uvx pocket-tts generate \
--config hf://saryps-labs/pocket-tts-hindi/config.yaml@dbaa326069d20bfbdaeb625613736773741a24ea \
--text "आज का दिन बहुत अच्छा है"
- Pocket TTS 韩语 300M 由 @seastar105(社区研究版):
uvx pocket-tts generate \
--config hf://seastar105/pocket-tts-korean-300m/korean.yaml@df328c817a02866f20a6f74e5183e0a1fc6f6435 \
--text "안녕하세요. 한국어 음성 합성 모델입니다."
想让你的模型出现在这里?前往 training Readme 开始吧!
使用 Pocket TTS 的项目
- pocket-reader 由 @lukasmwerner 开发 —— 浏览器屏幕阅读器
- pocket-tts-wyoming 由 @ikidd 开发 —— 基于 Wyoming 协议的 pocket-tts Docker 容器,可直接用于 Home Assistant Voice。
- Sonorus 由 @KevinAHM 开发 —— 在《霍格沃茨之遗》中,使用角色原声与任意有名字的角色对话。
- Native macOS App 由 @slaughters85j 开发 —— 原生 macOS 应用,无需 Python。通过 Core ML 运行 Pocket-TTS,完全在设备本地运行。包含已签名并完成公证的 .app 版本。
- Electron macOS App 由 @slaughters85j 开发 —— Electron Mac 桌面应用 + macOS 快速操作
- pocket-tts-openai_streaming_server 由 @teddybear082 开发 —— 兼容 OpenAI 的流式服务,已 Docker 化,并提供
.exe发布版本 - pocket-tts-unity 由 @lookbe 开发 —— Pocket-TTS 的 Unity 6 集成方案。
- ComfyUI-Pocket-TTS 由 @ai-joe-git 开发 —— ComfyUI 的轻量级 CPU 文本转语音插件
- pocket-tts-server 由 @ai-joe-git 开发 —— 轻量级实时语音克隆与聊天服务器,提供兼容 OpenAI 的 API。仅需 20 秒音频即可克隆任意声音,并立即使用该声音与 AI 对话。
- discord-tts 由 @alkmei 开发 —— 使用 Pocket TTS 的多语音 Discord 文本转语音机器人。
- cursed-codex 由 @dooart 开发 —— 带狂野实时足球解说风格的 AI 编码智能体
- pocket-tts-deno —— pocket-tts-server 的移植版本,作为基于 wasm + onnx 的 Deno 服务器,提供语音 TTS API。
- FrontPocket 由 @markd89 开发 —— Pocket-TTS 前端,可朗读来自剪贴板、文件、CLI(快捷键)和 GUI 工具栏的文本。可即时调整播放速度和音色,并在句子间快速前进/后退。
- openclaw-pockettts 由 @dodgyrabbit 开发 —— 包含 Python 实现的 Docker 容器,并暴露为 OpenAI TTS API,便于与 OpenClaw 集成。
- openclaw-pocketts.cpp 由 @dodgyrabbit 开发 —— 包含 PocketTTS.cpp 版本的 Docker 容器,已打包以便轻松集成到 OpenClaw。
- tts-audiobook-tool 由 @zeropointnine 开发 —— 多模型有声书生成器,支持自动错误检测、48 kHz 升频、同步浏览器阅读器以及独立服务器模式。
- seshat-tts 由 @scriptriva 开发 —— 为游戏和应用提供实时语音合成的无障碍工具。它还提供语音管理器,可基于用户预设克隆声音。
- LocalVocal.ai 由 @joshwhiton 开发 —— 面向 Apple Silicon Mac 的完全本地化对话语音框架。包含语音活动与轮次检测、听写、语音克隆,以及用于与 Claude、Codex 等对话的 CLI。
禁止用途
本模型的使用必须遵守所有适用的法律法规,且不得导致、涉及或促成任何非法、有害、欺骗性、欺诈性或未经授权的活动。禁止用途包括但不限于:未经明确且合法同意进行的语音仿冒或克隆;虚假信息、错误信息或欺骗行为(包括虚假新闻、欺诈性电话,或将生成内容呈现为真实人物或事件的真实录音);以及生成违法、有害、诽谤、辱骂、骚扰、歧视、仇恨或侵犯隐私的内容。对于任何不合规使用,我们概不承担任何责任。
作者
Manu Orsini*, Simon Rouard*, Gabriel De Marmiesse*, Václav Volhejn, Neil Zeghidour, Alexandre Défossez
*共同贡献