Озвучивает английский текст живым голосом и может подстроить речь под ваш образец голоса. Цена - 5 ₽ за 1000 символов текста.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Chatterbox TTS озвучивает английский текст живым голосом. Можно взять встроенный голос, а можно передать короткий образец чужой речи, и модель прочитает текст похожим голосом. В текст вставляются теги звуков вроде <laugh> или <sigh>, чтобы речь звучала естественнее. Подходит для англоязычной озвучки роликов, презентаций, голосовых подсказок и прототипов голосовых интерфейсов.
Что важно понимать заранее:
Каждый вызов создаёт асинхронную операцию: запрос сразу возвращает id, а готовый файл нужно забрать проверкой статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Режимы работы задаёт voice_source:
default - встроенный голос, нужен только текст;sample - голос по образцу: к тексту добавляется ссылка на запись reference_audio.Отдельно от режима можно включить use_advanced: true и настроить выразительность, вариативность и точность речи.
{
"tool": "chatterbox-tts",
"input": {
"voice_source": "default",
"text": "..."
}
}
tool - slug нейросети, всегда "chatterbox-tts".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
voice_source | enum | Да | Откуда брать голос. default - встроенный голос. sample - голос по вашему образцу из reference_audio. Если не передать, будет default. |
reference_audio | string (url) | Только при voice_source: "sample" | Ссылка на образец голоса http/https с расширением .mp3, .wav, .m4a, .ogg, .flac или .webm. Длительность от 5 до 30 секунд: один голос, без музыки и шума. Ссылка должна открываться без авторизации. При voice_source: "default" поле не нужно и не учитывается. |
text | string | Да | Текст на английском, от 1 до 5000 символов. Можно вставлять звуки: <laugh> - смех, <chuckle> - смешок, <sigh> - вздох, <gasp> - удивлённый вдох, <cough> - кашель, <sniffle> - шмыганье носом, <groan> - стон, <yawn> - зевок. От длины текста зависит цена. |
use_advanced | boolean | Нет | true - учитывать настройки exaggeration, temperature и cfg. false - модель работает со своими стандартными настройками, а эти три поля игнорируются, даже если вы их передали. Если не передать, будет false. |
exaggeration | number | Нет | Выразительность, от 0 до 1, шаг 0,05. Ниже - спокойнее и ровнее, выше - ярче и драматичнее. Учитывается только при use_advanced: true. Стандартное значение 0,25. |
temperature | number | Нет | Вариативность, от 0,05 до 2, шаг 0,05. Ниже - стабильнее, выше - живее, но возможны сбои в речи. Учитывается только при use_advanced: true. Стандартное значение 0,7. |
cfg | number |
Самый простой вызов: только текст.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "chatterbox-tts",
"input": {
"voice_source": "default",
"text": "Welcome to our channel! Today we will show you three quick ways to brew better coffee at home."
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'chatterbox-tts',
input: {
voice_source: 'default',
text: 'Welcome to our channel! Today we will show you three quick ways to brew better coffee at home.',
},
}),
})
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': 'chatterbox-tts',
'input': {
'voice_source': 'default',
'text': 'Welcome to our channel! Today we will show you three quick ways to brew better coffee at home.',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Передаём запись голоса на 5-30 секунд, модель читает текст похожим голосом. Тег <laugh> добавляет смех.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "chatterbox-tts",
"input": {
"voice_source": "sample",
"reference_audio": "https://cdn.example.com/source-audio-1.mp3",
"text": "Hi! Thanks for joining us today. <laugh> Let'\''s get started."
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'chatterbox-tts',
input: {
voice_source: 'sample',
reference_audio: 'https://cdn.example.com/source-audio-1.mp3',
text: "Hi! Thanks for joining us today. <laugh> Let's get started.",
},
}),
})
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': 'chatterbox-tts',
'input': {
'voice_source': 'sample',
'reference_audio': 'https://cdn.example.com/source-audio-1.mp3',
'text': "Hi! Thanks for joining us today. <laugh> Let's get started.",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Та же озвучка по образцу, но речь ярче и эмоциональнее. Без use_advanced: true три настройки не применятся.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "chatterbox-tts",
"input": {
"voice_source": "sample",
"reference_audio": "https://cdn.example.com/source-audio-2.wav",
"text": "No way! <gasp> You actually finished the whole project in one weekend?",
"use_advanced": true,
"exaggeration": 0.6,
"temperature": 0.8,
"cfg": 0.4
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'chatterbox-tts',
input: {
voice_source: 'sample',
reference_audio: 'https://cdn.example.com/source-audio-2.wav',
text: 'No way! <gasp> You actually finished the whole project in one weekend?',
use_advanced: true,
exaggeration: 0.6,
temperature: 0.8,
cfg: 0.4,
},
}),
})
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': 'chatterbox-tts',
'input': {
'voice_source': 'sample',
'reference_audio': 'https://cdn.example.com/source-audio-2.wav',
'text': 'No way! <gasp> You actually finished the whole project in one weekend?',
'use_advanced': True,
'exaggeration': 0.6,
'temperature': 0.8,
'cfg': 0.4,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "chatterbox-tts",
"cost": 5,
"balance_after": 495,
"created_at": "2026-09-30T21:31:01.086943+00:00"
}
cost - сколько списано за операцию, в рублях.balance_after - баланс после списания.{
"id": "op_uuid-123",
"status": "completed",
"tool": "chatterbox-tts",
"cost": 5,
"created_at": "2026-09-30T21:31:01.086943+00:00",
"completed_at": "2026-09-30T21:31:18.835754+00:00",
"result": {
"type": "audio",
"urls": [
"https://storage.bratuha.ru/results/chatterbox-tts/speech-1.wav"
],
"files": [
{
"url": "https://storage.bratuha.ru/results/chatterbox-tts/speech-1.wav",
"name": "result"
}
]
},
"error_message": null
}
Пока речь генерируется, status будет queued или processing, а result - null. При ошибке придёт status: "failed", result: null и текст причины в error_message, списанная сумма вернётся на баланс.
Сохраните id из ответа на создание и запрашивайте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
Пример ожидания результата на JavaScript / TypeScript:
async function waitForSpeech(id: string): Promise<string> {
while (true) {
const res = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const op = await res.json()
if (op.status === 'completed') return op.result.urls[0]
if (op.status === 'failed') throw new Error(op.error_message)
await new Promise((r) => setTimeout(r, 3000))
}
}
Короткая фраза озвучивается примерно за 15-20 секунд. Одну операцию можно опрашивать не чаще раза в секунду, иначе придёт 429. Проверки раз в 3-5 секунд хватает.
{
"type": "audio",
"urls": [
"https://storage.bratuha.ru/results/chatterbox-tts/speech-1.wav"
],
"files": [
{
"url": "https://storage.bratuha.ru/results/chatterbox-tts/speech-1.wav",
"name": "result"
}
]
}
type - всегда "audio".urls - массив из одной ссылки на WAV.files - та же ссылка в виде объекта с url и name. Можно брать ссылку из любого из двух полей.Файл WAV (PCM 16 бит), моно, 24 кГц. Для ориентира: фраза из 59 символов с тегом <laugh> дала запись 3,6 секунды. WAV весит заметно больше MP3, поэтому для публикации файл обычно пережимают.
Цена - 5 ₽ за каждую начатую тысячу символов текста. Считаются все символы text, включая пробелы, знаки препинания и теги вроде <laugh>.
| Длина текста | Цена |
|---|---|
| от 1 до 1000 символов | 5 ₽ |
| от 1001 до 2000 символов | 10 ₽ |
| 2500 символов | 15 ₽ |
| 5000 символов (максимум) | 25 ₽ |
Режим голоса (default или sample) и дополнительные настройки на цену не влияют. Сумма списывается при создании операции и приходит в поле cost.
POST /api/v1/operations не идемпотентен: каждый запрос создаёт новую операцию и списывает деньги. Не повторяйте запрос автоматически при обрыве связи.queued, результат забирайте через GET /api/v1/operations/{id}.reference_audio принимаются только внешние http/https ссылки на .mp3, .wav, .m4a, .ogg, .flac или .webm, доступные без авторизации. Файл до 128 МБ.400 validation_error, операция не создастся и деньги не спишутся. Длительность считается в целых секундах с округлением вверх.That's hilarious <laugh> really.exaggeration, temperature и cfg работают только вместе с use_advanced: true. Высокая temperature делает речь живее, но может давать оговорки и артефакты.| Нет |
Точность, от 0,1 до 1, шаг 0,05. Насколько строго модель держится текста и образца голоса: ниже - речь медленнее и свободнее, выше - точнее и ровнее. Учитывается только при use_advanced: true. Стандартное значение 0,5. |