База знаний

Silero Models — open-source модели речи на русском (TTS, STT, VAD)

Open-source библиотека готовых моделей речи от Silero Team: синтез (TTS), распознавание (STT) и детекция голоса (VAD). Особенно сильна на русском: 5 живых голосов, автоматические ударения, омографы, SSML и три частоты дискретизации. Подключается одной строкой через pip или torch.hub.

Опубликовано Обновлено
🎯
Open-source библиотека готовых моделей речи от Silero Team: TTS, STT и VAD. Подключается одной строкой через pip или torch.hub, работает на CPU и GPU, не требует облака и API-ключей. Особенно сильна на русском: 5 голосов, автоматические ударения, омографы и SSML.

Что такое Silero

Silero — библиотека готовых end-to-end моделей речи от российской команды Silero Team. Внутри три семейства:

  • TTS — синтез речи (главный интерес для большинства задач)
  • STT — распознавание речи
  • VAD — детектор голоса (Silero VAD v6 уже стал индустриальным стандартом)

Ключевая идея проекта — «embarrassingly simple»: модели подключаются одной строкой, работают на обычном CPU, не требуют облака и API-ключей.

Лицензии:

  • основной репозиторий — CC-BY-NC 4.0 (только некоммерческое использование);
  • модели v5_cis_base и v5_cis_base_nostress опубликованы под MIT, их можно использовать коммерчески.

Что умеет на русском

Русский — флагманский язык проекта, и у него есть фишки, которых нет в других языках:

  • 5 живых голосов в актуальной версии v5_5_ru: aidar, baya, kseniya, xenia, eugene
  • Три частоты дискретизации: 8000, 24000, 48000 Гц (48 кГц звучит почти студийно)
  • Автоматическая расстановка ударений — модель сама понимает, где ставить ударение
  • Разрешение омографов — «зАмок» против «замОк» определяются по контексту
  • Вопросительная интонация (с версии v5_4_ru) — корректное интонирование вопросов
  • Поддержка SSML — управление паузами, скоростью, тоном
  • Алфавит: стандартный русский (абвгдеёжзийклмнопрстуфхцчшщъыьэюя)

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

МодельГолосаУдарения / Омографы / Вопросы
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.


Установка

Минимум: Python 3.8+, процессор с инструкциями AVX2 (любой современный x86/64 CPU), PyTorch 2.0+ для v5-моделей.

Через pip (рекомендуется)

pip install silero torch torchaudio omegaconf

Через PyTorch Hub

Ничего отдельно ставить не нужно, кроме самого PyTorch:

pip install torch torchaudio omegaconf

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

Standalone (без интернета на проде)

Скачайте .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 позволяет управлять паузами, скоростью, тоном и логическими ударениями. Подробности — на Wiki проекта.

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

model.save_wav(text=ssml_text, speaker='kseniya', sample_rate=48000)

Полезные теги:

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

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

Если автоматика ошиблась с омографом, поставьте ударение знаком + перед гласной:

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

То же самое работает в моделях v5_cis_base (там ручные ударения обязательны для всех слов на не-славянских языках).


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

Codex (CLI или агент в подписке ChatGPT) умеет ставить пакеты и запускать скрипты. Silero идеально вписывается в его workflow: одна команда установки плюс один Python-скрипт.

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

💬
Настрой 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 дальше

  • Сборка пайплайна: «прочитай тексты постов из posts.md, разбей на абзацы и озвучь каждый отдельным WAV»
  • Telegram-бот: «оберни tts.py в aiogram-бота, который принимает сообщение и возвращает голосовое»
  • FastAPI-сервис: «сделай HTTP-эндпоинт /tts на FastAPI, который принимает JSON {text, speaker} и отдаёт audio/wav»
  • Озвучка YouTube-сценария: «возьми сценарий, расставь паузы SSML между абзацами и склей итоговый WAV через pydub»
  • Пакетная обработка: «обработай папку texts/*.txt параллельно, используй torch.set_num_threads(4)»

Подсказки для надёжной работы

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

STT и VAD

Если в задаче нужна не только озвучка:

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

Оба подключаются той же одной строкой torch.hub.load. Для пайплайнов «голос → текст → ответ → голос» в Codex это идеальный набор: VAD → STT → ваша логика → Silero TTS.


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


По теме

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