Open-source библиотека, которая синтезирует, распознаёт и детектирует русскую речь на обычном процессоре — без облака, API-ключей и платных подписок.

Что это

Голос в приложении обычно означает зависимость: облачный API, лимиты, ключи, счета. Silero идёт другим путём. Это набор предобученных нейросетей для работы с речью, которые запускаются локально — на том же процессоре, где крутится ваш код. Модели подключаются одной строкой через pip или torch.hub, не требуют GPU и работают офлайн.

Внутри три семейства:

  • TTS (text-to-speech) — синтез речи из текста. Главная причина, по которой большинство разработчиков приходят в проект.
  • STT (speech-to-text) — распознавание речи в текст. По качеству сопоставимо с Google, Yandex и SberSpeech, но работает без сети.
  • VAD (voice activity detection) — детектор голоса. Отделяет тишину и шум от полезного сигнала. Silero VAD v6 стал индустриальным стандартом для голосовых пайплайнов.
Репозиторий Silero Models на GitHub

Проект развивает российская команда Silero Team. Ключевая идея — embarrassingly simple: модели подключаются минимальным кодом, работают на обычном CPU и не требуют инфраструктуры. Это не облачный сервис с тарифами, а библиотека, которую можно установить и забыть про счета.

Лицензии разделены. Основной репозиторий опубликован под CC-BY-NC 4.0 — только некоммерческое использование. Но модели v5_cis_base и v5_cis_base_nostress вышли под MIT, их можно использовать в коммерческих продуктах. Русский язык в них доступен с префиксом ru_.

Важно: перед внедрением в коммерческий проект проверьте, какая именно модель вам нужна. Бесплатные модели для исследований и платные для бизнеса — это разные пакеты лицензий.

Что это и как использовать

Если вы когда-нибудь работали с Ollama для локальных LLM, логика знакома: одна команда установки, модель скачивается при первом запуске, дальше всё работает офлайн. Silero — то же самое для речи.

Три шага до первого аудио:

    1. Установите библиотеку: pip install silero torch torchaudio omegaconf
    1. Загрузите модель одной строкой кода — она скачается и закешируется автоматически
    1. Вызовите model.save\_wav(text="Привет", speaker="xenia") — получите WAV-файл

Пять минут от установки до готового файла. Не преувеличение.

Возможности русского языка

Русский — флагманский язык проекта. В актуальной версии v5_5_ru доступны пять голосов: aidar, baya, kseniya, xenia, eugene. Каждый со своим тембром и характером — от мягкого женского до низкого мужского.

Но голоса — это начало. Вот что делает русский слой уникальным:

  • Автоматические ударения. Модель сама определяет ударную гласную в каждом слове. Размечать текст вручную не нужно.
  • Омографы по контексту. Слова «зАмок» и «замОк» пишутся одинаково, но звучат по-разному. Модель различает их по тому, как слово употреблено в предложении.
  • Вопросительная интонация. Доступна с версии v5_4_ru. Вопросы озвучиваются с корректным повышением тона в конце, а не как утверждение с вопросительным знаком.
  • SSML-разметка. Управление паузами, скоростью и тоном через XML-теги прямо внутри текста — аналог того, что предлагают облачные TTS-сервисы.
  • Три частоты дискретизации: 8000, 24000 и 48000 Гц. 48 кГц звучит почти студийно. 8000 Гц — для телефонии, где важна экономия трафика.

Алфавит — стандартный русский: абвгдеёжзийклмнопрстуфхцчшщъыьэюя.

Версии русских моделей

Модель эволюционировала через несколько версий. Каждая добавляла возможности:

МодельГолосаУдаренияОмографыВопросы
v5_5_ru (последняя)aidar, baya, kseniya, xenia, eugeneДаДаДа
v5_4_ruaidar, baya, kseniya, xeniaДаДаДа
v5_3_ru5 голосовДаДаНет
v5_ru5 голосовДаДаНет
v4_ru5 голосов + randomДаНетНет

Для коммерческих проектов подойдут v5_cis_base и v5_cis_base_nostress — русские голоса в них доступны с префиксом ru_ и лицензией MIT. Модели из основной таблицы выше предназначены только для некоммерческого использования.

Совет: если вам не нужна вопросительная интонация, v5_3_ru и v5_ru работают почти так же, но легче и быстрее. Выбирайте минимальную модель, которая покрывает ваши требования.

Как устроено

Архитектура — end-to-end нейросети. Это значит, что модель принимает сырой текст на вход и отдаёт аудиосигнал на выходе, без промежуточных этапов фонемизации, выравнивания и вокодера, которые разделяют классические TTS-системы. Один проход сети — готовый звук.

Минимальные требования: Python 3.8+, процессор с поддержкой AVX2 (любой современный x86/64 CPU), PyTorch 2.0+ для моделей пятой версии. GPU не обязателен — модели работают на процессоре с приемлемой скоростью. На Mac с Apple Silicon доступно ускорение через mps.

Установка

Три способа подключения, от простого к продакшен-варианту.

Через pip

Рекомендуемый путь для большинства задач:

pip install silero torch torchaudio omegaconf

Через PyTorch Hub

Если не хотите ставить отдельный пакет Silero, достаточно PyTorch:

pip install torch torchaudio omegaconf

Модель скачивается при первом вызове torch.hub.load() и кешируется в ~/.cache/torch/hub.

Standalone — офлайн на проде

Для production-окружения без доступа в интернет: скачайте .pt файл один раз, дальше используйте локально. Нужны только PyTorch и стандартная библиотека Python.

curl -L -o v5_ru.pt https://models.silero.ai/models/tts/ru/v5_ru.pt

Пример

Три способа запустить синтез — под тот же способ установки.

Через pip-пакет

from silero import silero_tts

model, example_text = silero_tts(language='ru', speaker='v5_ru')
audio = model.apply_tts(text=example_text)

Через PyTorch Hub

import torch

language = 'ru'
model_id = 'v5_ru'
sample_rate = 48000
speaker = 'xenia'
device = torch.device('cpu')

model, _ = torch.hub.load(
    repo_or_dir='snakers4/silero-models',
    model='silero_tts',
    language=language,
    speaker=model_id,
)
model.to(device)

text = 'Привет! Это первый тест синтеза речи на русском языке.'
audio_path = model.save_wav(
    text=text,
    speaker=speaker,
    sample_rate=sample_rate,
)
print(f'Файл сохранён: {audio_path}')

Standalone — офлайн-вариант

import os
import torch

device = torch.device('cpu')
torch.set_num_threads(4)
local_file = 'v5_ru.pt'

if not os.path.isfile(local_file):
    torch.hub.download_url_to_file(
        'https://models.silero.ai/models/tts/ru/v5_ru.pt',
        local_file,
    )

model = torch.package.PackageImporter(local_file).load_pickle('tts_models', 'model')
model.to(device)

text = 'Меня зовут Лёва Королёв, и я открою все ваши замки.'
model.save_wav(text=text, speaker='baya', sample_rate=48000)

Управление озвучкой через SSML

SSML (Speech Synthesis Markup Language) — язык разметки для управления речью. Позволяет вставлять паузы, менять скорость и тон отдельных фраз, размечать параграфы. Работает как XML-теги внутри текста, который передаёте в model.save_wav().

ssml_text = '''
<speak>
  Сегодня <prosody rate="slow">очень важная</prosody> новость.
  <break time="500ms"/>
  Мы запускаем новый продукт!
</speak>
'''

model.save_wav(text=ssml_text, speaker='kseniya', sample_rate=48000)
Официальная SSML Wiki проекта Silero

Базовые теги разметки:

  • <break time="500ms"/> — вставка паузы на указанное время
  • <prosody rate="slow|fast">...</prosody> — меняет темп произнесения отрывка
  • <prosody pitch="high|low">...</prosody> — сдвигает тон голоса вверх или вниз
  • <p> и <s> — разметка параграфов и предложений, между которыми модель ставит дыхательные паузы

Инсайт: SSML — это единственный способ тонко настроить интонацию без переобучения модели. Если голос звучит монотонно на длинном тексте, расставьте между абзацами — результат меняется радикально.

Ручная расстановка ударений

Автоматика иногда ошибается с омографами. Если модель выбрала неправильное ударение, поставьте его вручную — знаком + перед нужной гласной:

text = 'Стальной з+амок и навесной зам+ок — это разные вещи.'
model.save_wav(text=text, speaker='xenia', sample_rate=48000)

Тот же приём работает в моделях v5_cis_base. Но там ручная разметка ударений требуется для каждого слова на не-славянских языках — автоматика их не расставляет.

Использование в связке с Codex

Codex — CLI-агент от OpenAI, который умеет ставить пакеты и запускать скрипты. Silero вписывается в его workflow без трения: одна команда установки плюс один Python-файл.

Шаблон промпта для Codex

Текст, который можно передать Codex для развёртывания Silero:

Настрой Python-окружение для Silero TTS на русском:
1. Создай venv в папке .venv и активируй его.
2. Установи зависимости: pip install silero torch torchaudio omegaconf soundfile.
3. Создай скрипт tts.py, который принимает текст из аргумента --text
   и имя голоса --speaker (по умолчанию xenia), генерирует WAV в папке out/
   через модель v5_ru на 48 кГц.
4. Покажи пример запуска и проверь, что файл создаётся.

Codex развернёт окружение и напишет скрипт примерно такого вида:

# tts.py
import argparse
import os
from pathlib import Path
import torch

MODEL_URL = 'https://models.silero.ai/models/tts/ru/v5_ru.pt'
MODEL_FILE = Path('models/v5_ru.pt')

def load_model():
    MODEL_FILE.parent.mkdir(parents=True, exist_ok=True)
    if not MODEL_FILE.exists():
        torch.hub.download_url_to_file(MODEL_URL, str(MODEL_FILE))
    model = torch.package.PackageImporter(str(MODEL_FILE)).load_pickle('tts_models', 'model')
    model.to(torch.device('cpu'))
    return model

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--text', required=True)
    parser.add_argument('--speaker', default='xenia',
        choices=['aidar', 'baya', 'kseniya', 'xenia', 'eugene'])
    parser.add_argument('--out', default='out/result.wav')
    args = parser.parse_args()

    Path(args.out).parent.mkdir(parents=True, exist_ok=True)
    model = load_model()
    path = model.save_wav(text=args.text, speaker=args.speaker, sample_rate=48000, audio_path=args.out)
    print(f'OK -> {path}')

if __name__ == '__main__':
    main()

Запуск:

python tts.py --text "Codex теперь умеет говорить." --speaker baya

Развёрнутые сценарии для Codex

Когда базовый скрипт работает, поверх него можно строить полноценные сервисы. Вот что Codex собирает без доработки:

  • Пайплайн пакетной озвучки — подайте файл posts.md с текстами постов, и агент разобьёт его на абзацы, сгенерирует отдельный WAV для каждого и сложит в папку
  • Telegram-бот на aiogram — бот принимает текстовое сообщение, прогоняет через tts.py и отвечает голосовым сообщением
  • HTTP-сервис на FastAPI — эндпоинт /tts принимает JSON с текстом и именем голоса, отдаёт WAV-файл в ответ
  • Озвучка сценария для YouTube — Codex берёт сценарий, вставляет SSML-паузы между абзацами и склеивает финальный WAV через pydub
  • Параллельная обработка папки — все файлы из texts/*.txt озвучиваются одновременно, torch.set_num_threads(4) ограничивает загрузку CPU

Настройки для стабильной работы с Codex

Несколько правил, которые экономят время в Codex-сессиях:

  • Фиксируйте параметры явно: версию модели (v5_5_ru), имя голоса, частоту дискретизации. Codex по умолчанию может выбрать устаревшую версию
  • Требуйте локальное кеширование .pt файла — без этого агент скачивает модель при каждом запуске скрипта
  • На Mac с Apple Silicon укажите: «ускорение через mps, если доступно, иначе cpu» — это использует GPU чипа M-серии
  • Для текстов длиннее ~1000 символов просите агента автоматически нарезать на чанки и склеивать WAV-файлы — модель не рассчитана на длинные фрагменты за один вызов

STT и VAD

TTS — не единственная возможность библиотеки. Если в задаче нужен не только синтез, но и распознавание:

  • Silero STT — распознавание русской речи. Качество на уровне облачных сервисов Google, Yandex и SberSpeech, но без сетевого соединения. Аудио не покидает машину — это важно для конфиденциальных записей.
  • Silero VAD v6 — определитель присутствия голоса в аудиопотоке. Отсекает тишину, шум и паузы, оставляя только речевые сегменты. Необходим в любом голосовом контуре: транскрибация звонков, голосовые ассистенты, запись встреч. Без VAD распознавание работает с мусорными данными.

Оба модуля подключаются тем же torch.hub.load. Для замкнутого голосового пайплайна в Codex получается готовая цепочка: VAD отсекает тишину, STT переводит речь в текст, ваша логика генерирует ответ, Silero TTS озвучивает результат.

Важно: VAD — не опция по желанию для голосового пайплайна. Без него STT получает куски тишины и шума, которые портят распознавание и тратят ресурсы. VAD стоит первым в цепочке.

Ограничения

Ограничения

Что учитывать

Лицензия и коммерческое использование — главный барьер.

Голос больше не требует облака. Пять строк кода, один WAV-файл, ноль счетов за API.

CC-BY-NC 4.0 на основном репозитории — Модели v5_5_ru, v5_4_ru, v5_3_ru, v5_ru, v4_ru доступны только для некоммерческих проектов.

Для коммерции нужно использовать модели под MIT: v5_cis_base и v5_cis_base_nostress, где русский доступен с префиксом ru_.

Требование AVX2 — Модели не запустятся на старых процессорах без инструкций AVX2.

Любой x86/64 CPU последних лет их поддерживает, но на арендованных VPS с устаревшими конфигурациями стоит проверить через lscpu | grep avx2.

PyTorch 2.0+ для v5 — Пятерка моделей требует свежий PyTorch.

На старых версиях работают только v4 и ниже, что означает потерю вопросительной интонации и разрешения омографов.

Ограничение по длине текста — Модели не рассчитаны на синтез длинных текстов за один вызов.

Для текстов свыше ~1000 символов требуется ручная нарезка на чанки и последующая склейка WAV-файлов.

Антипаттерны

Антипаттерны

Чего не делать

Не использовать основную модель в коммерческом проекте — Лицензия CC-BY-NC 4.0 запрещает.

Если продукт зарабатывает деньги, берите v5_cis_base под MIT. Разница в качестве есть, но юридический риск перевешивает.

Не качать модель при каждом запуске — Файл .pt весит десятки мегабайт.

Без локального кеширования каждый запуск начинается с сетевой задержки. В Codex-сессиях это особенно критично: агент может перезапускать скрипт многократно. Скачайте один раз и используйте standalone-режим.

Не игнорировать SSML на длинных текстах — Без пауз и вариаций скорости голос звучит монотонно.

Чем длиннее текст, тем заметнее проблема. Расставьте между абзацами и для акцентов — результат звучит как начитка, а не как робот.

Чеклист

Чеклист

Проверка перед запуском

Проверьте лицензию

— Определите, нужна ли коммерческая модель (v5_cis_base под MIT) или достаточно основной (v5_5_ru под CC-BY-NC 4.0)

Проверьте AVX2 — Выполните lscpu | grep avx2 на Linux или sysctl -n machdep.cpu.features на Mac.

Если AVX2 нет, модель не запустится.

Установите PyTorch 2.0+ — Для v5-моделей это обязательное требование.

Проверьте версию командой python -c import torch; print(torch.version)

Выберите частоту дискретизации

— 48000 Гц для студийного качества, 24000 Гц для веб-аудио, 8000 Гц для телефонии

Протестируйте омографы — Если в тексте есть слова типа «замок», «мука», «печи», проверьте, правильно ли модель расставила ударения.

Если нет — используйте ручную разметку через +

Ссылки

Ссылки