Синхронизирует движения губ и речь в видео по загруженному аудио, чтобы персонаж выглядел говорящим естественно. Цена: Fast - 3 ₽/сек., Обычная - 480p: 6 ₽/сек., 720p: 12 ₽/сек.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
InfiniteTalk Video переозвучивает готовое видео: губы, мимика, голова и плечи человека подстраиваются под новую аудиозапись. В отличие от простой подгонки губ, модель оживляет весь кадр, поэтому подходит для дубляжа на другой язык, говорящих персонажей из стокового видео и роликов с ведущим. Длина ролика равна длине аудио: если видео короче, оно идёт по кругу.
Каждый вызов создаёт асинхронную операцию. Сохраните id из ответа и проверяйте статус, пока видео не будет готово.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Режимы (mode):
fast - быстрее и дешевле, качество 480p.normal - выше качество, на выбор 480p или 720p (resolution).В обоих режимах можно добавить prompt с пожеланиями к мимике и маску mask_image, чтобы оживлять только нужную область кадра.
{
"tool": "infinitetalk-video",
"input": {
"mode": "fast",
"video": "https://cdn.example.com/source-video-1.mp4",
"audio": "https://cdn.example.com/source-audio-1.mp3"
}
}
tool - slug нейросети, всегда "infinitetalk-video".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
mode | enum | Нет | fast - быстрый режим (только 480p), normal - обычный, выше качество. Если не передать, используется fast. |
resolution | enum | Нет | 480p или 720p. 720p доступно только с mode: "normal", в режиме fast вернётся validation_error. Если не передать, используется 480p. |
video | string (url) | Да | Ссылка на исходное видео с человеком. Один файл длительностью от 1 до 600 секунд. Форматы: mp4, mov, webm. |
audio | string (url) | Да | Ссылка на запись речи или пения. Один файл длительностью от 1 до 600 секунд. Форматы: mp3, wav, m4a, aac, flac, ogg, opus. От длины записи зависят длина ролика и цена. Лучше без музыки и шума. |
mask_image | string (url) | Нет | Ссылка на маску: какую область кадра можно оживлять. Один файл, форматы: jpg, jpeg, png, webp. Можно не передавать. |
prompt | string | Нет | Пожелания к движениям и мимике, например «улыбается, кивает в такт речи». До 2000 символов. Можно не передавать. |
Длительность обоих файлов сервер определяет сам, передавать её в запросе не нужно.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "infinitetalk-video",
"input": {
"mode": "fast",
"video": "https://cdn.example.com/source-video-1.mp4",
"audio": "https://cdn.example.com/source-audio-1.mp3"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'infinitetalk-video',
input: {
mode: 'fast',
video: 'https://cdn.example.com/source-video-1.mp4',
audio: 'https://cdn.example.com/source-audio-1.mp3',
},
}),
})
const data = await response.json()
console.log(data.id, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'infinitetalk-video',
'input': {
'mode': 'fast',
'video': 'https://cdn.example.com/source-video-1.mp4',
'audio': 'https://cdn.example.com/source-audio-1.mp3',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "infinitetalk-video",
"input": {
"mode": "normal",
"resolution": "720p",
"video": "https://cdn.example.com/presenter-1.mov",
"audio": "https://cdn.example.com/voice-ru-1.wav",
"mask_image": "https://cdn.example.com/mask-1.png",
"prompt": "Говорит спокойно и дружелюбно, иногда улыбается, фон и одежда не меняются"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'infinitetalk-video',
input: {
mode: 'normal',
resolution: '720p',
video: 'https://cdn.example.com/presenter-1.mov',
audio: 'https://cdn.example.com/voice-ru-1.wav',
mask_image: 'https://cdn.example.com/mask-1.png',
prompt: 'Говорит спокойно и дружелюбно, иногда улыбается, фон и одежда не меняются',
},
}),
})
const data = await response.json()
console.log(data.id, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'infinitetalk-video',
'input': {
'mode': 'normal',
'resolution': '720p',
'video': 'https://cdn.example.com/presenter-1.mov',
'audio': 'https://cdn.example.com/voice-ru-1.wav',
'mask_image': 'https://cdn.example.com/mask-1.png',
'prompt': 'Говорит спокойно и дружелюбно, иногда улыбается, фон и одежда не меняются',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Пример для быстрого режима и аудио длиной 9,2 секунды: длительность округляется вверх до 10 секунд, 10 × 3 ₽ = 30 ₽.
{
"id": "op_uuid-123",
"status": "queued",
"tool": "infinitetalk-video",
"cost": 30,
"balance_after": 470,
"created_at": "2026-10-01T19:51:14.649001+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "infinitetalk-video",
"cost": 30,
"created_at": "2026-10-01T19:51:14.649001+00:00",
"completed_at": "2026-10-01T19:52:31.05+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/infinitetalk-video/talk-video-1.mp4"
]
},
"error_message": null
}
Если передать "resolution": "720p" вместе с "mode": "fast", API отвечает validation_error. Операция не создаётся, деньги не списываются:
{
"error": {
"code": "validation_error",
"message": "Опция «720p» недоступна для выбранных параметров",
"request_id": "9b2f6c1e-4d7a-4f0e-8c3b-2a5d7e9f1c40"
}
}
Сохраните id из ответа на создание и запрашивайте операцию, пока status не станет completed или failed:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForOperation(id: 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' || op.status === 'failed') return op
await new Promise((resolve) => setTimeout(resolve, 10000))
}
}
Сколько ждать: в режиме fast ролик на 5-15 секунд обычно готов за одну-полторы минуты, в normal с 720p ролик на 5-10 секунд - за две-четыре минуты.
Опрашивать одну операцию можно не чаще раза в секунду, иначе API ответит 429.
После завершения в поле result приходит видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/infinitetalk-video/talk-video-1.mp4"
]
}
type - всегда "video".urls - массив ссылок на готовые видео. Для этой нейросети в нём одна ссылка на MP4.Если операция завершилась с ошибкой, result будет null, а причина придёт в error_message.
Ролик идёт со звуком из вашей записи и длится столько же, сколько аудио. Если аудио длиннее видео, исходное видео повторяется по кругу - на стыке может быть заметен скачок, поэтому лучше брать видео не короче записи.
Цена считается за каждую секунду аудио и зависит от режима. Длина видео на цену не влияет.
mode | resolution | Цена за секунду |
|---|---|---|
fast | 480p | 3 ₽ |
normal | 480p | 6 ₽ |
normal | 720p | 12 ₽ |
Как считается итог:
audio.| Длина аудио | fast | normal + 480p | normal + 720p |
|---|---|---|---|
| 2 секунды (оплата за 5) | 15 ₽ | 30 ₽ | 60 ₽ |
| 9,2 секунды | 30 ₽ | 60 ₽ | 120 ₽ |
| 1 минута | 180 ₽ | 360 ₽ | 720 ₽ |
| 10 минут (максимум) | 1800 ₽ | 3600 ₽ | 7200 ₽ |
prompt и маска на цену не влияют.
Итоговая сумма приходит в поле cost сразу в ответе на создание операции и списывается с баланса в этот момент. Если операция завершилась ошибкой, деньги возвращаются на баланс, а cost в ответе остаётся суммой запуска.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги заново.queued, результат забираете по id.http/https URL, доступными без авторизации, размером до 128 МБ. Расширение в ссылке должно совпадать с одним из допустимых форматов. Локальные адреса и приватные сети не принимаются.validation_error, операция не создастся и деньги не спишутся.fast качество всегда 480p: resolution можно не передавать, а 720p вызовет validation_error.prompt управляет подачей, а не словами: произносится только то, что есть в аудио. Задание можно писать по-русски.