pimenov.ai

База знаний

OmniVoice — локальный синтез речи и клонирование голоса на 600+ языков

Локальная open-source TTS-модель на 600+ языков: клонирует голос по образцу в 3–10 секунд, работает офлайн. Установка, API, сценарии и наш кейс озвучки сайта на Mac mini.

Опубликовано
🗓️
Актуальность: проверено 24 июля 2026 года по официальному репозиторию k2-fsa/OmniVoice (README, установка, API). Проект молодой и активно обновляется, поэтому команды установки и список возможностей сверяйте с репозиторием перед запуском.

Локальная open-source модель синтеза речи (TTS) на 600+ языков: клонирует голос по образцу в 3–10 секунд и работает офлайн на своём железе. Здесь — что это, как поставить и как мы озвучиваем этой моделью весь pimenov.ai на Mac mini.

💡
TTS (text-to-speech) — синтез речи: текст превращается в аудио. Zero-shot означает, что модели не нужно дообучение под новый голос — она клонирует его по короткому образцу прямо на лету.

Что это такое

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 раз быстрее реального времени
⚙️
Про скорость честно: RTF 0.025 (40×) — это потолок на серверном GPU. На реальном железе показатели скромнее: сторонние тесты дают ~5–6× быстрее реального времени на RTX 5070 Ti, а на Apple Silicon (наш Mac mini) выходит около 2.6× — примерно 23 секунды на минуту готового аудио. Для пакетной офлайн-озвучки этого более чем достаточно.

Что нужно для запуска

  • 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 .
💡
Если модель не скачивается из Hugging Face, перед запуском задайте зеркало: export HF_ENDPOINT="https://hf-mirror.com".

Быстрый старт без кода

Модель можно попробовать до написания единой строки кода:

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",
)
⚖️
Voice Design обучен только на китайских и английских данных. На других языках он работает, но на редких языках и в пограничных случаях результат бывает нестабильным. Клонирование голоса — самый стабильный режим.

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)
)
💡
Для образца используйте 3–10 секунд чистой записи. Более длинный образец замедляет инференс и может ухудшить клон. Для стандартного произношения берите образец на том же языке, что и целевая речь: при кросс-языковом клонировании голос получит акцент языка образца.
🔢
Числа и даты в тексте. По умолчанию модель может прочитать «2345» по цифрам. Для озвучки статей и материалов сайта включайте нормализацию: 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, и при необходимости пересобрать аудио для всего сайта.
📌
Итог: локальный контур снимает зависимость от облака и оплаты за символы. Аудио генерируется собственным голосом, офлайн, с возможностью в любой момент перегенерировать весь сайт.

Полезные ссылки


По теме

Если у вас есть длинные тексты или база знаний, которые хочется озвучить собственным голосом и без зависимости от облака, такой локальный контур на OmniVoice реально собрать и довести до рабочего состояния.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov