Mindket

HolosTTS

Newversion 1 · updated

Overview

Turns Ukrainian phonemes into speech with preset voices or a voice cloned from an audio sample, as streamed 24 kHz mono audio. For developers adding Ukrainian speech on PyTorch, ONNX Runtime, MLX or Android.

HolosTTS is a kit in the Developer category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page, a zip of its files. Nothing in it runs by itself.

At a glance

You need
  • Python and pip
  • Git, which the two helper packages for Ukrainian stress marks and phonetic transcription need
  • A CUDA build of PyTorch if you use an NVIDIA GPU
  • Internet on the first run, when the model fetches its files from Hugging Face and caches them
Runs in
  • PyTorch on a CPU or an NVIDIA GPU with a CUDA build
  • ONNX Runtime, no PyTorch needed: CPU, CUDA or TensorRT
  • MLX on the GPU of an Apple silicon Mac
  • Android, with LiteRT on the GPU or ONNX Runtime on the CPU
Start with
pip install -U huggingface_hub
hf download patriotyk/HolosTTS

Platform

AndroidOperating system
WindowsOperating system
macOSOperating system
LinuxOperating system

About

What it is

HolosTTS is an open-source text-to-speech model for Ukrainian, made by patriotyk. It reads phonemes and returns mono audio at 24 kHz, either all at once or as a stream. It has preset voices and can clone a voice from an audio sample.

Who it suits

It suits people who need Ukrainian speech in an app, on a server, on a Mac or on an Android phone. The author describes it as a balance of quality and speed.

IndustryWho uses itHow they use itExample
SoftwareApp developersAdd Ukrainian voice replies or narration to a productA phone app that speaks through the Android library
MediaVideo and audio makersVoice a script with a preset voice or a cloned oneNarrating a short clip in Ukrainian
EducationTeachers and language app buildersRead Ukrainian lessons aloudSpeaking a short greeting from a lesson
ResearchSpeech engineersCompare PyTorch, ONNX Runtime and MLX runsTiming the first audio chunk on a GPU

You can skip it if you need languages other than Ukrainian, since the model lists Ukrainian only.

Where to use it

  • PyTorch on a CPU or an NVIDIA GPU with a CUDA build
  • ONNX Runtime, no PyTorch needed: CPU, CUDA or TensorRT
  • MLX on the GPU of an Apple silicon Mac
  • Android, with LiteRT on the GPU or ONNX Runtime on the CPU
  • Windows, macOS or Linux with Python, to download the files
Use caseWhoWhat they get back
Narrate a textCreatorsA 24 kHz WAV file of the speech
Live speechApp developersAudio chunks as soon as each one is ready
Custom voicePeople with a clean recording they may useSpeech in a voice cloned from that recording

How to set it up

  • Python and pip
  • Git, which the two helper packages for Ukrainian stress marks and phonetic transcription need
  • A CUDA build of PyTorch if you use an NVIDIA GPU
  • Internet on the first run, when the model fetches its files from Hugging Face and caches them
  1. Install the two helper packages ukrainian-word-stress and ipa-uk from their GitHub pages. The model takes phonemes, not plain text.
  2. Install the HolosTTS package for your runtime.
  3. Load the model. It downloads its files on first use.

To fetch the files yourself:

pip install -U huggingface_hub
hf download patriotyk/HolosTTS

For PyTorch:

python -m pip install holos-tts

For ONNX Runtime:

python -m pip install holos-tts-onnx              # CPU and CUDA
python -m pip install "holos-tts-onnx[tensorrt]"  # plus TensorRT

For MLX on Apple silicon:

python -m pip install holos-tts-mlx

How to use it

Turn your Ukrainian text into phonemes, then pass them to the model with a voice. Synthesize long texts one sentence at a time. A speed above 1 speaks faster and below 1 slower.

from ipa_uk import ipa
from ukrainian_word_stress import Stressifier

stressify = Stressifier()
phonemes = ipa(stressify("Привіт! Це український синтез мовлення."))
import torch
import soundfile as sf
from holos.models import HolosTTS

device = "cuda" if torch.cuda.is_available() else "cpu"
model = HolosTTS("patriotyk/HolosTTS", device=device)

print(model.list_voices())
voice = model.list_voices()[0]
audio = model.generate(phonemes, voice=voice, speed=1.0)
sf.write("speech.wav", audio.squeeze().cpu().numpy(), 24000)

For streaming, the chunks add up to the same audio as a single generate call:

for chunk in model.stream(phonemes, voice=voice):
    play(chunk.squeeze().cpu().numpy())  # tensor [1, samples]

To clone a voice, give the encoder a recording of the target voice with no music or other speakers:

from holos.models import VoiceEncoder

encoder = VoiceEncoder("patriotyk/HolosTTS", device=device)
with torch.inference_mode():
    custom_voice = encoder("reference.wav")
audio = model.generate(phonemes, voice=custom_voice)
sf.write("custom_voice.wav", audio.squeeze().cpu().numpy(), 24000)
ToolWhat it does
holos-ttsRuns the model on PyTorch and clones voices
holos-tts-onnxRuns it on ONNX Runtime without PyTorch, on CPU, CUDA or TensorRT
holos-tts-mlxRuns it on the GPU of an Apple silicon Mac with MLX
holos-tts-litertRuns through LiteRT on a CPU or GPU and guides the Android library

Example

Take the Ukrainian greeting "Привіт!", turn it into phonemes with the two helper packages, and call generate with the first voice from list_voices. You get speech.wav back, a mono recording at 24 kHz that speaks the greeting.

For newcomers and experts

The model reads sounds, not letters. Two small helper packages first turn your Ukrainian text into phonemes with stress marks. For a first try, install holos-tts, run the phoneme lines, print the voice list and generate one short sentence.

Underneath, streaming returns chunks of chunk_frames frames, 40 frames to the second by default. Small chunks start playing sooner, though the whole job takes longer, because each chunk is decoded with its neighbours as context. Each utterance begins with a silent boundary of roughly 50 ms. In streaming mode most of that gap is cut and a 5 ms fade-in prevents a click. Each voice is 256 numbers. Save them and the ONNX package can use that voice too.

  1. Ukrainian text gets stress marks
  2. Phonetic transcription makes phonemes
  3. HolosTTS adds a preset or cloned voice
  4. Audio comes back whole or in chunks

Good to know

The author reports a first audio chunk after 3 ms on an RTX 5090 and 5 ms on an RTX 3090. Those are the author's own numbers.

Reported time to the first audio chunk in milliseconds
RTX 50903 ms
RTX 30905 ms
  • License: MIT
  • Cost to run: no API key or paid service is named, and the model runs on your own hardware
  • Data it reaches: on first use it fetches its model and voice files from Hugging Face and keeps a local copy
  • Not for: languages other than Ukrainian, raw text without phonemes, or cloning a voice you have no right to use

README and files

README

HolosTTS

Turns Ukrainian phonemes into speech with preset voices or a voice cloned from an audio sample, as streamed 24 kHz mono audio. For developers adding Ukrainian speech on PyTorch, ONNX Runtime, MLX or Android.

Made by patriotyk on Hugging Face. These notes are Mindket's, written from its model page and model card; the model's own files and license are on Hugging Face.

About

What it is: HolosTTS is an open-source text-to-speech model for Ukrainian, made by patriotyk. It reads phonemes and returns mono audio at 24 kHz, either all at once or as a stream. It has preset voices and can clone a voice from an audio sample.

Who it suits: It suits people who need Ukrainian speech in an app, on a server, on a Mac or on an Android phone. The author describes it as a balance of quality and speed.

Industry | Who uses it | How they use it | Example
Software | App developers | Add Ukrainian voice replies or narration to a product | A phone app that speaks through the Android library
Media | Video and audio makers | Voice a script with a preset voice or a cloned one | Narrating a short clip in Ukrainian
Education | Teachers and language app builders | Read Ukrainian lessons aloud | Speaking a short greeting from a lesson
Research | Speech engineers | Compare PyTorch, ONNX Runtime and MLX runs | Timing the first audio chunk on a GPU

You can skip it if you need languages other than Ukrainian, since the model lists Ukrainian only.

Where to use it:

  • PyTorch on a CPU or an NVIDIA GPU with a CUDA build
  • ONNX Runtime, no PyTorch needed: CPU, CUDA or TensorRT
  • MLX on the GPU of an Apple silicon Mac
  • Android, with LiteRT on the GPU or ONNX Runtime on the CPU
  • Windows, macOS or Linux with Python, to download the files
Use case | Who | What they get back
Narrate a text | Creators | A 24 kHz WAV file of the speech
Live speech | App developers | Audio chunks as soon as each one is ready
Custom voice | People with a clean recording they may use | Speech in a voice cloned from that recording

How to set it up:

  • Python and pip
  • Git, which the two helper packages for Ukrainian stress marks and phonetic transcription need
  • A CUDA build of PyTorch if you use an NVIDIA GPU
  • Internet on the first run, when the model fetches its files from Hugging Face and caches them
  1. Install the two helper packages ukrainian-word-stress and ipa-uk from their GitHub pages. The model takes phonemes, not plain text.
  2. Install the HolosTTS package for your runtime.
  3. Load the model. It downloads its files on first use.

To fetch the files yourself:

pip install -U huggingface_hub
hf download patriotyk/HolosTTS

For PyTorch:

python -m pip install holos-tts

For ONNX Runtime:

python -m pip install holos-tts-onnx              # CPU and CUDA
python -m pip install "holos-tts-onnx[tensorrt]"  # plus TensorRT

For MLX on Apple silicon:

python -m pip install holos-tts-mlx

How to use it: Turn your Ukrainian text into phonemes, then pass them to the model with a voice. Synthesize long texts one sentence at a time. A speed above 1 speaks faster and below 1 slower.

from ipa_uk import ipa
from ukrainian_word_stress import Stressifier

stressify = Stressifier()
phonemes = ipa(stressify("Привіт! Це український синтез мовлення."))
import torch
import soundfile as sf
from holos.models import HolosTTS

device = "cuda" if torch.cuda.is_available() else "cpu"
model = HolosTTS("patriotyk/HolosTTS", device=device)

print(model.list_voices())
voice = model.list_voices()[0]
audio = model.generate(phonemes, voice=voice, speed=1.0)
sf.write("speech.wav", audio.squeeze().cpu().numpy(), 24000)

For streaming, the chunks add up to the same audio as a single generate call:

for chunk in model.stream(phonemes, voice=voice):
    play(chunk.squeeze().cpu().numpy())  # tensor [1, samples]

To clone a voice, give the encoder a recording of the target voice with no music or other speakers:

from holos.models import VoiceEncoder

encoder = VoiceEncoder("patriotyk/HolosTTS", device=device)
with torch.inference_mode():
    custom_voice = encoder("reference.wav")
audio = model.generate(phonemes, voice=custom_voice)
sf.write("custom_voice.wav", audio.squeeze().cpu().numpy(), 24000)
Tool | What it does
holos-tts | Runs the model on PyTorch and clones voices
holos-tts-onnx | Runs it on ONNX Runtime without PyTorch, on CPU, CUDA or TensorRT
holos-tts-mlx | Runs it on the GPU of an Apple silicon Mac with MLX
holos-tts-litert | Runs through LiteRT on a CPU or GPU and guides the Android library

Example: Take the Ukrainian greeting "Привіт!", turn it into phonemes with the two helper packages, and call generate with the first voice from list_voices. You get speech.wav back, a mono recording at 24 kHz that speaks the greeting.

For newcomers and experts: The model reads sounds, not letters. Two small helper packages first turn your Ukrainian text into phonemes with stress marks. For a first try, install holos-tts, run the phoneme lines, print the voice list and generate one short sentence.

Underneath, streaming returns chunks of chunk_frames frames, 40 frames to the second by default. Small chunks start playing sooner, though the whole job takes longer, because each chunk is decoded with its neighbours as context. Each utterance begins with a silent boundary of roughly 50 ms. In streaming mode most of that gap is cut and a 5 ms fade-in prevents a click. Each voice is 256 numbers. Save them and the ONNX package can use that voice too.

Ukrainian text gets stress marks
Phonetic transcription makes phonemes
HolosTTS adds a preset or cloned voice
Audio comes back whole or in chunks

Good to know: The author reports a first audio chunk after 3 ms on an RTX 5090 and 5 ms on an RTX 3090. Those are the author's own numbers.

Title: Reported time to the first audio chunk in milliseconds
RTX 5090: 3 ms
RTX 3090: 5 ms
  • License: MIT
  • Cost to run: no API key or paid service is named, and the model runs on your own hardware
  • Data it reaches: on first use it fetches its model and voice files from Hugging Face and keeps a local copy
  • Not for: languages other than Ukrainian, raw text without phonemes, or cloning a voice you have no right to use

On Hugging Face, 13 November 2026

  • Task: text to speech
  • Formats: Safetensors
  • Downloads in the last 30 days: 95
  • Likes: 18
  • License: mit
  • Languages: uk
  • Tags: tflite, onnx, safetensors, litert, text-to-speech

Links

Get the model

Download its files with Hugging Face's command line:

pip install -U huggingface_hub
hf download patriotyk/HolosTTS

Then follow the usage in its model card. Nothing in this kit runs by itself.

Files
README.md  7 KB

1 file, 7 KB, downloaded as a zip.

What’s new

  • Version 1 · 2026-11-13

Compare with similar

Listed Hugging Face models in the same category that share the most tags with this one.

ProductDownloads, last 30 daysLikesParametersLicenseLast change
HolosTTS This page9518—mit
Scylla's BandShares litert · tflite · text-to-speech92917—apache-2.0
phonon-31m English for Compute FlowShares litert · tflite · text-to-speech56318.9Mapache-2.0
Idol on LiteRTShares litert · tflite1,0665—apache-2.0
GPT-2Shares tflite · onnx · safetensors32,892,2233,932137Mmit
VieNeu-TTS v3 TurboShares text-to-speech · onnx · safetensors2,151,800109131Mapache-2.0
Numbers as Mindket last read them, from 2026-11-12 to 2026-11-13.

Reviews

No ratings yet

Write a review

No reviews yet.

More from Mindket

See all from Mindket

anaksor-ocr

Sokheng · Kit

Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…

New

Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…

New

ACE-Step 1.5 XL SFT

ACE-Step · Kit

Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…

New

Similar in Developer

See all in Developer

Claude Code Skills & Plugins

alirezarezvani · Skill

Adds 411 ready-made skills for Claude Code and other coding agents, grouped by role from engineering and product to marketing, finance and compliance. Installs…

New29.8k

buzz

block · Kit

Self-hostable workspace where people and AI agents share the same rooms, built on a Nostr relay that logs every action as a signed event. For teams that want t…

New37.3k

plannotator

backnotprop · Kit

Opens your AI coding agent's plans, specs and code changes in a browser so you can annotate or comment on them and send the feedback straight back to the agent.

New10.5k