开源项目

pocket-tts

pocket-tts

轻量级文本转语音模型,专为CPU高效推理设计,100M参数即可在笔记本CPU上实现6倍实时速度,首段音频延迟仅200ms。支持语音克隆、无限长文本和6种语言,提供Python API和CLI,以及基于HTTP的Web界面。相比同类TTS方案,无需GPU即可本地部署,pip安装即用,社区已适配多种后端(ONNX、Candle、MLX等)。研究向,使用需遵守禁止滥用条款(禁止未经授权的语音克隆、虚假信息等)。

README

Pocket TTS

pocket-tts-logo-v2-transparent

一个轻量级文本转语音(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+。不需要 GPU 版本的 PyTorch。

🔊 在线演示 | 🐱‍💻GitHub 仓库 | 🤗 Hugging Face 模型卡片 | ⚙️ 技术报告 | 📄 论文 | 📚 文档

主要亮点

  • 在 CPU 上运行
  • 模型体积小,仅 1 亿参数
  • 音频流式输出
  • 低延迟,约 200ms 即可获取第一个音频块
  • 超实时,在 MacBook Air M4 的 CPU 上约 6 倍实时
  • 仅占用 2 个 CPU 核心
  • 提供 Python API 和 CLI
  • 声音克隆
  • 多语言支持:英语、法语、德语、葡萄牙语、意大利语、西班牙语
  • 可处理无限长的文本输入
  • 可在浏览器客户端运行

未来可能会增加更多语言。

无需安装,直接在网站上试用

访问 Kyutai 网站 即可在浏览器中直接试用。无需任何安装,即可输入文本、选择不同的声音并生成语音。

使用 CLI 尝试

generate 命令

你可以直接从命令行使用 pocket-tts。我们推荐使用 uv,因为它会在隔离环境中动态安装所有依赖项(uv 安装说明见此处)。 你也可以使用 pip install pocket-tts 手动安装。

以下命令将生成一个 wav 文件 ./tts_output.wav,使用默认声音朗读默认文本,并显示一些速度统计信息。

uvx pocket-tts generate
# 或如果通过 pip 手动安装:
pocket-tts generate

使用 --voice 修改声音,使用 --text 修改文本。我们提供一个小型声音目录。 运行 generateexport-voiceserve 时,使用 --language 选择预训练的语言模型(默认:english)。非英语语言也有更大的 24 层变体,质量更高但速度较慢。例如,你可以通过 --language italian_24l 来选择它们。 --config 选项仅接受本地 YAML 路径,用于自定义权重。

你可以查看此页面,其中详细说明了每个声音的许可信息。

--voice 参数也可以接受一个普通的 wav 文件作为输入,用于声音克隆。你可以使用自己的文件,也可以查看我们的声音仓库。 我们建议在使用 Pocket TTS 之前先对样本进行清理,因为音频样本的质量也会被重现。

请查阅 generate 文档 以了解更多细节和示例。 若想快速尝试多种声音和提示文本,建议使用 serve 命令。

serve 命令

你也可以运行一个本地服务器,通过 HTTP 请求生成音频。

uvx pocket-tts serve
# 或如果通过 pip 手动安装:
pocket-tts serve

访问 http://localhost:8000 来尝试 Web 界面。由于模型会保留在内存中(跨请求),它比命令行更快。

你可以查看 serve 文档 以了解更多细节和示例。

export-voice 命令

处理用于声音克隆的音频文件(如 .wav 或 .mp3)相对较慢,但加载 safetensors 文件(从音频文件转换而来的声音 embedding(嵌入向量))则非常快。你可以使用 export-voice 命令进行此转换。请查看 export-voice 文档 以了解更多细节和示例。

作为 Python 库使用

你可以在 Colab 上试用该 Python 库,点击此处

使用以下命令安装包:

pip install pocket-tts
# 或
uv add pocket-tts

你可以将该包作为简单的 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"  # 预置声音之一,见上文
    # 也可以使用本地或来自 Hugging Face 的任何语音文件:
    # "./some_audio.wav"
    # 或 "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 是一个包含 PCM 数据的一维 torch tensor(张量)。
scipy.io.wavfile.write("output.wav", tts_model.sample_rate, audio.numpy())

如果你有多个需要使用的声音,可以保留多个 voice state 对象。load_model()get_state_for_audio_prompt() 是相对较慢的操作,因此我们建议尽可能将模型和 voice state 保留在内存中。

为了加快声音加载速度,你可以将 voice state 导出为 safetensors 文件:

from pocket_tts import TTSModel, export_model_state

model = TTSModel.load_model()

# 导出 voice state 以便后续快速加载
model_state = model.get_state_for_audio_prompt("some_voice.wav")
export_model_state(model_state, "./some_voice.safetensors")

# 后续快速加载,这非常快,因为只是从磁盘读取 kvcache,不涉及其他计算。
model_state_copy = model.get_state_for_audio_prompt("./some_voice.safetensors")

audio = model.generate_audio(model_state_copy, "Hello world!")

你可以查看 Python API 文档 以了解更多细节和示例。

不支持的功能

目前,我们不支持(但非常欢迎 Pull Request 添加):

我们尝试在 GPU 上运行此 TTS 模型,但与 CPU 执行相比并未观察到加速,主要是因为 batch size(批大小)为 1 且模型非常小。

开发与本地配置

我们接受贡献!欢迎在 GitHub 上提出 Issue 或 Pull Request。

你可以在 CONTRIBUTING.md 文件中找到开发说明。你还可以在那里找到如何进行可编辑安装(开发模式)以进行本地开发的信息。

浏览器内实现

Pocket TTS 足够小,可以直接在浏览器中以 WebAssembly/JavaScript 运行。 我们目前尚未提供官方支持,但你可以尝试以下社区实现:

其他实现

  • pocket-tts-mlx 作者 @jishnuvenugopal - 针对 Apple Silicon 优化的 MLX 后端
  • pocket-tts-xn 作者 @LaurentMazare - 使用 XN 实现的 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 - 使用 TorchSharpTorchSharp.PyBridge 实现的 C# 移植版,便于在 .NET 项目中作为库使用

使用 Pocket TTS 的项目

  • pocket-reader 作者 @lukasmwerner - 浏览器屏幕阅读器
  • pocket-tts-wyoming 作者 @ikidd - 使用 Wyoming 协议的 Docker 容器,可用于 Home Assistant Voice
  • Sonorus 作者 @KevinAHM - 与《霍格沃茨遗产》中任何命名角色用其原始语音对话
  • 原生 macOS 应用 作者 @slaughters85j - 原生 macOS 应用,无需 Python。通过 Core ML 在设备上运行 Pocket-TTS。提供已签名和公证的 .app 发布版本
  • Electron macOS 应用 作者 @slaughters85j - Electron Mac 桌面应用 + macOS Quick Action
  • pocket-tts-openai_streaming_server 作者 @teddybear082 - OpenAI 兼容的流式服务器,支持 Docker 容器并提供 .exe 发布版
  • pocket-tts-unity 作者 @lookbe - 面向 Unity 6 的 Pocket-TTS 集成
  • 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 - 多模型有声书生成器,带自动错误检测、48kHz 升频、同步浏览器阅读器、独立服务器模式
  • 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

*同等贡献

开源项目kyutai-labs2026-07-07原文

相关内容