概要
Kyutai の Pocket TTS は、わずか1億パラメータのコンパクトなテキスト音声変換ライブラリで、CPU 推論専用に設計されています。多言語、音声クローニング、オーディオストリーミング、低遅延生成をサポートしています。Python API とコマンドラインインターフェースを提供しており、簡単に使用できます。
README プレビュー
# Pocket TTS\n\n\n\nA lightweight text-to-speech (TTS) application designed to run efficiently on CPUs.\nForget about the hassle of using GPUs and web APIs serving TTS models. With Kyutai's Pocket TTS, generating audio is just a pip install and a function call away.\n\nSupports Python 3.10, 3.11, 3.12, 3.13 and 3.14. Requires PyTorch 2.5+. Does not require the gpu version of PyTorch.\n\n[🔊 Demo](https://kyutai.org/pocket-tts) | \n[🐱💻GitHub Repository](https://github.com/kyutai-labs/pocket-tts) | \n[🤗 Hugging Face Model Card](https://huggingface.co/kyutai/pocket-tts) | \n[⚙️ Tech report](https://kyutai.org/blog/2026-01-13-pocket-tts) |\n[📄 Paper](https://arxiv.org/abs/2509.06926) | \n[📚 Documentation](https://kyutai-labs.github.io/pocket-tts/)\n\n\n## Main takeaways\n* Runs on CPU\n* Small model size, 100M parameters\n* Audio streaming\n* Low latency, ~200ms to get the first audio chunk\n* Faster than real-time, ~6x real-time on a CPU of MacBook Air M4\n* Uses only 2 CPU cores\n* Python API and CLI\n* Voice cloning\n* Multi-language support: english, french, german, portuguese, italian, spanish\n* Can handle infinitely long text inputs\n* [Can run on client-side in the browser](#in-browser-implementations)\n\nAdditional languages may be added in the future.\n\n## Trying it from the website, without installing anything\n\nNavigate to the [Kyutai website](https://kyutai.org/pocket-tts) to try it out directly in your browser. You can input text, select different voices, and generate speech without any installation.\n\n## Trying it with the CLI\n\n### The `generate` command\nYou can use pocket-tts directly from the command line. We recommend using\n`uv` as it installs any dependencies on the fly in an isolated environment (uv installation instructions [here](https://docs.astral.sh/uv/getting-started/installation/#standalone-installer)).\nYou can also use `pip install pocket-tts` to install it manually.\n\nThis will generate a wav file `./tts_output.wav` saying the
FAQ (5)
トラブル対応小規模なデータセットでPocketTTSのファインチューニングを行う際に発生するエラー「no readable samples ... (0 failures)」を修正するにはどうすればよいですか?
マニフェストのパスは通常問題ありません。長さバケッティングローダーは、各ローダーシャードに少なくとも num_bucket_batches × batch_size のサンプルが含まれるまでバッチを出力しません。以前のデフォルトでは、GPU あたり 20 × 64 × 6 = 7,680 の発話が必要でした。シャードが小さい場合、誤解を招く 0 failures エラーが発生していました。
PR #342 を含むバージョンにアップグレードしてください。この PR ではデフォルトが num_bucket_batches: 5 と loader_procs: 3 に引き下げられ、起動時に train/validation マニフェストが検証されます。
非常に小さなファインチューニングデータセットの場合は、finetune.yaml でバケッティングを無効にし、ローダープロセスを減らしてください。
data:
num_bucket_batches: 1 # 1 にすると長さバケッティングが無効になる
loader_procs: 1
batch_size: 8 # 最小の train/validation シャード以下である必要がある
GPU あたりの要件は次のとおりです。
num_bucket_batches × batch_size × loader_procs
num_bucket_batches: 1 と loader_procs: 1 の場合、各スプリットは少なくとも batch_size 件の読み取り可能なエントリーがあれば問題ありません。validation はトレーニングのバッチサイズを使用するため、validation マニフェストもこのサイズを満たしていることを確認してください。満たしていない場合、最初の validation ステップで実行が失敗します。あるいは、validation サンプルを追加するか、データセットサイズを増やしてください。
トラブル対応フランス語のPocket TTSで1語または2語の発話が乱れたり途切れたりする問題の修正方法
これはEOSの早期終了が原因です。一部のフランス語音声では、先頭の無音区間でEOS logitが約-3に達し、音声が生成される前にデフォルトの-4しきい値を超えてしまうため、短いテキストが途中で打ち切られます。
PR **"Ignore EOS on the first 6 generated frames"**と新しいフランス語モデルを含むリリースに更新することで修正できます。その後、以下のいずれかを使用してください:
- --language french — 新しい6層のフランス語モデルを読み込みます
- french_24l — 新しい24層のフランス語モデルを読み込みます
更新できない場合の即時の回避策:3語未満のテキストは決して合成しないでください。ストリーミングモードでは、短すぎるチャンクは次のチャンクと連結してから合成してください。これにより、報告されていた失敗率は1〜2語の場合の約40%から、3語以上の場合の約2%に低下しました。
先頭にフィラー語を追加しても効果はなく、quantize=TrueはApple Siliconでは問題を悪化させました。
トラブル対応なぜスペイン語、フランス語、またはenglish_2026-01のTTSモデルはtemperature 0.7を使用し、不安定なプロソディを生成するのですか?
これらの同梱YAML設定ファイルはdefault_temperatureを省略しているため、TTSModel.load_model()は調整済みの英語向け値0.3ではなく、スキーマのデフォルト値0.7にフォールバックします。この修正ではスキーマのデフォルト値を0.3に変更し、すべての同梱モデルが0.3でサンプリングされるようにしつつ、設定ファイルごとのオーバーライドも引き続き可能にしています。#322の修正を含むリリースにアップグレードした後、以下で確認してください:
m = TTSModel.load_model(language="spanish")
print(m.temp) # 0.3 になるはずです古いバージョンでの回避策として、影響を受ける設定ファイル(例:
spanish.yaml、french.yaml、english_2026-01.yaml)に以下を追加してください:default_temperature: 0.3トラブル対応クライアントが /tts からストリームの途中で切断した場合、Pocket TTS の生成を停止するにはどうすればよいですか?
PR #228 を含む Pocket TTS リリースにアップグレードしてください。この修正では、リクエストごとに threading.Event を作成し、それを generate_audio_stream() に渡し、クライアントが切断したときにセットします。generate_data_with_state 内の生成ループはこのイベントをチェックし、残りのテキストをデコードする代わりに、通常の終了パスを通じて終了します。手動で修正を適用する場合: 1) 各リクエストに対して stop_event = threading.Event() を作成し、2) それを generate_audio_stream(..., stop_event=stop_event) に渡し、3) 切断/キャンセルハンドラーで stop_event.set() を実行し、4) 生成ループ内でイベントをチェックし、次の tts_model リクエストを実行する前に停止します。これにより、CPU の無駄な消費を防ぎ、スレッドセーフでないモデルの同時使用を回避できます。報告によると、割り込みから次の応答までのレイテンシは約 7.9 秒から 0.27 秒に短縮されます。
トラブル対応無効な Hugging Face トークンが原因で pocket-tts export-voice が失敗する問題を修正するにはどうすればよいですか?
この失敗は、古くなった HF_TOKEN 環境変数が原因で発生する可能性があります。これを削除して、エクスポートを再度実行してください。
PowerShell(現在のターミナル):
Remove-Item Env:HF_TOKEN
Windows ユーザー環境から完全に削除するには:
[Environment]::SetEnvironmentVariable("HF_TOKEN", $null, "User")
ターミナルを再起動し、echo $env:HF_TOKEN で空になっていることを確認してから、再実行してください:
pocket-tts export-voice .\turtle_sample.wav turtle.safetensors
音声クローンに認証が必要な場合は、代わりに古いトークンを Hugging Face の有効なトークンに置き換えてください:
$env:HF_TOKEN = "hf_your_valid_token"または、
[Environment]::SetEnvironmentVariable("HF_TOKEN", "hf_your_valid_token", "User") で永続的に設定し、ターミナルを再起動してください。