Создаёт говорящее видео по одному фото, синхронизируя речь двух людей по двум аудиодорожкам (слева и справа). Цена: Fast 480p - 3 ₽/сек., Standard 480p - 5 ₽/сек., Standard 720p - 10 ₽/сек.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
InfiniteTalk Multi делает видео-диалог из одной фотографии двух людей: человек слева говорит по одной записи, справа - по другой. Губы, мимика и голова двигаются в такт речи. Подходит для поздравлений от пары, сценок, интервью и дуэтов, когда снять видео нельзя, а фото есть.
Каждый вызов создаёт асинхронную операцию. Сохраните id из ответа и проверяйте статус, пока видео не будет готово.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Режимы (generation_type):
standard - обычное качество, 480p или 720p (resolution).fast - быстрее и дешевле, только 480p.Порядок реплик (order):
meanwhile - обе записи звучат одновременно, ролик длится как более длинная из них;left_right - сначала говорит человек слева, потом справа, ролик длится как обе записи вместе;right_left - сначала справа, потом слева.{
"tool": "infinitetalk-multi",
"input": {
"generation_type": "standard",
"resolution": "480p",
"order": "left_right",
"image": "https://cdn.example.com/two-people-1.jpg",
"left_audio": "https://cdn.example.com/left-voice-1.mp3",
"right_audio": "https://cdn.example.com/right-voice-1.mp3"
}
}
tool - slug нейросети, всегда "infinitetalk-multi".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Нет | standard - обычный режим, fast - быстрый (только 480p). Если не передать, используется standard. |
resolution | enum | Нет | 480p или 720p. 720p доступно только с generation_type: "standard", с fast вернётся validation_error. Если не передать, используется 480p. |
image | string (url) | Да | Фотография, где видны два человека: один слева, другой справа. Один файл до 10 МБ, форматы: jpg, jpeg, png, webp. |
left_audio | string (url) | Да | Запись для человека слева. Один файл, форматы: mp3, wav, m4a, aac, flac, ogg, opus. |
right_audio | string (url) | Да | Запись для человека справа. Один файл, форматы: mp3, wav, m4a, aac, flac, ogg, opus. Вместе с left_audio - от 1 до 600 секунд. |
order | enum | Нет | Как проигрывать записи: meanwhile - одновременно, left_right - сначала левый, потом правый, right_left - сначала правый, потом левый. Если не передать, используется meanwhile. |
prompt | string | Нет | Пожелания к поведению людей в кадре, например «женщина слева говорит радостно, мужчина справа слушает и кивает». До 2000 символов. Можно не передавать. |
Длительность записей сервер определяет сам, передавать её в запросе не нужно.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "infinitetalk-multi",
"input": {
"generation_type": "standard",
"resolution": "480p",
"order": "left_right",
"image": "https://cdn.example.com/two-people-1.jpg",
"left_audio": "https://cdn.example.com/left-voice-1.mp3",
"right_audio": "https://cdn.example.com/right-voice-1.mp3",
"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-multi',
input: {
generation_type: 'standard',
resolution: '480p',
order: 'left_right',
image: 'https://cdn.example.com/two-people-1.jpg',
left_audio: 'https://cdn.example.com/left-voice-1.mp3',
right_audio: 'https://cdn.example.com/right-voice-1.mp3',
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-multi',
'input': {
'generation_type': 'standard',
'resolution': '480p',
'order': 'left_right',
'image': 'https://cdn.example.com/two-people-1.jpg',
'left_audio': 'https://cdn.example.com/left-voice-1.mp3',
'right_audio': 'https://cdn.example.com/right-voice-1.mp3',
'prompt': 'Женщина слева говорит первой и улыбается, мужчина справа слушает, потом отвечает. Камера неподвижна',
},
},
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-multi",
"input": {
"generation_type": "fast",
"order": "meanwhile",
"image": "https://cdn.example.com/duet-1.png",
"left_audio": "https://cdn.example.com/duet-left-1.wav",
"right_audio": "https://cdn.example.com/duet-right-1.wav"
}
}'
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-multi',
input: {
generation_type: 'fast',
order: 'meanwhile',
image: 'https://cdn.example.com/duet-1.png',
left_audio: 'https://cdn.example.com/duet-left-1.wav',
right_audio: 'https://cdn.example.com/duet-right-1.wav',
},
}),
})
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-multi',
'input': {
'generation_type': 'fast',
'order': 'meanwhile',
'image': 'https://cdn.example.com/duet-1.png',
'left_audio': 'https://cdn.example.com/duet-left-1.wav',
'right_audio': 'https://cdn.example.com/duet-right-1.wav',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Пример для обычного режима 480p и двух записей по 3,3 и 8,72 секунды: каждая округляется вверх (4 + 9 = 13 секунд), 13 × 5 ₽ = 65 ₽.
{
"id": "op_uuid-123",
"status": "queued",
"tool": "infinitetalk-multi",
"cost": 65,
"balance_after": 435,
"created_at": "2026-10-01T19:51:14.649001+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "infinitetalk-multi",
"cost": 65,
"created_at": "2026-10-01T19:51:14.649001+00:00",
"completed_at": "2026-10-01T19:54:01.77+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/infinitetalk-multi/dialog-photo-1.mp4"
]
},
"error_message": null
}
Если передать "resolution": "720p" вместе с "generation_type": "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))
}
}
Сколько ждать: в обычном режиме ролик на 8-13 секунд обычно готов за две-три минуты, на 24 секунды - около пяти минут. Быстрый режим заметно быстрее.
Опрашивать одну операцию можно не чаще раза в секунду, иначе API ответит 429.
После завершения в поле result приходит видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/infinitetalk-multi/dialog-photo-1.mp4"
]
}
type - всегда "video".urls - массив ссылок на готовые видео. Для этой нейросети в нём одна ссылка на MP4.Если операция завершилась с ошибкой, result будет null, а причина придёт в error_message.
Ролик идёт со звуком обеих записей. При left_right и right_left он длится как обе записи вместе, при meanwhile - как более длинная. Например, записи на 3,3 и 8,72 секунды по очереди дали ролик на 13 секунд. Пропорции кадра берутся с фотографии.
Цена считается за каждую секунду аудио: длины left_audio и right_audio складываются при любом order.
generation_type | resolution | Цена за секунду |
|---|---|---|
standard | 480p | 5 ₽ |
standard | 720p | 10 ₽ |
fast | 480p | 3 ₽ |
Как считается итог:
left_right и right_left они складываются: 3,3 и 8,72 секунды дают 4 + 9 = 13 секунд. При meanwhile берётся более длинная запись: 9 секунд.| Две записи по очереди | fast | standard + 480p | standard + 720p |
|---|---|---|---|
| 3,3 + 8,72 секунды (13 к оплате) | 39 ₽ | 65 ₽ | 130 ₽ |
| 30 + 30 секунд | 180 ₽ | 300 ₽ | 600 ₽ |
| 300 + 300 секунд (максимум) | 1800 ₽ | 3000 ₽ | 6000 ₽ |
При meanwhile к оплате идёт только более длинная запись: 3,3 и 8,72 секунды - 9 секунд, это 27 ₽ в fast, 45 ₽ в standard + 480p и 90 ₽ в standard + 720p. Фото и prompt на цену не влияют.
Итоговая сумма приходит в поле cost сразу в ответе на создание операции и списывается с баланса в этот момент. Если операция завершилась ошибкой, деньги возвращаются на баланс, а cost в ответе остаётся суммой запуска.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги заново.queued, результат забираете по id.http/https URL, доступными без авторизации, размером до 128 МБ. Расширение в ссылке должно совпадать с одним из допустимых форматов. Локальные адреса и приватные сети не принимаются.validation_error, операция не создастся и деньги не спишутся.generation_type: "fast" качество всегда 480p: resolution можно не передавать, а 720p вызовет validation_error.prompt управляет подачей, а не словами: произносится только то, что есть в записях. Задание можно писать по-русски.