关于 kokoro-tts
用于评估和运行 Kokoro 自托管文本转语音模型的技能,涵盖 Python、JavaScript/ONNX 和本地服务器运行方式。内容包括声音与发音选择、长文本处理,以及不适合使用 Kokoro 的场景。
主要功能
- 01选择声音并混合音色风格
- 02拆分长文本并检查输出
- 03通过音素覆盖纠正发音
- 04选择 Python、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 密钥,无需按字符付费,音频也不会离开你的设备。本技能可帮助 Agent 判断 Kokoro 是否适合某项任务、选择合适的运行时来运行它,并获得可接受的输出;同样重要的是,识别哪些任务会让用户对 Kokoro 失望,以及在这些情况下应该选择其他方案。
以下所有关于版本、许可证、语音数量、排名和性能的事实,均已于 2026-07-10 根据文末所列来源核实。请注意,这些信息可能会变化。
Kokoro 是什么(已记录的事实)
- 模型。 约 8200 万个参数。其架构采用 StyleTTS 2(arXiv 2306.07691)和 ISTFTNet 解码器(arXiv 2203.02395)。模型卡将其描述为“仅解码器:没有扩散模型,也没有发布编码器”。来源:hexgrad/Kokoro-82M 模型卡。
- 许可证。 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 美元(约 1000 个 A100-80GB GPU 小时)。对合成数据的高度依赖是 Kokoro 韵律平淡、非英语质量参差不齐的根本原因。请牢记这一点。来源:模型卡。
- 输出。 24 kHz 单声道音频。采样率固定为 24000 Hz。来源:模型卡。
- 覆盖范围。 v1.0 支持 8 种语言和 54 种语音(美式英语和英式英语合计为一种语言)。来源:模型卡,VOICES.md。
什么时候使用 Kokoro,什么时候不使用
以下情况可考虑使用 Kokoro:
- 你需要免费、高容量的英语旁白(有声读物、课程或视频配音、批量文档转语音、屏幕阅读器)。边际成本只有电费。
- 工作流需要离线运行或保护隐私——例如医疗、法律、设备端或隔离网络环境——且不能将文本发送到云端 API。
- 你想在浏览器内或设备端使用 TTS,且不需要服务器(kokoro-js + WebGPU/WASM)。
- 你正在制作原型,希望立即获得足够好的语音,而无需配置付费服务。
如果任务需要以下能力,请勿使用 Kokoro(并告知用户):
- 语音克隆或特定人物的声音。 Kokoro 没有说话人编码器,也不支持零样本克隆。编码器有意未发布。你无法克隆参考语音。请改用支持克隆的服务商。
- 情绪或角色表演——欢笑、哭泣、喊叫、讽刺、富有变化的表达。Kokoro 没有情绪或风格标记,韵律范围也很窄;输出虽合格,但较为平淡。适合中性旁白,不适合电子游戏角色。
- 高保真非英语语音或多语言支持。 非英语语音大多仅获 C/D 级,训练数据也很少(见下文质量等级);有几种语言还会截断较长文本。英语是唯一的一级语言。
- 需要支持插话并具备个性的实时双向对话式 Agent。 Kokoro 是批量或流式合成器,不是对话语音系统。
如果用户需要语音克隆或富有情感表现力的配音,不要尝试通过混音或提示词技巧来伪造效果——应直接说明限制,并推荐支持克隆或表达力更强的服务商。
语音、语言代码和质量等级
语音 ID 遵循 [langprefix][gender]_[name] 格式,例如,af_heart = 美国女性
“Heart”,bm_george = 英国男性“George”,if_sara = 意大利女性“Sara”。
语言代码(在 Python 中作为 lang_code 传入;别名 en-us→a、en-gb→b):
| code | language | code | language |
|---|---|---|---|
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)。在项目中确定语音前,用户应试听 3–4 种 A/B 级语音——等级可用于预测,但不能保证每句话的质量。
文本长度、分块与长篇合成
文档记载的限制: Kokoro 每次前向传递最多处理 510 个音素化 token (含边界 token 时为 512 个)。VOICES.md 指出,语音在“100–200 个 token 的理想范围内表现最佳”,对非常短的语句(<10–20 个 token)表现较弱,而且长语句(>400 个 token)会读得很急。来源:模型卡 / VOICES.md。
对生产环境的影响:
- 切勿将整章作为一个字符串输入。应按句子/段落拆分并拼接。
- Python
KPipeline会自动拆分;其split_pattern对英语默认为r'\n+',每个分块返回一个(graphemes, phonemes, audio)结果,然后将其拼接。来源:pipeline.py。 - 非英语文本的分块功能尚未完全实现。 除非预先自行拆分(在句子边界插入
\n),否则较长的非英语文本可能会被截断。这是一个常见的静默失败问题——请核实非英语输出的长度。 - 保证长篇内容清晰的经验法则: 在句子边界处分块,每块约 100–250 个 token(约一至三句话),分别进行合成,并以一小段静音间隔拼接。若要自行构建分割器,Kokoro-FastAPI 的默认值(目标约 175 / 250 / 450 个绝对最大 token)是合理的起点。
发音控制(misaki + espeak-ng)
Kokoro 不会直接读取字素,而是先由 hexgrad 的 G2P 库 misaki 将文本转换为音素,再输入模型。英语使用 misaki 的词典(spaCy + num2words)。词典中没有的单词会回退到 espeak-ng(默认启用的 EspeakFallback);espeak-ng 也是非英语 G2P 的基础。请将 espeak-ng 安装为系统依赖,否则 OOV 单词会退化为逐字母拼读。文档中的示例:启用回退时,eBook → ˈi bˈʊk;不启用时,→ ˈiː bˈi ˈoʊ ˈoʊ kˈeɪ(逐字母拼读)。来源:misaki README。
修正发音错误的单词(专有名词、品牌、缩写、读错的数字):
- 内联音素覆盖 — misaki 支持类似 Markdown 的语法
[word](/phonemes/),例如[Misaki](/misˈɑki/)或[Kokoro](/kˈOkəɹO/)。将 IPA/Kokoro 音素放在斜杠之间;重音符号(如ˈ)很重要。 - 生成一次音素,重复使用 — 用 misaki 生成音素,手动修正,然后将音素直接传给模型,以确保批处理作业的发音一致。
- 在文本中拼出读音 — 如果音素处理过于繁琐,可改写文本(例如,“A-P-I”“二零二六年”)。
**经验法则:**长批处理开始前,务必先试读领域术语、姓名和数字——这是 Kokoro 最常见的一类错误,而且每个错误都能通过一行音素修正。
声音混合(混音)
Kokoro 的“声音”是一个风格向量(voicepack 张量)。混合是对两个风格向量进行加权平均,从而生成一个可用的新声音。文档中介绍的机制是通过 numpy 加权相加:style1*(w0/100) + style2*(w1/100);如果权重总和不为 100,则会进行归一化;有些工具将混合数量限制为恰好两个声音。来源:nazdridoy/kokoro-tts 声音混合文档。
- 在 Kokoro-FastAPI 中,可通过组合声音 ID 请求混合:
voice="af_sky+af_bella"(权重相等),也可按该服务的语法指定权重。来源: remsky/Kokoro-FastAPI。 - 使用 原生 Python 时,可加载两个 voicepack 张量并自行求平均,从而获得完全控制(可使用任意比例;如果自行编写计算代码,就不会受到最多混合两个声音的限制)。
**混合适用于:**微调两个已评定声音之间的音色/音高,或打造一个不同于任何单个内置声音的品牌声音。混合不能增加情绪、根据参考音频创建新的说话人身份,也无法挽救低等级声音——两个 C 级声音平均后仍是 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 完全在客户端运行——无需服务器,也不会上传任何内容。模型 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。
如需在非 JS 场景中使用 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 个 token)报告称,A10G 上的 RTF 约为 96×,L4 上约为 81×,T4 上约为 36×;ONNX 的速度 较低(20–37×)。来源:Kokoro v1 benchmark gist,检索于 2026-07-10。
- CPU 在许多核心上仍能轻松快于实时——同一基准测试显示,32-vCPU 实例上的 RTF 约为 5×;另一项测试报告称,在4 核上 RTF ≈ 0.45–0.51(即比实时快约 2×)。来源:上方的 gist 和一次 4 核 AMD EPYC 运行,检索于 2026-07-10。
- 占用空间: 82M 参数非常小;模型加载所需内存远低于 1 GB,推理使用 4 GB RAM 即可(若要舒适地进行批处理,则需 8 GB+)。通过 ONNX 可在配置适中的硬件和 Raspberry-Pi 级别设备上运行。
经验法则: 对于实时或流式体验,优先使用 GPU 或性能强劲的多核 CPU;
核心数较少的 CPU/边缘设备适合批处理或离线任务,但处理长文本时可能接近或低于实时速度。
量化 ONNX(q8/q4)有助于在受限的 CPU/WASM 上运行,但会牺牲质量。
基准测试 / 排名情况(过时、证据混杂)
- 官方说法(2024-12): 模型卡称 Kokoro v0.19 在发布前后几周内,于 TTS Spaces Arena 中“排名第 1”。这是一个模型有限、单音色的 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。
给用户的诚实说法: 对于仅有 82M 参数且边际成本为 $0 的模型而言,Kokoro 表现出色, 在中性英语旁白方面能与大得多的模型竞争,但在表现力、克隆能力和多语言保真度方面,显然不及前沿商用模型和规模更大的开放模型。应强调其经济性、隐私性和占用空间——而不是声称它拥有最高质量的音色。
输出审核清单
发布 Kokoro 音频前,请留意:
- 姓名/术语/数字发音错误——最常见的问题。使用音素覆盖来修正。
- 超过约 400 个 token 的分块语速过快或被截断——重新拆分为更短的分块。
- 非英语长文本被截断——核实时长;使用
\n预先拆分。 - 极短文本行(一两个词)出现瑕疵——补充上下文或在末尾加句点。
- 语言与语音口音不匹配——将
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