Агент Hermes поддерживает как преобразование текста в речь, так и транскрипцию голосовых сообщений на всех платформах обмена сообщениями.
💡 Tip
Подписчики
Если у вас есть платная подписка на Nous Portal, OpenAI TTS доступен через Tool Gateway без отдельного ключа OpenAI API. Запустите «модель Гермеса» или «инструменты Гермеса», чтобы включить ее.
Преобразование текста в речь
Преобразование текста в речь с помощью десяти провайдеров:
Провайдер
Качество
Стоимость
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.yamltts: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 languagesspeed:1.0# Converted to rate percentage (+/-%)elevenlabs:voice_id:"pNInz6obpgDQGcFmaJgB"# Adammodel_id:"eleven_multilingual_v2"openai:model:"gpt-4o-mini-tts"voice:"alloy"# alloy, echo, fable, onyx, nova, shimmerbase_url:"https://api.openai.com/v1"# Override for OpenAI-compatible TTS endpointsspeed:1.0# 0.25 - 4.0minimax:model:"speech-2.8-hd"# speech-2.8-hd (default), speech-2.8-turbovoice_id:"English_Graceful_Lady"# See https://platform.minimax.io/faq/system-voice-idspeed:1# 0.5 - 2.0vol:1# 0 - 10pitch:0# -12 - 12mistral: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-ttsvoice:"Kore"# 30 prebuilt voices: Zephyr, Puck, Kore, Enceladus, Gacrux, etc.xai:voice_id:"eve"# or a custom voice ID — see docs belowlanguage:"en"# ISO 639-1 codesample_rate:24000# 22050 / 24000 (default) / 44100 / 48000bit_rate:128000# MP3 bitrate; only applies when codec=mp3# base_url: "https://api.x.ai/v1" # Override via XAI_BASE_URL env varneutts:ref_audio:''ref_text:''model:neuphonic/neutts-air-q4-ggufdevice:cpukittentts: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, Leospeed:1.0# 0.5 - 2.0clean_text:true# Expand numbers, currencies, unitspiper: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 по умолчанию применяется ко всем поставщикам. Каждый провайдер может переопределить его, задав собственную настройку скорости (например, tts.openai.speed: 1.5). Скорость, зависящая от поставщика, имеет приоритет над глобальным значением. По умолчанию — «1.0» (нормальная скорость).
Ограничения длины ввода
У каждого поставщика есть документированное ограничение количества входных символов для каждого запроса. Hermes обрезает текст перед вызовом провайдера, поэтому запросы никогда не завершаются ошибкой длины:
Провайдер
Размер по умолчанию (символы)
Край TTS
5000
ОпенАИ
4096
хАИ
15000
МиниМакс
10000
Мистраль
4000
Google Близнецы
5000
ОдиннадцатьЛабс
С учетом моделей (см. ниже)
НойТТС
2000
КотенокТТС
2000
ElevenLabs выбирает ограничение из настроенного model_id:
model_id
Кепка (символы)
eleven_flash_v2_5
40000
одиннадцать_flash_v2
30000
eleven_multilingual_v2 (по умолчанию), eleven_multilingual_v1, eleven_english_sts_v2, eleven_english_sts_v1
10000
eleven_v3, eleven_ttv_v3
5000
Неизвестная модель
Возвращается к настройкам поставщика по умолчанию (10000)
Переопределить для каждого поставщика с помощью max_text_length: в разделе поставщика вашей конфигурации TTS:
tts:openai:max_text_length:8192# raise or lower the provider cap
Учитываются только положительные целые числа. Нулевые, отрицательные, нечисловые или логические значения попадают в значение по умолчанию поставщика, поэтому неработающая конфигурация не может случайно отключить усечение.
Голосовые пузыри Telegram и ffmpeg
Для голосовых сообщений Telegram требуется аудиоформат Opus/OGG:
OpenAI, ElevenLabs и Mistral создают Opus изначально — без дополнительной настройки.
Edge TTS (по умолчанию) выводит MP3, и для преобразования требуется ffmpeg:
MiniMax TTS выводит MP3 и требует ffmpeg для преобразования в голосовые сообщения Telegram.
Google Gemini TTS выводит необработанный PCM и использует ffmpeg для кодирования Opus напрямую для голосовых пузырей Telegram.
xAI TTS выводит MP3 и требует ffmpeg для преобразования в голосовые пузырьки Telegram.
NeuTTS выводит WAV, а также требует ffmpeg для преобразования в голосовые пузырьки Telegram.
KittenTTS выводит WAV, а также требует ffmpeg для преобразования в голосовые сообщения Telegram.
Piper выводит WAV, а также требует ffmpeg для преобразования в голосовые сообщения Telegram.
Без ffmpeg аудио Edge TTS, MiniMax TTS, NeuTTS, KittenTTS и Piper отправляются как обычные аудиофайлы (воспроизводимые, но отображаются в виде прямоугольного проигрывателя вместо голосового пузыря).:::совет
Если вам нужны голосовые пузыри без установки ffmpeg, переключитесь на поставщика OpenAI, ElevenLabs или Mistral.
xAI Custom Voices (клонирование голоса)
xAI поддерживает клонирование вашего голоса и использование его с TTS. Создайте собственный голос в консоли xAI, затем установите полученный voice_id в вашей конфигурации:
tts:provider:xaixai:voice_id:"nlbqfwie"# your custom voice ID
Piper — это быстрый локальный нейронный TTS-движок от Open Home Foundation (сопровождающие Home Assistant). Он полностью работает на процессоре, поддерживает 44 языка с заранее обученными голосами и не требует ключа API.
Установка через hermes Tools → Voice & TTS → Piper — Hermes запускает для вас pip install Piper-tts. Или установите вручную: pip install Piper-tts.
Переключиться на Пайпер:
tts:provider:piperpiper: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 SynthesisConfig Piper. Они игнорируются в старых версиях 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.providersproviders:voxcpm:type:commandcommand:"voxcpm--ref~/voice.wav--text-file{input_path}--out{output_path}"output_format:mp3timeout:180voice_compatible:true# try to deliver as a Telegram voice bubblemlx-kokoro:type:commandcommand:"python-mmlx_kokoro--in{input_path}--out{output_path}--voice{voice}"voice:af_skyoutput_format:wavpiper-custom:# native Piper also supports custom.onnx via tts.piper.voicetype:commandcommand:"piper-m/path/to/custom.onnx-f{output_path}<{input_path}"output_format:wav
Пример: Дубао (китайское семя-tts-2.0)
Для высококачественного китайского TTS через API двунаправленной потоковой передачи ByteDance seed-tts-2.0 установите пакет PyPI doubao-speech и подключите его в качестве поставщика команд:
Учетные данные берутся из вашей среды оболочки (VOLCENGINE_APP_ID/VOLCENGINE_ACCESS_TOKEN) или ~/.doubao-speech/config.yaml. Выберите голос, добавив к команде --voice zh-female-warm (или любой другой псевдоним из doubao-speech list-voices). doubao-speech также включает потоковую передачу ASR — см. раздел STT ниже для интеграции с Hermes. Исходный код и полная документация: github.com/Hypnus-Yuan/doubao-speech.
Заполнители
Ваш шаблон команды может ссылаться на эти заполнители. Hermes заменяет их во время рендеринга и заключает каждое значение в кавычки для окружающего контекста (голые/одинарные/двойные кавычки), поэтому пути с пробелами и другими символами, чувствительными к оболочке, безопасны.
Заполнитель
Значение
{input_path}
Путь к временному текстовому файлу UTF-8 Гермес написал
{text_path}
Псевдоним {input_path}
{output_path}
Путь, куда команда должна записать аудио
{формат}
mp3/wav/ogg/flac
{голос}
tts.providers.<имя>.voice, пусто, если не установлено
{модель}
tts.providers.<имя>.модель
{скорость}
Разрешенный множитель скорости (поставщик или глобальный)
Используйте {{ и }} для буквальных скобок.
Дополнительные клавиши
Ключ
По умолчанию
Значение
тайм-аут
120
Секунды; дерево процессов уничтожается по истечении срока действия (Unix killpg, Windows taskkill /T).
выходной_формат
mp3
Один из mp3/wav/ogg/flac. Автоматически выводится из выходного расширения, если Гермес выбирает путь.
voice_совместимый
ложь
Если установлено значение true, Hermes преобразует выходные данные MP3/WAV в Opus/OGG через ffmpeg, поэтому Telegram отображает голосовой пузырь.
max_text_length
5000
Ввод усекается до этой длины перед обработкой команды.
голос / модель
пустой
Передаются команде только как значения-заполнители.
Замечания по поведению
Встроенные имена всегда выигрывают. Запись tts.providers.openai никогда не затеняет собственного провайдера OpenAI, поэтому никакая пользовательская конфигурация не может незаметно заменить встроенную.
По умолчанию доставка осуществляется в виде документа. Поставщики команд доставляются в виде обычных аудиовложений на каждой платформе. Включите доставку голосовых сообщений для каждого поставщика с помощью voice_совместимого: true.
Ошибки выполнения команд становятся известны агенту. Ненулевой выход, пустой вывод или тайм-аут возвращают ошибку с включенным потоком stderr/stdout команды, поэтому вы можете отладить поставщика из диалога.
type: команда используется по умолчанию, если установлена команда:. Явное написание type: команда является хорошей практикой, но не является обязательным; запись с непустой строкой command рассматривается как поставщик команд.
{input_path} / {text_path} взаимозаменяемы. Используйте тот, который лучше читается в вашей команде.
Безопасность
Поставщики командного типа запускают любую настроенную вами команду оболочки с разрешениями вашего пользователя. 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 также может использовать локальный CLI whisper из общих мест установки (например, /opt/homebrew/bin) или пользовательскую команду через HERMES_LOCAL_STT_COMMAND.
Локальный (faster-whisper) — Whisper запускается локально через faster-whisper. По умолчанию используется процессор, графический процессор, если доступен. Размеры модели:
Модель
Размер
Скорость
Качество
крошечный
~75 МБ
Самый быстрый
Базовый
база
~150 МБ
Быстро
Хорошо (по умолчанию)
маленький
~500 МБ
Средний
Лучше
средний
~1,5 ГБ
Медленнее
Отлично
большой-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 в формате multipart/form-data. Хороший выбор, если вы уже используете xAI для чата или TTS и вам нужен один ключ API для всего. Порядок автоматического обнаружения ставит его после Groq — явно задайте stt.provider: xai, чтобы принудительно установить его.
Пользовательский локальный резервный вариант CLI — установите HERMES_LOCAL_STT_COMMAND, если вы хотите, чтобы Hermes вызывал локальную команду транскрипции напрямую. Шаблон команды поддерживает заполнители {input_path}, {output_dir}, {language} и {model}. Ваша команда должна записать транскрипт .txt где-нибудь под {output_dir}.
Пример: Doubao/Volcengine ASR
Если вы используете doubao-speech для Doubao TTS (см. выше), тот же пакет обрабатывает преобразование речи в текст через поверхность STT локальной команды:
Hermes записывает входящее голосовое сообщение в {input_path}, запускает команду и читает файл .txt, созданный в {output_dir}. Язык автоматически определяется конечной точкой большой модели Volcengine.
Резервное поведение
Если настроенный вами провайдер недоступен, Hermes автоматически отступит:
- Локальный fast-whisper недоступен → пробует локальный CLI whisper или HERMES_LOCAL_STT_COMMAND перед облачными провайдерами.
- Ключ Groq не установлен → Возвращается к локальной транскрипции, затем OpenAI
- Ключ OpenAI не установлен → Возвращается к локальной транскрипции, затем Groq
- Ключ Mistral/SDK не установлен → Пропускается при автоматическом обнаружении; переходит к следующему доступному провайдеру
- Ничего недоступно → Голосовые сообщения передаются пользователю с точными примечаниями.