Создаёт говорящее видео: оживляет портрет на фото и синхронизирует движение губ с вашим аудио. Цена зависит от разрешения: 480p - 5 ₽/сек., 720p - 10 ₽/сек.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
SkyReels V3 Talking Avatar оживляет портрет: по фотографии и короткой аудиозаписи модель делает видео, где человек произносит эту фразу с синхронными движениями губ, мимикой и поворотами головы. Запись - до 15 секунд, так что модель подходит для коротких реплик: видеоответов, поздравлений, говорящих персонажей в соцсетях и рекламе.
Сценарии:
prompt эмоцию, манеру поведения или стиль кадра.Каждый вызов создаёт асинхронную операцию. Сохраните id из ответа и проверяйте статус, пока видео не будет готово.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Отдельного параметра режима нет: сценарий определяется тем, передаёте ли вы prompt, а качество задаётся параметром resolution.
{
"tool": "skyreels-v3-talking-avatar",
"input": {
"image": "https://cdn.example.com/portrait.jpg",
"audio": "https://cdn.example.com/voice.mp3",
"resolution": "480p"
}
}
tool - slug нейросети, всегда "skyreels-v3-talking-avatar".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
image | string (url) | Да | Ссылка на портретное фото человека или персонажа. Одна картинка. Форматы: jpg, jpeg, png, gif, bmp. Формат webp не принимается. Лучше всего подходит чёткое фото, где лицо крупно и хорошо освещено. |
audio | string (url) | Да | Ссылка на запись с речью. Один файл длительностью от 1 до 15 секунд. Форматы: mp3, wav. От длительности записи зависят длина видео и цена. |
resolution | enum | Да | Качество видео. 480p - 5 ₽ за секунду, 720p - 10 ₽ за секунду. Если поле не передать, используется 720p. |
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": "skyreels-v3-talking-avatar",
"input": {
"image": "https://cdn.example.com/portrait.jpg",
"audio": "https://cdn.example.com/voice.mp3",
"resolution": "480p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'skyreels-v3-talking-avatar',
input: {
image: 'https://cdn.example.com/portrait.jpg',
audio: 'https://cdn.example.com/voice.mp3',
resolution: '480p',
},
}),
})
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': 'skyreels-v3-talking-avatar',
'input': {
'image': 'https://cdn.example.com/portrait.jpg',
'audio': 'https://cdn.example.com/voice.mp3',
'resolution': '480p',
},
},
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": "skyreels-v3-talking-avatar",
"input": {
"image": "https://cdn.example.com/presenter.png",
"audio": "https://cdn.example.com/greeting.wav",
"resolution": "720p",
"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: 'skyreels-v3-talking-avatar',
input: {
image: 'https://cdn.example.com/presenter.png',
audio: 'https://cdn.example.com/greeting.wav',
resolution: '720p',
prompt: 'Радостно поздравляет, улыбается и слегка кивает, камера неподвижна',
},
}),
})
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': 'skyreels-v3-talking-avatar',
'input': {
'image': 'https://cdn.example.com/presenter.png',
'audio': 'https://cdn.example.com/greeting.wav',
'resolution': '720p',
'prompt': 'Радостно поздравляет, улыбается и слегка кивает, камера неподвижна',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Пример для записи длиной 4,03 секунды в 480p: длительность округляется вверх до 5 секунд, 5 × 5 ₽ = 25 ₽.
{
"id": "op_uuid-123",
"status": "queued",
"tool": "skyreels-v3-talking-avatar",
"cost": 25,
"balance_after": 475,
"created_at": "2026-09-30T21:32:18.01393+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "skyreels-v3-talking-avatar",
"cost": 25,
"created_at": "2026-09-30T21:32:18.01393+00:00",
"completed_at": "2026-09-30T21:33:53.191867+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/skyreels-v3-talking-avatar/video-1.mp4"
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "skyreels-v3-talking-avatar",
"cost": 25,
"created_at": "2026-09-30T21:32:18.01393+00:00",
"completed_at": "2026-09-30T21:33:20.000000+00:00",
"result": null,
"error_message": "Произошла ошибка, нейросеть временно недоступна. Попробуйте повторить запрос позже."
}
Сохраните 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))
}
}
Ролик на 4 секунды в 480p был готов за полторы минуты, в 720p фразы на 2-3 секунды обрабатываются за 1,5-3 минуты. Длинные записи в 720p заметно медленнее: 12 секунд - около десяти минут. Опрашивать одну операцию можно не чаще раза в секунду, иначе API ответит 429.
После завершения в поле result приходит видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/skyreels-v3-talking-avatar/video-1.mp4"
]
}
type - всегда "video".urls - массив ссылок на готовые видео. Для этой нейросети в нём одна ссылка на MP4.Видео идёт со звуком из вашей записи, 24 кадра в секунду. Пропорции кадра берутся с фотографии: из вертикального портрета 3:4 в 480p получилось видео 480×640. Длина ролика близка к длине аудио, но может быть чуть короче: из записи на 4,03 секунды получилось видео на 3,88 секунды, последние доли секунды записи обрезались. Если важно каждое слово, оставьте в конце аудио небольшую паузу.
Если операция завершилась с ошибкой, result будет null, а причина придёт в error_message.
Цена считается за каждую секунду аудио и зависит от качества:
resolution | Цена за секунду |
|---|---|
480p | 5 ₽ |
720p | 10 ₽ |
Как считается итог:
audio. Передавать длительность в запросе не нужно.| Длина аудио | 480p | 720p |
|---|---|---|
| 2 секунды | 10 ₽ | 20 ₽ |
| 4,03 секунды | 25 ₽ | 50 ₽ |
| 10 секунд | 50 ₽ | 100 ₽ |
| 15 секунд (максимум) | 75 ₽ | 150 ₽ |
Фото и prompt на цену не влияют. Итоговая сумма приходит в поле cost сразу в ответе на создание операции и списывается с баланса в этот момент. Если операция завершилась ошибкой, деньги возвращаются на баланс, а cost в ответе остаётся суммой запуска.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги заново.queued, результат забираете по id.http/https URL, доступными без авторизации, размером до 128 МБ. Для image - jpg, jpeg, png, gif, bmp, для audio - mp3, wav. Локальные адреса и приватные сети не принимаются.validation_error, операция не создастся и деньги не спишутся. Длинный текст разбейте на несколько коротких фраз.prompt управляет подачей, а не словами: произносится только то, что есть в аудио.