СейчасЧто это такое
- Что это такое
- Основные возможности
- Что нужно для запуска
- Установка
- Быстрый старт без кода
- Python API
- Клонирование голоса
- Переиспользование клона между сессиями
- Voice Design (голос по описанию)
- Auto Voice
- Параметры генерации
- Управление произношением
- Командная строка (CLI)
- Лицензия и ограничения
- Сценарии использования
- Наш кейс: озвучка pimenov.ai на Mac mini
- Полезные ссылки
Локальная open-source модель синтеза речи (TTS) на 600+ языков: клонирует голос по образцу в 3–10 секунд и работает офлайн на своём железе. Здесь — что это, как поставить и как мы озвучиваем этой моделью весь pimenov.ai на Mac mini.
Что это такое
OmniVoice — open-source TTS-модель от команды k2-fsa (проект Next-gen Kaldi; среди авторов — Daniel Povey, создатель Kaldi). Построена на архитектуре diffusion language model, поддерживает синтез на 600+ языках, клонирование голоса и дизайн голоса по текстовому описанию. Код открыт под лицензией Apache 2.0, веса и примеры лежат в публичном доступе.
Главное отличие от облачных сервисов вроде Yandex SpeechKit или ElevenLabs в том, что OmniVoice полностью работает локально. Нет API-ключей, оплаты за символы и отправки текста на чужие серверы: всё считается на вашем компьютере или сервере.
Основные возможности
| Возможность | Что даёт |
| 600+ языков | Самое широкое покрытие языков среди zero-shot TTS-моделей |
| Клонирование голоса | Копирует голос по образцу в 3–10 секунд, без дообучения |
| Voice Design | Голос по описанию атрибутов: пол, возраст, высота, акцент, шёпот |
| Тонкий контроль | Невербальные вставки ([laughter], [sigh]) и коррекция произношения |
| Быстрый инференс | RTF от 0.025 — до 40 раз быстрее реального времени |
Что нужно для запуска
- Python со свежим виртуальным окружением (
conda,venv). - PyTorch под ваше железо.
- Ускоритель: NVIDIA GPU (CUDA), Apple Silicon (MPS) или Intel Arc GPU (XPU). На Apple Silicon модель работает через backend
mps. - Образец голоса на 3–10 секунд для клонирования (для режимов Voice Design и Auto Voice образец не нужен).
Установка
Шаг 1. Поставьте PyTorch под вашу платформу.
# NVIDIA GPU (пример под CUDA 12.8)
pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 --extra-index-url https://download.pytorch.org/whl/cu128
# Apple Silicon (Mac mini, MacBook на M-чипах)
pip install torch==2.8.0 torchaudio==2.8.0Шаг 2. Поставьте OmniVoice одним из способов.
# Стабильный релиз с PyPI
pip install omnivoice
# Последняя версия из исходников (клонировать не нужно)
pip install git+https://github.com/k2-fsa/OmniVoice.git
# Для разработки: клон + editable-установка
git clone https://github.com/k2-fsa/OmniVoice.git
cd OmniVoice
pip install -e .export HF_ENDPOINT="https://hf-mirror.com".Быстрый старт без кода
Модель можно попробовать до написания единой строки кода:
- Локальный веб-интерфейс:
omnivoice-demo --ip 0.0.0.0 --port 8001 - Hugging Face Space: huggingface.co/spaces/k2-fsa/OmniVoice
- Google Colab: ноутбук OmniVoice.ipynb
Python API
Все три режима генерации используют один метод model.generate().
Клонирование голоса
Передайте образец ref_audio и его расшифровку ref_text:
from omnivoice import OmniVoice
import soundfile as sf
import torch
model = OmniVoice.from_pretrained(
"k2-fsa/OmniVoice",
device_map="cuda:0", # Apple Silicon: "mps", Intel Arc: "xpu"
dtype=torch.float16,
)
audio = model.generate(
text="Привет, это тест клонирования голоса.",
ref_audio="ref.wav",
ref_text="Расшифровка образца аудио.",
) # список np.ndarray формы (T,) на 24 кГц
sf.write("out.wav", audio[0], 24000)ref_text можно не передавать — тогда модель сама расшифрует образец через Whisper ASR. Это удобнее, но добавляет шаг распознавания.Переиспользование клона между сессиями
Закодируйте образец один раз, сохраните готовый prompt и пропускайте загрузку аудио в следующих запусках:
prompt = model.create_voice_clone_prompt(
ref_audio="ref.wav", ref_text="Расшифровка образца аудио."
)
prompt.save("my_voice.pt")
# Позже, в новой сессии:
from omnivoice import VoiceClonePrompt
prompt = VoiceClonePrompt.load("my_voice.pt")
audio = model.generate(text="И снова здравствуйте!", voice_clone_prompt=prompt)VoiceClonePrompt и переиспользовать его для всех фрагментов: голос останется одинаковым на протяжении всей статьи.Voice Design (голос по описанию)
Опишите нужный голос атрибутами, образец не требуется. Атрибуты перечисляются через запятую и свободно комбинируются: пол, возраст, высота тона, стиль (шёпот), английский акцент, китайский диалект.
audio = model.generate(
text="Это тест дизайна голоса.",
instruct="female, low pitch, british accent",
)Auto Voice
Модель сама подбирает голос, если ничего не задано:
audio = model.generate(text="Предложение без голосового промпта.")Параметры генерации
audio = model.generate(
text="...",
num_step=32, # шаги диффузии; 16 — быстрее, но чуть грубее
speed=1.0, # темп речи: >1.0 быстрее, <1.0 медленнее
duration=10.0, # фиксированная длительность в секундах (перекрывает speed)
)model.generate(text=..., normalize_text=True). Нужен доп. пакет pip install "omnivoice[tn]", а на macOS (Apple Silicon) сначала conda install -c conda-forge pynini.Управление произношением
OmniVoice понимает встроенные в текст управляющие вставки.
- Невербальные звуки: теги прямо в тексте, например
[laughter],[sigh],[surprise-ah]. - Китайское произношение: пиньинь с номером тона для коррекции конкретных иероглифов.
- Английское произношение: транскрипция из словаря CMU заглавными в квадратных скобках, например
[B EY1 S], чтобы задать нужный вариант чтения.
audio = model.generate(text="[laughter] Вот это поворот, я такого не ожидал.")Командная строка (CLI)
Три команды покрывают все возможности Python API.
| Команда | Назначение |
omnivoice-demo | Интерактивный веб-интерфейс (Gradio) |
omnivoice-infer | Одиночная генерация |
omnivoice-infer-batch | Пакетная генерация на нескольких GPU |
Пример одиночного клонирования голоса:
omnivoice-infer \
--model k2-fsa/OmniVoice \
--text "Это тест синтеза речи." \
--ref_audio ref.wav \
--ref_text "Расшифровка образца аудио." \
--output hello.wavПакетная генерация принимает JSONL, где обязательны только id и text:
{"id": "sample_001", "text": "Привет, мир", "ref_audio": "/path/ref.wav", "ref_text": "Образец", "speed": 1.0}Лицензия и ограничения
- Код опубликован под лицензией Apache 2.0.
- Веса модели: условия лицензии на веса уточняйте на странице модели в Hugging Face перед коммерческим использованием — у open-source речевых моделей ограничения на веса иногда строже, чем на код.
Сценарии использования
Где локальная модель с клонированием голоса особенно выигрывает:
- Аудиоверсии статей и блога собственным голосом. Массово озвучиваете тексты сайта — без оплаты за символы и без отправки контента в облако (наш основной сценарий, см. ниже).
- Многоязычные версии одного материала. Один клон голоса → та же статья звучит на десятках языков; для естественного произношения берите образец на языке озвучки.
- Аудиокниги и подкасты. Длинные тексты одним ровным голосом за счёт сохранённого
VoiceClonePrompt; пакетную генерацию удобно гонять черезomnivoice-infer-batch. - Голосовые уведомления и ассистенты. Офлайн-синтез для локальных сервисов и умного дома, где важны приватность и работа без интернета (модель уже используют в Home Assistant).
- Персонажи и дубляж без записи актёра. Voice Design задаёт голос по описанию (пол, возраст, акцент, шёпот) — удобно для прототипов, обучающих роликов и игровых реплик.
- Черновая озвучка и проверка сценариев. Быстро «прослушать» текст до финальной записи; невербальные вставки
[laughter]/[sigh]помогают прикинуть интонацию.
Наш кейс: озвучка pimenov.ai на Mac mini
Мы держим OmniVoice на Mac mini и озвучиваем им материалы сайта клоном авторского голоса.
flowchart LR
A[VPS: задача на озвучку] --> B[Mac mini: OmniVoice]
B --> C[Синтез аудио клоном голоса]
C --> D[VPS: сохранение и публикация]Как это устроено:
- Клон голоса сняли с 10-секундной записи, начитанной прямо в QuickTime.
- Генерация вынесена на Mac mini: задача прилетает с VPS, Mac mini синтезирует аудио и отправляет готовый файл обратно на VPS, где он попадает на сайт.
- Скорость на нашем железе — около 23 секунд на минуту готового аудио.
- Контур синтеза переключаемый: тот же материал можно перегенерировать либо через Yandex SpeechKit, либо локально через OmniVoice, и при необходимости пересобрать аудио для всего сайта.
Полезные ссылки
- Репозиторий на GitHub: github.com/k2-fsa/OmniVoice
- Модель в Hugging Face: huggingface.co/k2-fsa/OmniVoice
- Демо (Hugging Face Space): huggingface.co/spaces/k2-fsa/OmniVoice
- Страница проекта и примеры: zhu-han.github.io/omnivoice
- Полный список языков: docs/languages.md
- Научная статья: arxiv.org/abs/2604.00688
По теме
Если у вас есть длинные тексты или база знаний, которые хочется озвучить собственным голосом и без зависимости от облака, такой локальный контур на OmniVoice реально собрать и довести до рабочего состояния.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.