--- tags: - audio - text-to-speech - onnx base_model: - hexgrad/Kokoro-82M inference: false language: en license: apache-2.0 library_name: txtai --- # Kokoro int8 Model for ONNX [Kokoro 82M](https://huggingface.co/hexgrad/Kokoro-82M) export to ONNX as int8. This model is from [this GitHub repo](https://github.com/taylorchu/kokoro-onnx/releases/). The voices file is from [this repository](https://github.com/thewh1teagle/kokoro-onnx/releases/tag/model-files). ## Usage with txtai [txtai](https://github.com/neuml/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._ ```python import soundfile as sf from txtai.pipeline import TextToSpeech # Build pipeline tts = TextToSpeech("NeuML/kokoro-int8-onnx") # Generate speech speech, rate = tts("Say something here") # Write to file sf.write("out.wav", speech, rate) ``` ## Usage with ONNX This model can also be run directly with ONNX provided the input text is tokenized. Tokenization can be done with [ttstokenizer](https://github.com/neuml/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. ```python 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-int8-onnx/voices.json", "r", encoding="utf-8") as f: voices = json.load(f) # Create model model = onnxruntime.InferenceSession( "kokoro-int8-onnx/model.onnx", providers=["CPUExecutionProvider"] ) # Create tokenizer tokenizer = IPATokenizer() # Tokenize inputs inputs = tokenizer("Say something here") # Get speaker array speaker = np.array(self.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) ```