sidebar_position: 9 title: "Voice & TTS" description: "Text-to-speech and voice message transcription across all platforms" lang: ru


Голос и TTS

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

💡 Tip

Подписчики Если у вас есть платная подписка на [Nous Portal](https://portal.nousresearch.com), OpenAI TTS доступен через **[Tool Gateway](tool-gateway.md)** без отдельного ключа OpenAI API. Запустите `hermes model` или `hermes tools`, чтобы включить его.

Преобразование текста в речь

Преобразование текста в речь с помощью десяти провайдеров:

Провайдер Качество Стоимость API-ключ
Пограничный TTS (по умолчанию) Хорошо Бесплатно Ничего не нужно
ЭлевенЛабс Отлично Платный ELEVENLABS_API_KEY
OpenAI TTS Хорошо Платный VOICE_TOOLS_OPENAI_KEY
МиниМакс ТТС Отлично Платный MINIMAX_API_KEY
Мистраль (Вокстрал ТТС) Отлично Платный MISTRAL_API_KEY
Google Gemini TTS Отлично Уровень бесплатного пользования GEMINI_API_KEY
xAI TTS Отлично Платный XAI_API_KEY
НейТТС Хорошо Бесплатно (локально) Ничего не нужно
КотенокTTS Хорошо Бесплатно (локально) Ничего не нужно
Пайпер Хорошо Бесплатно (локально) Ничего не нужно

Доставка платформы

Платформа Доставка Формат
Телеграмма Голосовой пузырь (играет в режиме онлайн) Опус .ogg
Раздор Голосовой пузырь (Opus/OGG), возвращается к вложенному файлу Опус/MP3
WhatsApp Вложенный аудиофайл MP3
интерфейс командной строки Сохранено в ~/.hermes/audio_cache/ MP3

Конфигурация

# In ~/.hermes/config.yaml
tts:
  provider: "edge"              # "edge" | "elevenlabs" | "openai" | "minimax" | "mistral" | "gemini" | "xai" | "neutts" | "kittentts" | "piper"
  speed: 1.0                    # Global speed multiplier (provider-specific settings override this)
  edge:
    voice: "en-US-AriaNeural"   # 322 voices, 74 languages
    speed: 1.0                  # Converted to rate percentage (+/-%)
  elevenlabs:
    voice_id: "pNInz6obpgDQGcFmaJgB"  # Adam
    model_id: "eleven_multilingual_v2"
  openai:
    model: "gpt-4o-mini-tts"
    voice: "alloy"              # alloy, echo, fable, onyx, nova, shimmer
    base_url: "https://api.openai.com/v1"  # Override for OpenAI-compatible TTS endpoints
    speed: 1.0                  # 0.25 - 4.0
  minimax:
    model: "speech-2.8-hd"     # speech-2.8-hd (default), speech-2.8-turbo
    voice_id: "English_Graceful_Lady"  # See https://platform.minimax.io/faq/system-voice-id
    speed: 1                    # 0.5 - 2.0
    vol: 1                      # 0 - 10
    pitch: 0                    # -12 - 12
  mistral:
    model: "voxtral-mini-tts-2603"
    voice_id: "c69964a6-ab8b-4f8a-9465-ec0925096ec8"  # Paul - Neutral (default)
  gemini:
    model: "gemini-2.5-flash-preview-tts"  # or gemini-2.5-pro-preview-tts
    voice: "Kore"               # 30 prebuilt voices: Zephyr, Puck, Kore, Enceladus, Gacrux, etc.
  xai:
    voice_id: "eve"             # or a custom voice ID — see docs below
    language: "en"              # ISO 639-1 code
    sample_rate: 24000          # 22050 / 24000 (default) / 44100 / 48000
    bit_rate: 128000            # MP3 bitrate; only applies when codec=mp3
    # base_url: "https://api.x.ai/v1"   # Override via XAI_BASE_URL env var
  neutts:
    ref_audio: ''
    ref_text: ''
    model: neuphonic/neutts-air-q4-gguf
    device: cpu
  kittentts:
    model: KittenML/kitten-tts-nano-0.8-int8   # 25MB int8; also: kitten-tts-micro-0.8 (41MB), kitten-tts-mini-0.8 (80MB)
    voice: Jasper                               # Jasper, Bella, Luna, Bruno, Rosie, Hugo, Kiki, Leo
    speed: 1.0                                  # 0.5 - 2.0
    clean_text: true                            # Expand numbers, currencies, units
  piper:
    voice: en_US-lessac-medium                  # voice name (auto-downloaded) OR absolute path to .onnx
    # voices_dir: ''                            # default: ~/.hermes/cache/piper-voices/
    # use_cuda: false                           # requires onnxruntime-gpu
    # length_scale: 1.0                         # 2.0 = twice as slow
    # noise_scale: 0.667
    # noise_w_scale: 0.8
    # volume: 1.0                               # 0.5 = half as loud
    # normalize_audio: true

Контроль скорости: глобальное значение tts.speed по умолчанию применяется ко всем поставщикам. Каждый провайдер может переопределить его с помощью собственной настройки speed (например, tts.openai.speed: 1.5). Скорость, зависящая от поставщика, имеет приоритет над глобальным значением. По умолчанию — 1.0 (нормальная скорость).

Голосовые пузыри Telegram и ffmpeg

Для голосовых сообщений Telegram требуется аудиоформат Opus/OGG:

# Ubuntu/Debian
sudo apt install ffmpeg

# macOS
brew install ffmpeg

# Fedora
sudo dnf install ffmpeg

Без ffmpeg аудио Edge TTS, MiniMax TTS, NeuTTS, KittenTTS и Piper отправляются как обычные аудиофайлы (воспроизводимые, но отображаются в виде прямоугольного проигрывателя вместо голосового пузыря).

:::совет Если вам нужны голосовые пузыри без установки ffmpeg, переключитесь на поставщика OpenAI, ElevenLabs или Mistral.

xAI Custom Voices (клонирование голоса)

xAI поддерживает клонирование вашего голоса и использование его с TTS. Создайте собственный голос в xAI Console, затем установите полученный voice_id в свою конфигурацию:

tts:
  provider: xai
  xai:
    voice_id: "nlbqfwie"   # your custom voice ID

Подробную информацию о записи, поддерживаемых форматах и ограничениях см. в документации по xAI Custom Voices.

Piper (местный, 44 языка)

Piper — это быстрый локальный нейронный TTS-движок от Open Home Foundation (сопровождающие Home Assistant). Он полностью работает на процессоре, поддерживает 44 языка с заранее обученными голосами и не требует ключа API.

Установить через hermes tools → Голос и TTS → Piper — Hermes запускает для вас pip install piper-tts. Или установите вручную: pip install piper-tts.

Переключиться на Пайпер:

tts:
  provider: piper
  piper:
    voice: en_US-lessac-medium

При первом вызове TTS для голоса, который не кэшируется локально, Hermes запускает python -m piper.download_voices <name> и загружает модель (~20–90 МБ в зависимости от уровня качества) в ~/.hermes/cache/piper-voices/. Последующие вызовы повторно используют кэшированную модель.

Выбор голоса. Полный каталог голосов охватывает английский, испанский, французский, немецкий, итальянский, голландский, португальский, русский, польский, турецкий, китайский, арабский, хинди и другие языки — каждый из них имеет уровни качества x_low / low / medium / high. Примеры голосов можно найти на rhasspy.github.io/piper-samples.

Использование предварительно загруженного голоса. Задайте для tts.piper.voice абсолютный путь, заканчивающийся на .onnx:

tts:
  piper:
    voice: /path/to/my-custom-voice.onnx

Расширенные ручки (tts.piper.length_scale / noise_scale / noise_w_scale / volume / normalize_audio, use_cuda) соответствуют 1:1 Piper SynthesisConfig. Они игнорируются в более старых версиях piper-tts.

Поставщики пользовательских команд

Если нужный вам движок TTS не поддерживается изначально (VoxCPM, MLX-Kokoro, XTTS CLI, сценарий клонирования голоса, что-либо еще, предоставляющее CLI), вы можете подключить его как поставщик командного типа без написания какого-либо Python. Hermes записывает входной текст во временный файл UTF-8, запускает команду оболочки и читает аудиофайл, созданный этой командой.

Объявите одного или нескольких провайдеров в tts.providers.<name> и переключайтесь между ними с помощью tts.provider: <name> — так же, как вы переключаетесь между встроенными модулями, такими как edge и openai.

tts:
  provider: voxcpm                 # pick any name under tts.providers
  providers:
    voxcpm:
      type: command
      command: "voxcpm --ref ~/voice.wav --text-file {input_path} --out {output_path}"
      output_format: mp3
      timeout: 180
      voice_compatible: true       # try to deliver as a Telegram voice bubble

    mlx-kokoro:
      type: command
      command: "python -m mlx_kokoro --in {input_path} --out {output_path} --voice {voice}"
      voice: af_sky
      output_format: wav

    piper-custom:                  # native Piper also supports custom .onnx via tts.piper.voice
      type: command
      command: "piper -m /path/to/custom.onnx -f {output_path} < {input_path}"
      output_format: wav

Заполнители

Ваш шаблон команды может ссылаться на эти заполнители. Hermes заменяет их во время рендеринга и заключает каждое значение в кавычки для окружающего контекста (голые/одинарные/двойные кавычки), поэтому пути с пробелами и другими символами, чувствительными к оболочке, безопасны.

Заполнитель Значение
{input_path} Путь к временному текстовому файлу UTF-8 Гермес написал
{text_path} Псевдоним для {input_path}
{output_path} Путь, куда команда должна записать аудио
{format} mp3 / wav / ogg / flac
{voice} tts.providers.<name>.voice, пусто, если не установлено
{model} tts.providers.<name>.model
{speed} Разрешенный множитель скорости (поставщик или глобальный)

Используйте {{ и }} для буквальных фигурных скобок.

Дополнительные клавиши

Ключ По умолчанию Значение
timeout 120 Секунды; дерево процессов уничтожается по истечении срока действия (Unix killpg, Windows taskkill /T).
output_format mp3 Один из mp3 / wav / ogg / flac. Автоматически выводится из выходного расширения, если Гермес выбирает путь.
voice_compatible false Когда true, Hermes преобразует выходные данные MP3/WAV в Opus/OGG через ffmpeg, поэтому Telegram отображает голосовой пузырь.
max_text_length 5000 Ввод усекается до этой длины перед обработкой команды.
voice / model пустой Передаются команде только как значения-заполнители.

Замечания по поведению

Безопасность

Поставщики командного типа запускают любую настроенную вами команду оболочки с разрешениями вашего пользователя. Hermes цитирует значения-заполнители и применяет настроенный тайм-аут, но сам шаблон команды является доверенным локальным вводом — относитесь к нему так же, как к сценарию оболочки в вашем PATH.

Транскрипция голосовых сообщений (STT)

Голосовые сообщения, отправленные в Telegram, Discord, WhatsApp, Slack или Signal, автоматически расшифровываются и вставляются в разговор в виде текста. Агент видит стенограмму как обычный текст.

Провайдер Качество Стоимость API-ключ
Локальный шепот (по умолчанию) Хорошо Бесплатно Ничего не нужно
API Грока Шепота Хорошо–Лучший Уровень бесплатного пользования GROQ_API_KEY
API OpenAI Whisper Хорошо–Лучший Платный VOICE_TOOLS_OPENAI_KEY или OPENAI_API_KEY

:::информация Нулевая конфигурация Локальная транскрипция работает сразу после установки faster-whisper. Если это недоступно, Hermes также может использовать локальный интерфейс командной строки whisper из обычных мест установки (например, /opt/homebrew/bin) или пользовательскую команду через HERMES_LOCAL_STT_COMMAND.

Конфигурация

# In ~/.hermes/config.yaml
stt:
  provider: "local"           # "local" | "groq" | "openai" | "mistral" | "xai"
  local:
    model: "base"             # tiny, base, small, medium, large-v3
  openai:
    model: "whisper-1"        # whisper-1, gpt-4o-mini-transcribe, gpt-4o-transcribe
  mistral:
    model: "voxtral-mini-latest"  # voxtral-mini-latest, voxtral-mini-2602
  xai:
    model: "grok-stt"         # xAI Grok STT

Сведения о поставщике

Локальный (faster-whisper) — Whisper запускается локально через faster-whisper. По умолчанию используется процессор, графический процессор, если доступен. Размеры модели:

Модель Размер Скорость Качество
tiny ~75 МБ Самый быстрый Базовый
base ~150 МБ Быстро Хорошо (по умолчанию)
small ~500 МБ Средний Лучше
medium ~1,5 ГБ Медленнее Отлично
large-v3 ~3 ГБ Самый медленный Лучшее

Groq API — требуется GROQ_API_KEY. Хороший запасной вариант в облаке, если вам нужен бесплатный вариант STT с хостингом.

OpenAI API — сначала принимает VOICE_TOOLS_OPENAI_KEY и возвращается к OPENAI_API_KEY. Поддерживает whisper-1, gpt-4o-mini-transcribe и gpt-4o-transcribe.

Mistral API (Voxtral Transcribe) — требуется MISTRAL_API_KEY. Использует модели Mistral Voxtral Transcribe. Поддерживает 13 языков, дневникизацию говорящих и временные метки на уровне слов. Установите с помощью pip install hermes-agent[mistral].

xAI Grok STT — Требуется XAI_API_KEY. Сообщения для https://api.x.ai/v1/stt as multipart/form-data. Good choice if you're already using xAI for chat or TTS and want one API key for everything. Auto-detection order puts it after Groq — explicitly set stt.provider: xai to force it.

Custom local CLI fallback — Set HERMES_LOCAL_STT_COMMAND if you want Hermes to call a local transcription command directly. The command template supports {input_path}, {output_dir}@@IC 0104@@{язык}, and {модель} placeholders.

Fallback Behavior

If your configured provider isn't available, Hermes automatically falls back: - Local faster-whisper unavailable → Tries a local whisper CLI or HERMES_LOCAL_STT_COMMAND перед облачными провайдерами - Ключ Groq не установлен → Возвращается к локальной транскрипции, затем OpenAI - Ключ OpenAI не установлен → Возвращается к локальной транскрипции, затем Groq - Ключ Mistral/SDK не установлен → Пропускается при автоматическом обнаружении; переходит к следующему доступному провайдеру - Ничего недоступно → Голосовые сообщения передаются пользователю с точными примечаниями.