kokoro-tts について
セルフホスト型テキスト読み上げモデルKokoroの適性判断と実行を支援するスキルです。Python、JavaScript/ONNX、ローカルサーバーの各実行方法に加え、声や発音の調整、長文処理、適さない用途も扱います。
主な機能
- 01音声の選択と声質のブレンド
- 02長文の分割と出力確認
- 03音素指定による発音の修正
- 04Python、ONNX、サーバー実行方式の選択
- 05適性と制約の評価
活用シーン
- 01プライベートなオフラインナレーションの生成
- 02長尺音声のバッチ制作
- 03ブラウザーや端末上での音声合成
- 04大量生成前の発音テスト
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ calesthio/ generative-media-skills --skill kokoro-ttsインストール後、Claude Code で/kokoro-ttsを入力して読み込まれたか確認します。
同梱ファイルEVAL.md
詳細
Kokoro TTS(オープンウェイト、セルフホスト可能)
Kokoro は、小型で高速、寛容なライセンスで提供されているテキスト読み上げモデルです。最大の特長は、自分で実行できることです。API キーは不要で、文字数に応じた課金もなく、音声がマシンの外部に送信されることもありません。このスキルは、Kokoro が用途に合うかどうかをエージェントが判断し、適切なランタイムで実行して、許容できる出力を得るために役立ちます。同じくらい重要なのは、Kokoro ではユーザーの期待に応えられず、別のものが適切となる用途を見極めることです。
以下のバージョン、ライセンス、音声数、ランキング、性能に関する情報は、末尾に記載した情報源に照らして2026-07-10に確認済みです。これらは変動する可能性があるものとして扱ってください。
Kokoro とは(公開されている情報)
- モデル。 パラメーター数は約 8,200 万です。アーキテクチャは StyleTTS 2(arXiv 2306.07691)で、ISTFTNet デコーダー(arXiv 2203.02395)を使用しています。モデルカードでは「デコーダーのみ:拡散モデルなし、エンコーダーは公開されていない」と説明されています。出典:hexgrad/Kokoro-82M model card。
- ライセンス。 重みを含め、Apache 2.0 です。v0.19 の重みは2024-12-25に完全な fp32 形式で公開され、v1.0 は 2025-01-27 にリリースされ、現在のデフォルトです。重みは Apache-2.0 のため、帰属表示の条件に従えば、商用利用、再配布、ファインチューニングが可能です。出典:モデルカード。
- 学習データと由来。 v1.0 の学習データは「数百時間」で、パブリックドメインの音声、Apache/MIT ライセンスのコンテンツ、クローズドな TTS モデルで生成された合成音声に加え、Koniwa(CC BY 3.0)の 1 時間未満と SIWIS(CC BY 4.0)の 11 時間未満を含む、許諾済み/著作権のない素材のみを使用して学習されています。報告されている学習コストは約 $1000(A100-80GB GPU 約 1000 時間分)です。合成データへの大きな依存が、Kokoro の平坦な韻律と、英語以外の品質のばらつきの根本的な原因です。この点を念頭に置いてください。出典:モデルカード。
- 出力。 24 kHz のモノラル音声です。サンプルレートは 24000 Hz に固定されています。出典:モデルカード。
- 対応範囲。 v1.0 は8 言語、54 種類の音声を提供します(アメリカ英語とイギリス英語は 1 言語として数えます)。出典:モデルカード、VOICES.md。
Kokoro を使う場合と使わない場合
次のような場合は Kokoro を選んでください。
- オーディオブック、講座/動画のナレーション、一括での文書読み上げ、スクリーンリーダーなど、英語のナレーションを無料で大量に生成したい場合。追加コストは電気代だけです。
- パイプラインがオフライン、またはプライバシー上の制約を受ける場合(医療、法律、デバイス上、エアギャップ環境など)で、テキストをクラウド API に送信できない場合。
- サーバーなしで、ブラウザー内/デバイス上の TTS を使いたい場合(kokoro-js + WebGPU/WASM)。
- プロトタイピング中で、有料プロバイダーの環境を用意せずに、すぐ使える十分な品質の音声が必要な場合。
次のような要件がある場合は Kokoro を使わず、ユーザーにもその旨を伝えてください。
- 音声クローン/特定の人物の声。 Kokoro には話者エンコーダーがなく、ゼロショットのクローン機能もありません。エンコーダーは意図的に公開されていません。参照音声のクローンはできません。音声クローンに対応したプロバイダーを案内してください。
- 感情表現やキャラクターの演技(笑い、泣き、叫び、皮肉、抑揚のある話し方など)。Kokoro には感情/スタイルのトークンがなく、韻律の幅も狭いため、出力は十分な品質ですが平坦です。ニュートラルなナレーターには適していますが、ビデオゲームのキャラクターには向きません。
- 高品質な英語以外の音声、または多言語対応。 英語以外の音声は、ほとんどが品質評価 C/D で、学習データも少量です(以下の品質評価を参照)。また、いくつかの言語では長いテキストが途中で切れます。最上位の対応言語は英語のみです。
- 割り込みと個性を備えたリアルタイムの双方向対話が必要な会話エージェント。Kokoro はバッチ/ストリーミング対応の音声合成器であり、対話用音声ではありません。
音声クローンや感情表現のあるナレーションを求められた場合は、音声のブレンドやプロンプトの工夫でそれらしく見せようとしないでください。制限を率直に伝え、音声クローンや表現力に対応したプロバイダーを提案してください。
音声、言語コード、品質グレード
音声 ID は [langprefix][gender]_[name] の形式です。例:af_heart = アメリカ英語の女性
「Heart」、bm_george = イギリス英語の男性「George」、if_sara = イタリア語の女性「Sara」。
言語コード(Python では lang_code として渡します。エイリアスは en-us→a、en-gb→b です):
| code | 言語 | code | 言語 |
|---|---|---|---|
a | アメリカ英語 | i | イタリア語 |
b | イギリス英語 | j | 日本語 |
e | スペイン語 | p | ブラジルポルトガル語 |
f | フランス語 | z | 中国語(標準語) |
h | ヒンディー語 |
出典:VOICES.md。
品質は一様ではありません。名前ではなくグレードで選んでください。 VOICES.md では、各音声に、目標品質を示すアルファベットとトレーニング音声の量(音声が多いほど高いグレード)を組み合わせた「Overall」グレードが割り当てられています。記載されている主な情報(2026-07-10 に確認):
- 最も優れた英語の女性音声:
af_heart(グレード A、モデルカードのデフォルト)、af_bella(A−)、af_nicole(B−、息づかいが多い/ASMR)、bf_emma(B−、イギリス英語)。 - 安定した英語音声:
af_aoede、af_kore、af_sarah、am_fenrir、am_michael、am_puck(すべて C+)。bm_fable、bm_george(C、イギリス英語の男性音声)。 - 理由がない限り避けてください: グレード C 以下の音声が多数あります。例:
am_adam(F+)、af_jessica/af_river(D)。英語以外の音声の多くは C/D で、合成データを数分程度使ってトレーニングされています。
本番環境での経験則: デフォルトは af_heart(言語コード a)にします。プロジェクトでは、採用を決める前にユーザーがグレード A/B の音声を 3~4 種類試聴することをおすすめします。グレードは文ごとの品質を予測するものですが、保証するものではありません。
テキストの長さ、分割、長文の合成
記載されている上限: Kokoro が 1 回のフォワードパスで処理できるのは、最大 510 個の音素化トークン(境界トークンを含めると 512 個)です。VOICES.md によると、音声は「100~200 トークンの適度な範囲で最もよく機能」し、非常に短い発話(10~20 トークン未満)は不得意で、長い発話(400 トークン超)では早口になります。出典:モデルカード/VOICES.md。
本番環境での注意点:
- 章全体を 1 つの文字列として入力しないでください。文や段落に分割して、後でつなぎ合わせます。
- Python の
KPipelineは自動的に分割します。split_patternのデフォルトは英語の場合r'\n+'で、チャンクごとに(graphemes, phonemes, audio)の結果を 1 つ返します。これらを連結してください。出典:pipeline.py。 - 英語以外のテキストの分割は、完全には実装されていません。 長い英語以外のテキストは、事前に自分で分割しないと途中で切り捨てられることがあります(文の区切りに
\nを挿入してください)。 これはよくある、失敗しても気づきにくい問題です。英語以外の出力の長さを確認してください。 - 長文をきれいに処理するための経験則: 文の区切りで、およそ 100~250 トークン(約 1~3 文)ごとに分割し、それぞれを合成してから、短い無音部分を挟んで連結します。独自の分割処理を実装する場合は、Kokoro-FastAPI のデフォルト(目標約 175 トークン/250 トークン/絶対上限 450 トークン)が妥当な出発点です。
発音の制御(misaki + espeak-ng)
Kokoro は書記素を直接読み上げるのではなく、テキストを
misaki(hexgrad の G2P ライブラリ)で音素に変換してからモデルに渡します。英語では misaki の辞書(spaCy + num2words)を使います。辞書にない単語は espeak-ng にフォールバックします(EspeakFallback、デフォルトで有効)。また、英語以外の G2P の基盤にも espeak-ng を使います。espeak-ng をシステム依存関係としてインストールしないと、辞書にない単語は一文字ずつ綴られるようになります。ドキュメントに記載された例:フォールバックありの場合、eBook → ˈi bˈʊk。なしの場合は → ˈiː bˈi ˈoʊ ˈoʊ kˈeɪ(綴りをそのまま読み上げます)。出典:misaki README。
誤って発音される単語を修正するには(固有名詞、ブランド名、頭字語、誤読される数字):
- インラインで音素を指定する — misaki は
[word](/phonemes/)形式の Markdown 風構文を受け付けます。例:[Misaki](/misˈɑki/)または[Kokoro](/kˈOkəɹO/)。スラッシュの間に IPA/Kokoro の音素を入力します。ˈのような強勢記号が重要です。 - 一度音素に変換し、再利用する — misaki で音素を生成して手作業で修正し、モデルに音素を直接渡すことで、バッチ処理の一貫性を保ちます。
- テキストで綴りを明示する — 音素の指定が大げさな場合は、「A-P-I」「twenty twenty-six」のように言い換えます。
ヒューリスティック: 長いバッチ処理の前に、専門用語、名前、数字は必ず試しに実行してください。これらは Kokoro で最もよくあるエラーの種類で、どれも音素を一行修正するだけで済みます。
音声のブレンド(ミキシング)
Kokoro の「音声」はスタイルベクトル(voicepack テンソル)です。ブレンドとは、2 つのスタイルベクトルの加重平均を取り、新しい利用可能な音声を生成することです。ドキュメントに記載された方法は、numpy で加重加算する style1*(w0/100) + style2*(w1/100) で、重みの合計が 100 でない場合は正規化されます。複数のツールでは、ブレンドできる音声の数をちょうど 2 つに制限しています。出典:nazdridoy/kokoro-tts の音声ブレンドのドキュメント。
- Kokoro-FastAPI では、音声 ID を組み合わせてブレンドをリクエストします。
voice="af_sky+af_bella"(均等)、またはそのサーバーの構文に従って重みを指定します。出典: remsky/Kokoro-FastAPI。 - ネイティブ Python では、2 つの voicepack テンソルを読み込んで自分で平均を取ることで、細かく制御できます(比率は自由です。計算を自分で記述すれば、2 音声の上限はありません)。
ブレンドの用途: 評価済みの 2 つの音声の間で音色やピッチを微調整したり、付属のどの音声とも異なる独自の音声を作成したりできます。**ただし、**感情を加えたり、参照音声から新しい話者のアイデンティティを作成したり、評価の低い音声を改善したりすることはできません。評価 C の音声を 2 つ平均しても、評価 C のブレンドになります。
ランタイム — デプロイ先に応じて選択
1. Python kokoro パッケージ(サーバー/バッチ処理のデフォルト)
ナレーションのパイプライン、オーディオブック、自分の環境で実行する用途に最適です。バックエンドは PyTorch で、GPU は任意です。例(例として記載。パスと音声は環境に合わせて変更してください):
# pip install kokoro>=0.9.2 soundfile ; plus system espeak-ng
from kokoro import KPipeline
import soundfile as sf
import numpy as np
pipeline = KPipeline(lang_code='a') # 'a' = American English
text = "The quarterly report is ready.\nRevenue rose twelve percent."
chunks = []
for graphemes, phonemes, audio in pipeline(text, voice='af_heart', speed=1.0):
chunks.append(audio) # one result per split (default r'\n+')
sf.write('out.wav', np.concatenate(chunks), 24000) # 24 kHz mono
この構成の理由:KPipeline が G2P、チャンク分割、推論を行います。イテレーションでチャンクごとの音声を取得して連結する方法は、前述の長文音声生成のパターンそのものです。speed(約 0.8~1.3)で速度と自然さのバランスを調整できます。より細かな制御には、KModel で音素変換済みの単一チャンクを実行します。出典:モデルカード、Python API。
2. kokoro-js / ONNX(ブラウザー、オンデバイス、Node)
Transformers.js を介して 100% クライアント側で実行するため、サーバーは不要で、データがアップロードされることもありません。モデル ID は
onnx-community/Kokoro-82M-v1.0-ONNX です。例(例として記載):
// npm i kokoro-js
import { KokoroTTS, TextSplitterStream } from "kokoro-js";
const tts = await KokoroTTS.from_pretrained("onnx-community/Kokoro-82M-v1.0-ONNX", {
dtype: "q8", // "fp32" | "fp16" | "q8" | "q4" | "q4f16"
device: "webgpu", // "wasm" | "webgpu" in-browser, "cpu" in Node ; use fp32 with webgpu
});
const audio = await tts.generate("Hello from the browser.", { voice: "af_heart" });
audio.save("audio.wav"); // tts.list_voices() lists all IDs
// Streaming: push tokens, get audio incrementally
const splitter = new TextSplitterStream();
const stream = tts.stream(splitter);
(async () => { for await (const { text, phonemes, audio } of stream) audio.save("chunk.wav"); })();
量子化によるトレードオフ:q8/q4 はダウンロードサイズを縮小し、WASM の速度を向上させますが、品質は多少低下します。fp32 が最高品質で、WebGPU での使用が推奨されています。出典:
kokoro-js README、
onnx-community/Kokoro-82M-v1.0-ONNX。
JavaScript 以外で ONNX を使う場合は、kokoro-onnx(Python)を利用します。onnxruntime(CPU)または
onnxruntime-gpu(CUDA)で実行でき、Raspberry-Pi やエッジ環境へのデプロイを可能にします。
3. Kokoro-FastAPI(OpenAI 互換のドロップインサーバー)
既存のアプリにローカル TTS バックエンドを追加する最速の方法です。Docker 化されたラッパーが
OpenAI 互換の /v1/audio/speech エンドポイントを公開するため、OpenAI TTS 用に作られた
クライアントなら、ベース URL を変更するだけで動作します。音声のミキシング(af_sky+af_bella)、MP3/WAV/Opus/FLAC/M4A/PCM、
ストリーミング、単語ごとのタイムスタンプ、音素エンドポイント、CPU/NVIDIA/AMD 向けイメージに対応しています。例
(ラベル付きの例):
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8880/v1", api_key="not-needed")
client.audio.speech.create(
model="kokoro", voice="af_heart", input="Local TTS, OpenAI-shaped API.",
response_format="mp3",
).stream_to_file("out.mp3")
ソース:remsky/Kokoro-FastAPI。これは サードパーティ製のラッパーである点にご注意ください(Apache-2.0 ライセンスのモデルを使用する別個のプロジェクトです)。バージョンを固定し、 エンドポイントと音声ミキシングの構文が、随時更新される最新の README と一致することを確認してください。
ホスト型エンドポイント。 複数の推論プラットフォーム(Replicate、Baseten など)が Kokoro をホストしており、セルフホストせずにモデルのコスト面の利点を得られます。ただし、これらのサービスでは 使用ごとの費用が発生し、テキストがローカル環境の外部に送信されるため、Kokoro を選ぶ主な理由が損なわれます。 バースト時の処理能力が必要な場合や、モデルをローカルで実行できない場合に限って利用してください。
パフォーマンスの目安(参考情報・古いデータ)
RTF(リアルタイム係数)の定義は情報源によって異なります。音声秒数/計算秒数(値が大きいほど高速)を報告するものもあれば、 その逆を報告するものもあります。単位を確認してください。
- GPU はリアルタイムの数十倍の速度です。あるベンチマーク(PyTorch、約16k文字、 ≤510トークン単位で分割)では、A10G で約96× RTF、L4 で約81×、T4 で約36×を報告しています。ONNX は 低めの20~37×でした。ソース:Kokoro v1 benchmark gist、2026-07-10取得。
- CPU も多くのコアを使えば、十分にリアルタイムを上回ります。同じベンチマークでは、32 vCPU の インスタンスで約5× RTFを示しています。別の測定では、4コアで RTF ≈ 0.45~0.51(つまりリアルタイムの約2倍) でした。ソース:上記の gist、および AMD EPYC 4コアでの実行結果、2026-07-10取得。
- メモリ使用量: パラメーター数は8,200万と小規模です。モデルの読み込みに必要な容量は1 GBを大きく下回り、推論には4 GBの RAM で 十分です(快適なバッチ処理には8 GB以上)。控えめなハードウェアや、ONNX を使った Raspberry Pi クラスのデバイスでも動作します。
目安: リアルタイムまたはストリーミングの UX には、GPU か高性能なマルチコア CPU を選んでください。
コア数の少ない CPU やエッジ CPU でもバッチ処理やオフライン処理には使えますが、長文ではリアルタイムと同等か、それを下回る場合があります。
量子化 ONNX(q8/q4)を使うと、品質は低下しますが、リソースが限られた CPU/WASM 環境での実行に役立ちます。
ベンチマーク/ランキングでの位置づけ(時期の異なる複合的な情報)
- 公式の主張(2024-12): モデルカードによると、Kokoro v0.19 はリリース前後の数週間、 TTS Spaces Arena で「#1 ranked」でした。 これはモデル数と音声を限定した Arena での結果です。モデル規模を考えれば有力な結果ですが、すべての商用モデルを上回るという主張ではありません。 ソース:モデルカード。
- より広範な Arena(2026): より幅広い TTS リーダーボードでは、Kokoro はオープンウェイトモデルの中で中位に位置します。 2026-03 頃のある集計リーダーボードでは、Kokoro-82M v1.0 はオープンウェイトモデルの中で約4位 (Elo ≈ 1060)にランクされ、新しい、またはより大規模なオープンモデル(例:Step Audio EditX、Elo ≈ 1118)が上位でした。二次情報源、2026-07-10取得: TTS Arena / Artificial Analysis。
ユーザーへの率直な説明: Kokoro は、8,200万パラメーターで追加コストが0ドルという条件では非常に優れており、 ニュートラルな英語のナレーションでははるかに大規模なモデルとも競争力があります。一方、表現力、音声クローン、多言語の忠実度では、 最先端の商用モデルや、より大規模なオープンモデルには明らかに及びません。売りにするべきなのはコスト、プライバシー、フットプリントであり、 最高品質の音声が得られることではありません。
出力レビューのチェックリスト
Kokoro の音声をリリースする前に、次の点を確認してください。
- 名前、専門用語、数字の読み間違い — 最もよくある問題です。音素の上書きで修正してください。
- 約 400 トークンを超えるチャンクでの早口や音切れ — さらに短く分割し直してください。
- 英語以外の長文の末尾が途切れていないか — 長さを確認し、事前に
\nで分割してください。 - 非常に短い行(1 語または 2 語)でのノイズ — 文脈を補うか、末尾にピリオドを追加してください。
- 言語に合わないアクセントの音声 —
lang_codeを音声のプレフィックスに合わせてください (英語のテキストにはa/bの音声など)。一致しないと不自然に聞こえます。 - 台本に感情が必要なのに平板な話し方になっている — 読み上げ方が不自然なら、再試行を増やすのではなく、別のモデルに切り替えてください。
安全性、ライセンス、権利
- 重みは Apache-2.0 です — 表記を行えば、商用利用、再配布、ファインチューニングが許可されています。ラッパー(例:Kokoro-FastAPI)のライセンスは別途確認してください。これらは別々のプロジェクトです。(2026-07-10 確認済み。)
- 合成データの由来: 学習には、クローズドな TTS モデルで生成された合成音声が含まれています。このことは文書化されており、公開されているデータ(Koniwa CC BY 3.0、SIWIS CC BY 4.0)は寛容なライセンスで提供されています。ただし、クライアントに厳格な由来の要件がある場合は、その旨を開示してください。
- 音声クローンを行わないことと、悪用リスクがないことは別です。 音声クローンを行わなくても、生成音声は特定の「スタイル」を模倣したり、誤解を招く音声を作成したりするために使われる可能性があります。実在する特定可能な人物になりすます音声や、欺くことを目的とした音声は生成しないでください。また、聞き手が人間の声だと合理的に考える可能性がある場合は、合成音声であることを開示してください。
- 音声は実在の人物ではなく、モデルの生成物です — Heart、Emma、George などの名前はラベルであり、同意を与えた個人を指すものではないため、話者ごとの同意に関する問題はありません。ただし、合成メディア全般に関する開示の基準は引き続き適用されます。
参照元(2026-07-10 確認済み)
- hexgrad/Kokoro-82M モデルカード — https://huggingface.co/hexgrad/Kokoro-82M
- VOICES.md — https://huggingface.co/hexgrad/Kokoro-82M/blob/main/VOICES.md
- kokoro Python パッケージ/リポジトリ — https://github.com/hexgrad/kokoro 、https://pypi.org/project/kokoro/
- misaki G2P — https://github.com/hexgrad/misaki
- kokoro-js — https://github.com/hexgrad/kokoro/tree/main/kokoro.js 、https://www.npmjs.com/package/kokoro-js
- ONNX ビルド — https://huggingface.co/onnx-community/Kokoro-82M-v1.0-ONNX
- Kokoro-FastAPI — https://github.com/remsky/Kokoro-FastAPI
- 音声ブレンドの仕組み(二次資料) — https://deepwiki.com/nazdridoy/kokoro-tts/3.2-voice-blending
- パフォーマンスベンチマーク(二次資料) — https://gist.github.com/efemaer/23d9a3b949b751dde315192b4dcf0653
- TTS ランキング(二次資料) — https://artificialanalysis.ai/text-to-speech/model-families/kokoro