Озвучивает текст естественной речью одним голосом или как диалог двух собеседников с разными голосами. Цена - 0,007 ₽ за символ текста.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Gemini 3.8 Flash TTS превращает текст в естественную речь и хорошо говорит по-русски. Её используют для закадрового голоса в роликах, рекламы, аудиокниг, подкастов и озвучки персонажей. Это старшая модель пары: она ровнее держит длинные тексты.
Модель читает текст одним из 30 готовых голосов или разыгрывает диалог двух собеседников с разными голосами. Подачу можно описать словами - например, «тепло и спокойно» или «взволнованно, быстро», - а смех и вздох вставить прямо в текст. Каждый вызов создаёт асинхронную операцию: вы получаете id, а готовый WAV забираете отдельным запросом статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Режимов два:
single - один голос читает весь text;dialogue - два собеседника по очереди произносят реплики из turns.{
"tool": "gemini-3-8-flash-tts",
"input": {
"...": "..."
}
}
tool - slug нейросети, здесь всегда "gemini-3-8-flash-tts".input - параметры конкретного запуска.input, без дополнительного вложенного объекта input.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Нет | Режим: single - один голос, dialogue - диалог двух собеседников. Если не передать, используется single. |
text | string | Да, для single | Текст для озвучки, от 1 до 5000 символов. Можно добавлять вставки <laugh> и <sigh>. В режиме dialogue не используется. |
voice | enum | Нет | Голос для режима single, одно из 30 имён из списка ниже. Если не передать, используется Kore. |
voice_1 | enum | Нет | Голос первого собеседника в режиме dialogue. Если не передать, используется Kore. |
voice_2 | enum | Нет | Голос второго собеседника в режиме dialogue. Если не передать, используется Puck. |
turns | array | Да, для dialogue | Реплики диалога по порядку, от 2 до 50. Поля каждой реплики описаны ниже. В режиме single не используется. |
style_instructions | string | Нет | Манера речи для всего текста или всего диалога, до 500 символов: тон, эмоция, темп. Не озвучивается и не входит в цену. |
Поля реплики в turns:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
speaker | enum | Да | Кто говорит: "1" - собеседник с голосом voice_1, "2" - собеседник с голосом voice_2. Передаётся строкой. |
text | string | Да | Текст реплики, от 1 до 5000 символов. Вставки <laugh> и <sigh> работают и здесь. |
style_instructions | string | Нет | Манера именно этой реплики, до 300 символов, например "удивлённо". Не озвучивается и не входит в цену. |
Имена голосов пишутся с заглавной буквы, как в таблице. Все голоса говорят на русском и на других языках - язык модель определяет по тексту сама.
Achernar, Aoede, Autonoe, Callirrhoe, Despina, Erinome, Gacrux, Kore, Laomedeia, Leda, Pulcherrima, Sulafat, Vindemiatrix, Zephyr.Achird, Algenib, Algieba, Alnilam, Charon, Enceladus, Fenrir, Iapetus, Orus, Puck, Rasalgethi, Sadachbia, Sadaltager, Schedar, Umbriel, Zubenelgenubi.Послушать каждый голос можно на странице нейросети в форме сайта: у кнопки голоса есть пример звучания на русском.
style_instructions - это указание режиссёра, а не часть текста. Пишите его простыми словами на русском или английском: «бодро, как ведущий утреннего шоу», «шёпотом, медленно», «устало и немного раздражённо». В диалоге общая манера действует на все реплики, а style_instructions внутри реплики её уточняет.
Вставки пишутся прямо в тексте в том месте, где должен прозвучать звук:
<laugh> - смех;<sigh> - вздох.Вставки вслух не читаются, но входят в количество символов.
Самый простой вызов: текст и голос. Режим single используется по умолчанию, его можно не передавать.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-3-8-flash-tts",
"input": {
"text": "Добрый день! Мы открылись после ремонта и ждём вас в новом зале. Всю неделю действует скидка двадцать процентов на всё меню.",
"voice": "Kore"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-3-8-flash-tts',
input: {
"text": "Добрый день! Мы открылись после ремонта и ждём вас в новом зале. Всю неделю действует скидка двадцать процентов на всё меню.",
"voice": "Kore"
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gemini-3-8-flash-tts',
'input': {
"text": "Добрый день! Мы открылись после ремонта и ждём вас в новом зале. Всю неделю действует скидка двадцать процентов на всё меню.",
"voice": "Kore"
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
style_instructions задаёт подачу словами, а вставки <laugh> и <sigh> в тексте добавляют смех и вздох. Ни указание, ни вставки не читаются вслух.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-3-8-flash-tts",
"input": {
"text": "Знаешь, что я нашла вчера на чердаке? Старую коробку с письмами. <laugh> Ты не поверишь, от кого они! <sigh> Жаль, что половину уже не прочитать.",
"voice": "Aoede",
"style_instructions": "тепло и чуть загадочно, в спокойном темпе"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-3-8-flash-tts',
input: {
"text": "Знаешь, что я нашла вчера на чердаке? Старую коробку с письмами. <laugh> Ты не поверишь, от кого они! <sigh> Жаль, что половину уже не прочитать.",
"voice": "Aoede",
"style_instructions": "тепло и чуть загадочно, в спокойном темпе"
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gemini-3-8-flash-tts',
'input': {
"text": "Знаешь, что я нашла вчера на чердаке? Старую коробку с письмами. <laugh> Ты не поверишь, от кого они! <sigh> Жаль, что половину уже не прочитать.",
"voice": "Aoede",
"style_instructions": "тепло и чуть загадочно, в спокойном темпе"
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
В режиме dialogue вместо text передаётся список реплик turns. Голоса собеседников задают voice_1 и voice_2, а у отдельной реплики может быть своя манера.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-3-8-flash-tts",
"input": {
"generation_type": "dialogue",
"voice_1": "Zephyr",
"voice_2": "Charon",
"style_instructions": "живой дружеский разговор",
"turns": [
{
"speaker": "1",
"text": "Привет, Олег! Ты уже слышал новости?"
},
{
"speaker": "2",
"text": "Нет, а что случилось?",
"style_instructions": "удивлённо"
},
{
"speaker": "1",
"text": "Мы наконец запустили озвучку диалогов! <laugh>"
},
{
"speaker": "2",
"text": "Вот это да. Надо срочно попробовать."
}
]
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gemini-3-8-flash-tts',
input: {
"generation_type": "dialogue",
"voice_1": "Zephyr",
"voice_2": "Charon",
"style_instructions": "живой дружеский разговор",
"turns": [
{
"speaker": "1",
"text": "Привет, Олег! Ты уже слышал новости?"
},
{
"speaker": "2",
"text": "Нет, а что случилось?",
"style_instructions": "удивлённо"
},
{
"speaker": "1",
"text": "Мы наконец запустили озвучку диалогов! <laugh>"
},
{
"speaker": "2",
"text": "Вот это да. Надо срочно попробовать."
}
]
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gemini-3-8-flash-tts',
'input': {
"generation_type": "dialogue",
"voice_1": "Zephyr",
"voice_2": "Charon",
"style_instructions": "живой дружеский разговор",
"turns": [
{
"speaker": "1",
"text": "Привет, Олег! Ты уже слышал новости?"
},
{
"speaker": "2",
"text": "Нет, а что случилось?",
"style_instructions": "удивлённо"
},
{
"speaker": "1",
"text": "Мы наконец запустили озвучку диалогов! <laugh>"
},
{
"speaker": "2",
"text": "Вот это да. Надо срочно попробовать."
}
]
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "gemini-3-8-flash-tts",
"cost": 0.80,
"balance_after": 499.2,
"created_at": "2026-09-29T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "gemini-3-8-flash-tts",
"cost": 0.80,
"created_at": "2026-09-29T12:00:00Z",
"completed_at": "2026-09-29T12:00:12Z",
"result": {
"type": "audio",
"urls": [
"https://storage.yandexcloud.net/bratuha.ru.files/user_files/1790657102061-guythko8.wav"
],
"files": [
{
"url": "https://storage.yandexcloud.net/bratuha.ru.files/user_files/1790657102061-guythko8.wav",
"name": "result"
}
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "gemini-3-8-flash-tts",
"cost": 0.80,
"created_at": "2026-09-29T12:00:00Z",
"completed_at": "2026-09-29T12:00:09Z",
"result": null,
"error_message": "По вашему запросу не удалось получить результат. Пожалуйста, измените запрос или входные данные и попробуйте снова."
}
После создания операции сохраните id и проверяйте её статус запросом:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const response = await fetch(
'https://bratuha.ru/api/v1/operations/op_uuid-123',
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
}
)
const data = await response.json()
Пока озвучка создаётся, status будет queued или processing. Опрашивайте статус раз в 5-10 секунд.
После успешного завершения result содержит один аудиофайл WAV (моно, 24 кГц, 16 бит):
type всегда равен "audio";urls содержит одну ссылку на WAV;files дублирует ту же ссылку с именем файла.В режиме dialogue обе роли звучат в одном общем файле, реплики идут в том порядке, в котором переданы в turns. Длительность зависит от длины текста и манеры: 113 символов русского текста звучат примерно 8-9 секунд, 5000 символов - около 5-6 минут.
text в режиме single или сумма text всех реплик в режиме dialogue, включая пробелы, знаки препинания и вставки.style_instructions - и общая, и у реплик - в цену не входит. Голоса и режим на цену не влияют.cost. Если операция завершилась с ошибкой, деньги возвращаются на баланс автоматически.POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги.queued проверяйте статус по id.generation_type, voice, voice_1, voice_2 и speaker, вернёт validation_error ещё до создания операции.voice_gender - фильтр голосов в форме сайта, в API его передавать не нужно. Если передадите male или female, выбранные голоса должны быть того же пола, иначе вернётся validation_error.gemini-3-8-flash-lite-tts), 5 ₽ за 1000 символов, с теми же голосами и параметрами.