Downloads · 30 days
0
NeuML/kokoro-base-onnx
kokoro-base-onnx is a text-to-speech model from NeuML. Use it when you need text read aloud. It is set up for txtai. The card lists the license as apache-2.0.
Kokoro 82M export to ONNX. This model is the same ONNX file that's in the base repository. The voices file is from this repository.
Downloads · 30 days
0
Access
Public
Updated Mar 21, 2025
Repo size
400 MB
Likes
3
Public
Click a slice to open those files.
.onnx346 MB · 86%
From the Hugging Face model README
Kokoro 82M export to ONNX. This model is the same ONNX file that's in the base repository. The voices file is from this repository.
txtai has a built in Text to Speech (TTS) pipeline that makes using this model easy.
Note: This requires txtai >= 8.3.0. Install from GitHub until that release.
import soundfile as sf
from txtai.pipeline import TextToSpeech
# Build pipeline
tts = TextToSpeech("NeuML/kokoro-base-onnx")
# Generate speech
speech, rate = tts("Say something here")
# Write to file
sf.write("out.wav", speech, rate)
This model can also be run directly with ONNX provided the input text is tokenized. Tokenization can be done with ttstokenizer. ttstokenizer is a permissively licensed library with no external dependencies (such as espeak).
Note that the txtai pipeline has additional functionality such as batching large inputs together that would need to be duplicated with this method.
import json
import numpy as np
import onnxruntime
import soundfile as sf
from ttstokenizer import IPATokenizer
# This example assumes the files have been downloaded locally
with open("kokoro-base-onnx/voices.json", "r", encoding="utf-8") as f:
voices = json.load(f)
# Create model
model = onnxruntime.InferenceSession(
"kokoro-base-onnx/model.onnx",
providers=["CPUExecutionProvider"]
)
# Create tokenizer
tokenizer = IPATokenizer()
# Tokenize inputs
inputs = tokenizer("Say something here")
# Get speaker array
speaker = np.array(voices["af"], dtype=np.float32)
# Generate speech
outputs = model.run(None, {
"tokens": [[0, *inputs, 0]],
"style": speaker[len(inputs)],
"speed": np.ones(1, dtype=np.float32) * 1.0
})
# Write to file
sf.write("out.wav", outputs[0], 24000)
The Kokoro model has a number of built-in speakers.
When using this model, set a speaker id from the reference table below.
| SPEAKER | GENDER | NATIONALITY | EXAMPLE |
|---|---|---|---|
| af | F | American | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/af.mp3"></audio> |
| af_bella | F | American | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/af_bella.mp3"></audio> |
| af_nicole | F | American | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/af_nicole.mp3"></audio> |
| af_sarah | F | American | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/af_sarah.mp3"></audio> |
| af_sky | F | American | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/af_sky.mp3"></audio> |
| am_adam | M | American | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/am_adam.mp3"></audio> |
| af_michael | M | American | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/am_michael.mp3"></audio> |
| bf_emma | F | British | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/bf_emma.mp3"></audio> |
| bf_isabella | F | British | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/bf_isabella.mp3"></audio> |
| bm_george | M | British | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/bm_george.mp3"></audio> |
| bm_lewis | M | British | <audio controls src="https://huggingface.co/NeuML/kokoro-base-onnx/resolve/main/examples/bm_lewis.mp3"></audio> |
The following shows an example on how to set a speaker id when using txtai
speech, rate = tts("Say something here", speaker="af_sky")