Войти

MiniMax 2.8 HD Text to Speech

Озвучка текста естественным голосом с настройкой эмоции, тона, скорости и громкости речи.

Запрос
Текст, который нужно озвучить. До 10 000 символов.
Выберите голос для озвучки.
Wise_Woman
Friendly_Person
Inspirational_girl
Deep_Voice_Man
Calm_Woman
Casual_Guy
Lively_Girl
Patient_Man
Young_Knight
Determined_Man
Lovely_Girl
Decent_Boy
Imposing_Manner
Elegant_Man
Abbess
Sweet_Girl_2
Exuberant_Girl
Russian_HandsomeChildhoodFriend
Russian_BrightHeroine
Russian_AmbitiousWoman
Russian_ReliableMan
Russian_CrazyQueen
Russian_PessimisticGirl
Russian_AttractiveGuy
Russian_Bad-temperedBoy
Выберите эмоциональную окраску речи.
Настройте темп речи: медленнее или быстрее обычного.
1
Настройте высоту голоса: ниже или выше исходного звучания.
0
Настройте громкость звучания.
1
Укажите, как произносить отдельные слова, имена или сокращения.

О модели MiniMax 2.8 HD Text to Speech

Обзор

MiniMax Speech 2.8 HD — флагманская модель Text-to-Speech компании MiniMax, выпущенная 23 января 2026 года. Является HD-версией линейки Speech-02, анонсированной в апреле 2025 года. Speech 2.8 HD ориентирована на задачи, где критически важно студийное качество аудио: озвучка подкастов, аудиокниг, корпоративных презентаций и рекламных материалов. В отличие от Turbo-варианта, HD-версия оптимизирована под максимальное качество звука, а не под минимальную задержку. Ключевое нововведение Speech 2.8 — Native Sound Tags: модель воспроизводит естественные речевые элементы (паузы, интонационные переходы, междометия), что делает синтез практически неотличимым от живой записи. Поддерживает 32 языка с нативными акцентами, включая русский. Возможности: клонирование голоса по образцу от 5 секунд, 8 предустановленных эмоций, тонкая настройка тона (+/-12 полутонов), скорости (0.5–2x) и громкости. Принимает до 10 000 символов за запрос. По оценкам Artificial Analysis Speech Arena и Hugging Face TTS Arena, Speech-02-HD занял первое место среди всех моделей Text-to-Speech, опередив решения OpenAI и ElevenLabs в слепых пользовательских тестах.

Сценари использования (use cases)

Ограничения и недостатки

Советы

FAQ

Когда выбирать Speech 2.8 HD, а не Turbo?

Выбирайте HD, когда важны финальное качество, эмоциональная нюансировка, естественные вдохи и чистая дикторская подача. Turbo больше подходит для черновиков, интерактивных сценариев и задач, где скорость важнее тонких деталей звучания. У MiniMax оба варианта относятся к одной линейке Text-to-Speech и поддерживают похожий набор возможностей, но HD описан как вариант с упором на ультрареалистичное качество и звуковые теги.

Как сделать озвучку менее роботизированной и лучше управлять паузами?

Начните с текста: ставьте нормальную пунктуацию, разбивайте абзацы переносами строк и добавляйте точные паузы через <#x#> там, где нужен контролируемый зазор. Для более живой речи в Speech 2.8 HD можно использовать поддерживаемые теги междометий вроде смеха (laughs), дыхания (breath) или вздоха (sighs), но их лучше применять точечно, а не перегружать ими каждую фразу. Если речь всё равно звучит плоско, проверьте эмоцию, скорость и высоту голоса: сильные крайние настройки часто ухудшают естественность.

Что делать, если модель неправильно произносит имя, аббревиатуру или слово на другом языке?

Для повторяющихся ошибок используйте словарь произношений в формате слово/произношение, чтобы зафиксировать нужное чтение термина, имени или сокращения. Для отдельных мест можно указывать произношение прямо в тексте через поддерживаемую встроенную разметку, а для многоязычного текста важно явно задавать подходящий параметр language_boost или auto, если язык заранее неизвестен. Это особенно полезно для русских текстов с иностранными именами, брендами и техническими словами.

Почему длинный текст лучше разбивать на части, даже если лимит запроса позволяет отправить его целиком?

У MiniMax T2A текст в одном запросе должен быть меньше 10 000 символов, а для длинных фрагментов производитель рекомендует стриминг. На практике длинную озвучку проще контролировать, если делить сценарий по законченным абзацам или сценам: так легче управлять паузами, интонацией и исправлять отдельные ошибки без пересборки всего аудио. Переносы строк и явные теги пауз помогают сохранить структуру, но последовательные теги пауз лучше не ставить подряд.

Цены

Цена при активной подписке

Стоимость необязательной подписки 299 ₽/месяц Подробнее

API

Инструкция ниже является выдержкой из документации.

Параметры

Поля тела JSON-запроса, которые используются в Playground и доступны для настройки через API. Порядок совпадает с формой на странице.

Параметр Тип Обязательный По умолчанию Допустимые значения Описание
text string Да длина 1–10000 символов Текст, который нужно озвучить. До 10 000 символов.
voice_id string Да Wise_Woman, Friendly_Person, Inspirational_girl, Deep_Voice_Man, Calm_Woman, Casual_Guy, Lively_Girl, Patient_Man, Young_Knight, Determined_Man, Lovely_Girl, Decent_Boy, Imposing_Manner, Elegant_Man, Abbess, Sweet_Girl_2, Exuberant_Girl, Russian_HandsomeChildhoodFriend, Russian_BrightHeroine, Russian_AmbitiousWoman, Russian_ReliableMan, Russian_CrazyQueen, Russian_PessimisticGirl, Russian_AttractiveGuy, Russian_Bad-temperedBoy Выберите голос для озвучки.
emotion string Нет surprised happy, sad, angry, fearful, disgusted, surprised, neutral, calm Выберите эмоциональную окраску речи.
speed number Нет 1.0 0.5–2.0 Настройте темп речи: медленнее или быстрее обычного.
pitch number Нет 0 -12–12 Настройте высоту голоса: ниже или выше исходного звучания.
volume number Нет 1.0 0.1–10.0 Настройте громкость звучания.
pronunciation_dict array[string] Нет [] до 128 элементов Укажите, как произносить отдельные слова, имена или сокращения. Передайте массив HTTPS-ссылок.

Запрос

Асинхронный запуск: POST https://api.flixa.io/v1/audio/speech-minimax/speech-2.8-hd с заголовком Authorization: Bearer $FLIXA_API_KEY и телом JSON. Ниже — пример с полями из Playground.

curl -X POST "https://api.flixa.io/v1/audio/speech-minimax/speech-2.8-hd" \
  -H "Authorization: Bearer $FLIXA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "text": "Всем привет! Вы слушаете новый выпуск подкаста „В двух словах“. Знаете, бывает такое чувство, когда в голове крутится классная идея, но ты никак не можешь разложить её по полочкам? Вот именно об этом мы сегодня и поговорим. Устраивайтесь поудобнее, налейте себе чашку горячего кофе — мы начинаем самое интересное. Поехали!",
  "pitch": 0,
  "speed": 1,
  "volume": 1,
  "emotion": "surprised",
  "voice_id": "Casual_Guy",
  "pronunciation_dict": [],
  "prompt": "Превратите это фото товара в премиальную студийную рекламу: мягкий кинематографический свет, чистый бежевый фон, лёгкие тени, реалистичные отражения и эстетика люксового бренда."
}'
import json
import os
import requests

url = "https://api.flixa.io/v1/audio/speech-minimax/speech-2.8-hd"
payload = json.loads({"emotion": "surprised", "pitch": 0, "prompt": "\u041f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u0435 \u044d\u0442\u043e \u0444\u043e\u0442\u043e \u0442\u043e\u0432\u0430\u0440\u0430 \u0432 \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0443\u0434\u0438\u0439\u043d\u0443\u044e \u0440\u0435\u043a\u043b\u0430\u043c\u0443: \u043c\u044f\u0433\u043a\u0438\u0439 \u043a\u0438\u043d\u0435\u043c\u0430\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0432\u0435\u0442, \u0447\u0438\u0441\u0442\u044b\u0439 \u0431\u0435\u0436\u0435\u0432\u044b\u0439 \u0444\u043e\u043d, \u043b\u0451\u0433\u043a\u0438\u0435 \u0442\u0435\u043d\u0438, \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u044d\u0441\u0442\u0435\u0442\u0438\u043a\u0430 \u043b\u044e\u043a\u0441\u043e\u0432\u043e\u0433\u043e \u0431\u0440\u0435\u043d\u0434\u0430.", "pronunciation_dict": [], "speed": 1, "text": "\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0412\u044b \u0441\u043b\u0443\u0448\u0430\u0435\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a \u043f\u043e\u0434\u043a\u0430\u0441\u0442\u0430 \u201e\u0412 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u0432\u0430\u0445\u201c. \u0417\u043d\u0430\u0435\u0442\u0435, \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u043d\u0430\u044f \u0438\u0434\u0435\u044f, \u043d\u043e \u0442\u044b \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0448\u044c \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0451 \u043f\u043e \u043f\u043e\u043b\u043e\u0447\u043a\u0430\u043c? \u0412\u043e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u044b \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c. \u0423\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u043e\u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u043d\u0430\u043b\u0435\u0439\u0442\u0435 \u0441\u0435\u0431\u0435 \u0447\u0430\u0448\u043a\u0443 \u0433\u043e\u0440\u044f\u0447\u0435\u0433\u043e \u043a\u043e\u0444\u0435 \u2014 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. \u041f\u043e\u0435\u0445\u0430\u043b\u0438!", "voice_id": "Casual_Guy", "volume": 1})

response = requests.post(
    url,
    headers={"Authorization": f"Bearer {os.environ['FLIXA_API_KEY']}"},
    json=payload,
    timeout=120,
)
print(response.json())
const response = await fetch(
  "https://api.flixa.io/v1/audio/speech-minimax/speech-2.8-hd",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.FLIXA_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({"emotion": "surprised", "pitch": 0, "prompt": "\u041f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u0435 \u044d\u0442\u043e \u0444\u043e\u0442\u043e \u0442\u043e\u0432\u0430\u0440\u0430 \u0432 \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0443\u0434\u0438\u0439\u043d\u0443\u044e \u0440\u0435\u043a\u043b\u0430\u043c\u0443: \u043c\u044f\u0433\u043a\u0438\u0439 \u043a\u0438\u043d\u0435\u043c\u0430\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0432\u0435\u0442, \u0447\u0438\u0441\u0442\u044b\u0439 \u0431\u0435\u0436\u0435\u0432\u044b\u0439 \u0444\u043e\u043d, \u043b\u0451\u0433\u043a\u0438\u0435 \u0442\u0435\u043d\u0438, \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u044d\u0441\u0442\u0435\u0442\u0438\u043a\u0430 \u043b\u044e\u043a\u0441\u043e\u0432\u043e\u0433\u043e \u0431\u0440\u0435\u043d\u0434\u0430.", "pronunciation_dict": [], "speed": 1, "text": "\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0412\u044b \u0441\u043b\u0443\u0448\u0430\u0435\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a \u043f\u043e\u0434\u043a\u0430\u0441\u0442\u0430 \u201e\u0412 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u0432\u0430\u0445\u201c. \u0417\u043d\u0430\u0435\u0442\u0435, \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u043d\u0430\u044f \u0438\u0434\u0435\u044f, \u043d\u043e \u0442\u044b \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0448\u044c \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0451 \u043f\u043e \u043f\u043e\u043b\u043e\u0447\u043a\u0430\u043c? \u0412\u043e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u044b \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c. \u0423\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u043e\u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u043d\u0430\u043b\u0435\u0439\u0442\u0435 \u0441\u0435\u0431\u0435 \u0447\u0430\u0448\u043a\u0443 \u0433\u043e\u0440\u044f\u0447\u0435\u0433\u043e \u043a\u043e\u0444\u0435 \u2014 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. \u041f\u043e\u0435\u0445\u0430\u043b\u0438!", "voice_id": "Casual_Guy", "volume": 1}),
  }
);

console.log(await response.json());

Пример ответа

Сразу после POST приходит объект с идентификатором задачи и статусом (queued или processing). Готовый результат — в поле outputs после завершения.

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "queued",
  "created_at": "2026-05-22T12:00:00Z"
}

После успешного завершения:

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed",
  "outputs": [
    { "url": "https://storage.example/result.png", "type": "image" }
  ]
}

Поллинг

Пока задача в работе, опрашивайте GET https://api.flixa.io/v1/predictions/{id}/result с тем же API-ключом. Рекомендуемый интервал — 1–2 секунды; остановитесь при completed, failed или cancelled.

  • queued / processing — продолжайте опрос.
  • completed — заберите URL из outputs.
  • failed — смотрите error в теле ответа.
curl "https://api.flixa.io/v1/predictions/{id}/result" \
  -H "Authorization: Bearer $FLIXA_API_KEY"