Общая документация Public API · API-ключ можно создать в настройках аккаунта
InfiniteTalk превращает фотографию в видео, где человек говорит или поёт под вашу аудиозапись: губы попадают в слова, лицо живёт, голова двигается в такт. Длина ролика равна длине записи. Нейросеть подходит для говорящих аватаров, видеоответов от лица ведущего, поздравлений голосом близкого человека и клипов, где фото поёт припев.
Режимы:
model_variant: "infinitetalk") - качество 480p или 720p, основной вариант для готовых роликов.model_variant: "infinitetalk-fast") - быстрее и дешевле (3 ₽ вместо 5 ₽ за секунду), но кадр меньше, чем в 480p. Работает только с resolution: "fast".В обоих режимах можно добавить prompt с описанием эмоции и поведения в кадре.
Каждый вызов создаёт асинхронную операцию. Сохраните id из ответа и проверяйте статус, пока видео не будет готово.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Режим выбирается парой параметров model_variant и resolution. Допустимы только такие сочетания:
model_variant | resolution |
|---|---|
infinitetalk | 480p или 720p |
infinitetalk-fast | fast |
Любое другое сочетание API отклонит с validation_error, операция не создастся.
{
"tool": "infinitetalk",
"input": {
"model_variant": "infinitetalk",
"resolution": "480p",
"image": "https://cdn.example.com/portrait.jpg",
"audio": "https://cdn.example.com/voice.mp3"
}
}
tool - slug нейросети, всегда "infinitetalk".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
image | string (url) | Да | Ссылка на фотографию человека или персонажа, которого нужно оживить. Одна картинка. Форматы: jpg, jpeg, png, webp. Лучше всего подходит портрет, где лицо крупно и хорошо освещено. |
audio | string (url) | Да | Ссылка на запись с речью или пением. Один файл длительностью от 1 до 600 секунд. Форматы: mp3, wav, m4a, aac, flac, ogg, opus. От длительности записи зависят длина видео и цена. |
model_variant | enum | Нет | Модель. infinitetalk - обычная, infinitetalk-fast - быстрая. Если поле не передано, используется infinitetalk. |
resolution | enum | Нет | Качество видео. Для обычной модели: 480p - 5 ₽ за секунду, 720p - 10 ₽ за секунду. Для быстрой модели только fast - 3 ₽ за секунду. Если поле не передано, используется 480p, поэтому с infinitetalk-fast его нужно передавать явно. |
prompt | string | Нет | Задание: эмоция, манера речи или пения, жесты, поведение камеры. Например: «Девушка поёт мягко, иногда прикрывает глаза, камера неподвижна». До 2000 символов. Можно не передавать. |
Ссылки на файлы должны открываться без авторизации по http/https, размер файла - до 128 МБ. Расширение в ссылке должно совпадать с одним из допустимых форматов, иначе API вернёт validation_error.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "infinitetalk",
"input": {
"model_variant": "infinitetalk",
"resolution": "480p",
"image": "https://cdn.example.com/portrait.jpg",
"audio": "https://cdn.example.com/voice.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',
input: {
model_variant: 'infinitetalk',
resolution: '480p',
image: 'https://cdn.example.com/portrait.jpg',
audio: 'https://cdn.example.com/voice.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',
'input': {
'model_variant': 'infinitetalk',
'resolution': '480p',
'image': 'https://cdn.example.com/portrait.jpg',
'audio': 'https://cdn.example.com/voice.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",
"input": {
"model_variant": "infinitetalk",
"resolution": "720p",
"image": "https://cdn.example.com/singer.png",
"audio": "https://cdn.example.com/chorus.wav",
"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',
input: {
model_variant: 'infinitetalk',
resolution: '720p',
image: 'https://cdn.example.com/singer.png',
audio: 'https://cdn.example.com/chorus.wav',
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',
'input': {
'model_variant': 'infinitetalk',
'resolution': '720p',
'image': 'https://cdn.example.com/singer.png',
'audio': 'https://cdn.example.com/chorus.wav',
'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",
"input": {
"model_variant": "infinitetalk-fast",
"resolution": "fast",
"image": "https://cdn.example.com/portrait.jpg",
"audio": "https://cdn.example.com/voice.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',
input: {
model_variant: 'infinitetalk-fast',
resolution: 'fast',
image: 'https://cdn.example.com/portrait.jpg',
audio: 'https://cdn.example.com/voice.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',
'input': {
'model_variant': 'infinitetalk-fast',
'resolution': 'fast',
'image': 'https://cdn.example.com/portrait.jpg',
'audio': 'https://cdn.example.com/voice.mp3',
'prompt': 'Спокойно говорит в камеру, лёгкая улыбка, естественно моргает',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Пример для быстрой модели и записи длиной 4,03 секунды: длительность округляется вверх до 5 секунд, 5 × 3 ₽ = 15 ₽.
{
"id": "op_uuid-123",
"status": "queued",
"tool": "infinitetalk",
"cost": 15,
"balance_after": 485,
"created_at": "2026-09-30T19:51:14.649001+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "infinitetalk",
"cost": 15,
"created_at": "2026-09-30T19:51:14.649001+00:00",
"completed_at": "2026-09-30T19:52:03.91571+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/infinitetalk/talk-1.mp4"
]
},
"error_message": null
}
Если передать "model_variant": "infinitetalk-fast" без "resolution": "fast", операция не создаётся, деньги не списываются:
{
"error": {
"code": "validation_error",
"message": "Опция «480p» недоступна для выбранных параметров",
"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))
}
}
Сколько ждать:
480p: 5 секунд - около минуты, 12-15 секунд - около двух с половиной минут, полторы минуты записи - около четверти часа;720p: 5 секунд - две-три минуты, 15 секунд - от пяти до восьми минут.Опрашивать одну операцию можно не чаще раза в секунду, иначе API ответит 429.
После завершения в поле result приходит видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/infinitetalk/talk-1.mp4"
]
}
type - всегда "video".urls - массив ссылок на готовые видео. Для этой нейросети в нём одна ссылка на MP4.Если операция завершилась с ошибкой, result будет null, а причина придёт в error_message.
Видео идёт со звуком из вашей записи, 25 кадров в секунду, его длина совпадает с длиной аудио: из записи на 4,03 секунды получился ролик на 4 секунды. Пропорции кадра берутся с фотографии. Размер кадра для вертикального портрета 3:4:
| Режим | Размер кадра |
|---|---|
infinitetalk + 480p | 544×720 |
infinitetalk + 720p | 816×1104 |
infinitetalk-fast + fast | 400×544 |
Цена считается за каждую секунду аудио и зависит от режима:
model_variant | resolution | Цена за секунду |
|---|---|---|
infinitetalk | 480p | 5 ₽ |
infinitetalk | 720p | 10 ₽ |
infinitetalk-fast | fast | 3 ₽ |
Как считается итог:
audio. Передавать длительность в запросе не нужно.Примеры:
| Длина аудио | fast | 480p | 720p |
|---|---|---|---|
| 4,03 секунды | 15 ₽ | 25 ₽ | 50 ₽ |
| 10 секунд | 30 ₽ | 50 ₽ | 100 ₽ |
| 1 минута | 180 ₽ | 300 ₽ | 600 ₽ |
| 10 минут (максимум) | 1800 ₽ | 3000 ₽ | 6000 ₽ |
Фото и prompt на цену не влияют. Итоговая сумма приходит в поле cost сразу в ответе на создание операции и списывается с баланса в этот момент. Если операция завершилась ошибкой, деньги возвращаются на баланс, а cost в ответе остаётся суммой запуска.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги заново.queued, результат забираете по id.http/https URL, доступными без авторизации, размером до 128 МБ. Для image - jpg, jpeg, png, webp, для audio - mp3, wav, m4a, aac, flac, ogg, opus. Локальные адреса и приватные сети не принимаются.validation_error, операция не создастся и деньги не спишутся."model_variant": "infinitetalk-fast" и "resolution": "fast". Значения 480p и 720p работают только с обычной моделью, а fast - только с быстрой.prompt управляет подачей, а не словами: произносится только то, что есть в аудио. Задание можно писать по-русски.