kyutai-labs/pocket-tts

GitHub: kyutai-labs/pocket-tts

一个轻量级文本转语音引擎,无需 GPU 即可在 CPU 上实现低延迟语音合成与声音克隆,模型仅一亿参数,适合本地部署和资源受限环境。

Stars: 4278 | Forks: 481

# Pocket TTS pocket-tts-logo-v2-transparent 一个专为在 CPU 上高效运行而设计的轻量级文本转语音 (TTS) 应用程序。 告别使用 GPU 和通过 Web API 提供 TTS 模型的麻烦。借助 Kyutai 的 Pocket TTS,只需一次 pip install 和一次函数调用即可生成音频。 支持 Python 3.10、3.11、3.12、3.13 和 3.14。需要 PyTorch 2.5+。不要求 GPU 版本的 PyTorch。 [🔊 演示](https://kyutai.org/pocket-tts) | [🐱‍💻 GitHub 仓库](https://github.com/kyutai-labs/pocket-tts) | [🤗 Hugging Face 模型卡片](https://huggingface.co/kyutai/pocket-tts) | [⚙️ 技术报告](https://kyutai.org/blog/2026-01-13-pocket-tts) | [📄 论文](https://arxiv.org/abs/2509.06926) | [📚 文档](https://kyutai-labs.github.io/pocket-tts/) ## 核心亮点 * 在 CPU 上运行 * 模型体积小,包含 1 亿参数 * 音频流式传输 * 低延迟,获取第一个音频块仅需约 200ms * 速度快于实时,在 MacBook Air M4 的 CPU 上可达约 6 倍实时速度 * 仅使用 2 个 CPU 核心 * 提供 Python API 和 CLI * 声音克隆 * 多语言支持:英语、法语、德语、葡萄牙语、意大利语、西班牙语 * 能够处理无限长的文本输入 * [可在客户端浏览器中运行](#in-browser-implementations) 未来可能会添加更多语言。 ## 通过网页体验(无需安装) 访问 [Kyutai 网站](https://kyutai.org/pocket-tts) 直接在浏览器中体验。您可以输入文本、选择不同的声音,并在无需任何安装的情况下生成语音。 ## 通过 CLI 体验 ### `generate` 命令 您可以直接从命令行使用 pocket-tts。我们推荐使用 `uv`,因为它会在独立环境中即时安装所有依赖项(uv 的安装说明见[此处](https://docs.astral.sh/uv/getting-started/installation/#standalone-installer))。 您也可以使用 `pip install pocket-tts` 手动安装。 这将生成一个名为 `./tts_output.wav` 的 wav 文件,使用默认声音说出默认文本,并显示一些速度统计信息。 ``` uvx pocket-tts generate # 或者如果你使用 pip 手动安装了它: pocket-tts generate ``` 使用 `--voice` 修改声音,使用 `--text` 修改文本。我们提供了一组小型的声音目录。 在运行 `generate`、`export-voice` 或 `serve` 时,可以通过 `--language` 选择预训练语言模型(默认:`english`)。非英语语言也有更大的 24 层变体,质量更高但速度较慢。例如,您可以使用 `--language italian_24l` 来选择它们。 `--config` 选项仅接受用于自定义权重的本地 YAML 路径。 您可以查看[此页面](https://huggingface.co/kyutai/tts-voices),其中详细介绍了每种声音的 许可协议。 * [alba](https://huggingface.co/kyutai/tts-voices/blob/main/alba-mackenna/casual.wav) (英语) * [giovanni](https://huggingface.co/kyutai/pocket-tts/blob/add_lang_not_documented/common_voice_it_36520747-enhanced-v2.mp3) (意大利语) * [lola](https://huggingface.co/kyutai/pocket-tts/blob/add_lang_not_documented/common_voice_es_19762977-enhanced-v2.mp3) (西班牙语) * [juergen](https://huggingface.co/kyutai/pocket-tts/blob/add_lang_not_documented/de-DE-juergen.mp3) (德语) * [rafael](https://huggingface.co/kyutai/pocket-tts/blob/add_lang_not_documented/g-Vi8PgmSY0-enhanced-v2.wav) (葡萄牙语) * [estelle](https://huggingface.co/kyutai/tts-voices/blob/main/unmute-prod-website/developpeuse-3.wav) (法语) * [anna](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p228_023_enhanced.wav) (英语) * [azelma](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p303_023_enhanced.wav) (英语) * [bill_boerst](https://huggingface.co/kyutai/tts-voices/blob/main/voice-zero/bill_boerst.wav) (英语) * [caro_davy](https://huggingface.co/kyutai/tts-voices/blob/main/voice-zero/caro_davy.wav) (英语) * [charles](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p254_023_enhanced.wav) (英语) * [cosette](https://huggingface.co/kyutai/tts-voices/blob/main/expresso/ex04-ex02_confused_001_channel1_499s.wav) (英语) * [eponine](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p262_023_enhanced.wav) (英语) * [eve](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p361_023_enhanced.wav) (英语) * [fantine](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p244_023_enhanced.wav) (英语) * [george](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p315_023_enhanced.wav) (英语) * [jane](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p339_023_enhanced.wav) (英语) * [jean](https://huggingface.co/kyutai/tts-voices/blob/main/ears/p010/freeform_speech_01_enhanced.wav) (英语) * [javert](https://huggingface.co/kyutai/tts-voices/blob/main/voice-donations/Butter.wav) (英语) * [marius](https://huggingface.co/kyutai/tts-voices/blob/main/voice-donations/Selfie.wav) (英语) * [mary](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p333_023_enhanced.wav) (英语) * [michael](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p360_023_enhanced.wav) (英语) * [paul](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p259_023_enhanced.wav) (英语) * [peter_yearsley](https://huggingface.co/kyutai/tts-voices/blob/main/voice-zero/peter_yearsley.wav) (英语) * [stuart_bell](https://huggingface.co/kyutai/tts-voices/blob/main/voice-zero/stuart_bell.wav) (英语) * [vera](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p229_023_enhanced.wav) (英语) `--voice` 参数还可以接收普通的 wav 文件作为声音克隆的输入。 您可以使用自己的文件,或者查看我们的[声音仓库](https://huggingface.co/kyutai/tts-voices)。 我们建议在使用 Pocket TTS 之前[清理音频样本](https://podcast.adobe.com/en/enhance),因为样本的音频质量也会被复刻下来。 请随时查看 [generate 文档](https://kyutai-labs.github.io/pocket-tts/CLI%20Commands/generate/) 以获取更多详细信息和示例。 若要快速尝试多种声音和提示词,建议使用 `serve` 命令。 ### `serve` 命令 您还可以运行本地服务器,通过 HTTP 请求生成音频。 ``` uvx pocket-tts serve # 或者如果你使用 pip 手动安装了它: pocket-tts serve ``` 访问 `http://localhost:8000` 即可体验 Web 界面,由于模型在请求之间会保留在内存中,因此它比命令行更快。 您可以查看 [serve 文档](https://kyutai-labs.github.io/pocket-tts/CLI%20Commands/serve/) 以获取更多详细信息和示例。 ### `export-voice` 命令 处理音频文件(例如 .wav 或 .mp3)以进行声音克隆相对较慢,但加载 safetensors 文件(从音频文件转换而来的声音嵌入)则非常快。您可以使用 `export-voice` 命令执行此转换。有关更多详细信息和示例,请参阅 [export-voice 文档](https://kyutai-labs.github.io/pocket-tts/CLI%20Commands/export_voice/)。 ## 作为 Python 库使用 您可以在 Colab 上[在此处](https://colab.research.google.com/github/kyutai-labs/pocket-tts/blob/main/docs/pocket-tts-example.ipynb)试用该 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" # 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 是一个包含 PCM 数据的 1D torch tensor。 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() # 导出 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 文档](https://kyutai-labs.github.io/pocket-tts/API%20Reference/python-api/) 以获取更多详细信息和示例。 ## 尚未支持的功能 目前,我们暂不支持(但非常欢迎提交 Pull Request 来添加)以下功能: - [在文本输入中添加静音以生成停顿。](https://github.com/kyutai-labs/pocket-tts/issues/6) - [通过量化以 int8 格式运行计算。](https://github.com/kyutai-labs/pocket-tts/issues/7) 我们曾尝试在 GPU 上运行此 TTS 模型,但与 CPU 执行相比并未观察到速度提升, 这主要是因为我们使用了大小为 1 的批处理以及非常小的模型。 ## 开发与本地设置 我们接受社区贡献!欢迎随时在 GitHub 上提交 Issue 或 Pull Request。 您可以在 [CONTRIBUTING.md](https://github.com/kyutai-labs/pocket-tts/tree/main/CONTRIBUTING.md) 文件中找到开发说明。您还可以在其中找到如何为本地开发创建可编辑的包安装。 ## 浏览器端实现 Pocket TTS 体积小巧,足以直接在您的浏览器中通过 WebAssembly/JavaScript 运行。 我们目前尚未提供官方支持,但您可以尝试以下社区实现之一: - 由 @LaurentMazare 开发的 [wasm-pocket-tts](https://github.com/LaurentMazare/xn/tree/main/wasm-pocket-tts):使用 XN 的 Pocket TTS Rust 移植版本。演示[在此处](https://laurentmazare.github.io/pocket-tts/) - 由 @KevinAHM 开发的 [pocket-tts-onnx-export](https://github.com/KevinAHM/pocket-tts-onnx-export):模型被导出为 .onnx 并使用 [ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/) 运行。演示[在此处](https://huggingface.co/spaces/KevinAHM/pocket-tts-web) - 由 @babybirdprd 开发的 [pocket-tts](https://github.com/babybirdprd/pocket-tts):Candle 版本 (Rust),带有 WebAssembly 和 PyO3 绑定,意味着它也可以在 Web 上运行。 - 由 @ekzhang 开发的 [jax-js](https://github.com/ekzhang/jax-js/tree/main/website/src/routes/tts):使用 jax-js,一个用于 Web 的 ML 库。演示[在此处](https://jax-js.com/tts) ## 其他实现 - 由 @jishnuvenugopal 开发的 [pocket-tts-mlx](https://github.com/jishnuvenugopal/pocket-tts-mlx) - 针对 Apple Silicon 优化的 MLX 后端 - 由 @LaurentMazare 开发的 [pocket-tts-xn](https://github.com/LaurentMazare/xn/tree/main/pocket-tts) - 使用 XN 实现的 Pocket TTS Rust 移植版本。 - 由 @babybirdprd 开发的 [pocket-tts-candle](https://github.com/babybirdprd/pocket-tts) - 带有 WebAssembly 和 PyO3 绑定的 Candle 版本 (Rust)。 - 由 @VolgaGerm 开发的 [PocketTTS.cpp](https://github.com/VolgaGerm/PocketTTS.cpp) - 使用 ONNX Runtime 的单文件 C++ 运行时,提供 CLI、HTTP 服务器和 FFI C API。 - 由 @csukuangfj 开发的 [sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx) - 在 **Windows、macOS、Linux** 和嵌入式主板(Raspberry Pi、Jetson、RK3588 等)上运行 PocketTTS,并为 12 种编程语言提供绑定:**C++、C、Python、JavaScript、Java、C#、Kotlin、Swift、Go、Dart、Rust、Pascal**,外加 [WebAssembly](https://huggingface.co/spaces/k2-fsa/web-assembly-en-tts-pocket)。 - 由 @TheAjaykrishnanR 开发的 [pocket-tts-csharp](https://github.com/TheAjaykrishnanR/pocket-tts-csharp) - 使用 [TorchSharp](https://github.com/dotnet/TorchSharp) 和 [TorchSharp.PyBridge](https://github.com/shaltielshmid/TorchSharp.PyBridge) 实现的 Pocket TTS C# 移植版本,便于在 .NET 项目中作为库使用。 ## 使用 Pocket TTS 的项目 - 由 @lukasmwerner 开发的 [pocket-reader](https://github.com/lukasmwerner/pocket-reader) - 浏览器屏幕阅读器 - 由 @ikidd 开发的 [pocket-tts-wyoming](https://github.com/ikidd/pocket-tts-wyoming) - 使用 Wyoming 协议且适用于 pocket-tts 的 Docker 容器,可直接用于 Home Assistant Voice。 - 由 @KevinAHM 开发的 [Sonorus](https://www.nexusmods.com/hogwartslegacy/mods/2409) - 使用原始声音与《霍格沃茨之遗》中的任何命名角色进行对话。 - 由 @slaughters85j 开发的 [Mac pocket-tts](https://github.com/slaughters85j/pocket-tts) - Mac 桌面应用程序 + macOS 快速操作 - 由 @teddybear082 开发的 [pocket-tts-openai_streaming_server](https://github.com/teddybear082/pocket-tts-openai_streaming_server) - 兼容 OpenAI 的流式服务器,已 Docker 化并提供 `.exe` 发行版 - 由 @lookbe 开发的 [pocket-tts-unity](https://github.com/lookbe/pocket-tts-unity) - Pocket-TTS 的 Unity 6 集成。 - 由 @ai-joe-git 开发的 [ComfyUI-Pocket-TTS](https://github.com/ai-joe-git/ComfyUI-Pocket-TTS) - 用于 ComfyUI 的基于 CPU 的轻量级文本转语音工具 - 由 @ai-joe-git 开发的 [pocket-tts-server](https://github.com/ai-joe-git/pocket-tts-server) - 具有兼容 OpenAI API 的轻量级实时声音克隆和聊天服务器。只需 20 秒的音频即可克隆任何声音,并立即使用该声音与 AI 聊天。 - 由 @alkmei 开发的 [discord-tts](https://github.com/alkmei/discord-tts) - 使用 Pocket TTS 的多声音 Discord 文本转语音机器人。 - 由 @dooart 开发的 [cursed-codex](https://github.com/dooart/cursed-codex) - 带有不受限实况足球解说功能的 AI 编程代理 - [pocket-tts-deno](https://github.com/ohmstone/pocket-tts-deno) - [pocket-tts-server](https://github.com/ai-joe-git/pocket-tts-server) 作为 wasm + onnx deno 服务器并提供语音 TTS API 的移植版本。 - 由 @markd89 开发的 [FrontPocket](https://github.com/markd89/FrontPocket) - Pocket-TTS 的前端,可朗读来自剪贴板、文件、CLI(热键)和 GUI 工具栏的文本。可即时更改播放速度、声音,并在句子之间前进/后退。 - 由 @dodgyrabbit 开发的 [openclaw-pockettts](https://github.com/dodgyrabbit/openclaw-pockettts) - 包含 Python 实现的 Docker 容器,但作为 OpenAI TTS API 暴露,以便于与 OpenClaw 集成。 - 由 @dodgyrabbit 开发的 [openclaw-pocketts.cpp](https://github.com/dodgyrabbit/openclaw-pockettts.cpp) - 包含 PocketTTS.cpp 版本的 Docker 容器,打包以便于与 OpenClaw 集成。 - 由 @zeropointnine 开发的 [tts-audiobook-tool](https://github.com/zeropointnine/tts-audiobook-tool) - 具有自动错误检测、48khz 升频、同步浏览器阅读器和独立服务器模式的多模型有声书生成器。 ## 禁止用途 我们模型的使用必须遵守适用的法律法规,且不得导致、涉及或促成任何非法、有害、欺骗、欺诈或未经授权的活动。禁止的用途包括但不限于:未经明确且合法同意的声音模仿或克隆;错误信息、虚假信息或欺骗行为(包括假新闻、欺诈电话,或将生成内容作为真实人物或事件的真实录音呈现);以及生成非法、有害、诽谤、辱骂、骚扰、歧视、仇恨或侵犯隐私的内容。我们对任何不合规的使用概不负责。 ## 作者 Manu Orsini*, Simon Rouard*, Gabriel De Marmiesse*, Václav Volhejn, Neil Zeghidour, Alexandre Défossez *贡献相同
标签:AI, CPU推理, Hugging Face, IPv6支持, NLP, Python, PyTorch, TTS, WebAssembly, 人工智能, 低延迟, 凭据扫描, 多语言支持, 安全测试框架, 实时语音生成, 开源, 文本转语音, 文档结构分析, 无后门, 本地运行, 浏览器端, 深度学习, 用户模式Hook绕过, 自动化代码审查, 语音克隆, 语音合成, 轻量级模型, 边缘计算, 逆向工具, 音频流处理