Синхронизирует движение губ в видео с новой аудиодорожкой, чтобы человек в кадре выглядел так, будто говорит именно этот звук. Цена - 5 ₽ за 1 секунду аудио, минимум 3 секунды: ролик получается длиной с аудио.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
VEED Lipsync подгоняет движения губ человека в видео под новую аудиодорожку. Подходит для переозвучки обучающих и рекламных роликов, перевода видео на другой язык, замены фразы без пересъёмки. На вход - видео с лицом и аудио, на выходе - видео длиной с аудио.
Каждый вызов создаёт асинхронную операцию. После запуска сохраните id и проверяйте статус отдельным запросом.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Сценарий один: видео с лицом и аудио с речью. Готовый ролик получается длиной с аудио, по аудио считается и цена.
{
"tool": "veed-lipsync",
"input": {
"...": "..."
}
}
tool - slug нейросети, всегда "veed-lipsync".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
video | string (url) | Да | Ссылка на исходное видео с лицом человека: mp4, mov или webm, от 1 до 600 секунд. |
audio | string (url) | Да | Ссылка на новую речь: mp3, wav, m4a, aac, flac, ogg или opus, от 1 до 600 секунд. Длина аудио задаёт длину ролика и цену. |
Видео 10 секунд и речь 9,2 секунды: ролик получится 9,2 секунды, оплачивается 10 секунд аудио - 50 ₽.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "veed-lipsync",
"input": {
"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: 'veed-lipsync',
input: {
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.status, data.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'veed-lipsync',
'input': {
'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())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "veed-lipsync",
"cost": 50,
"balance_after": 950,
"created_at": "2026-10-01T16:16:03.864980+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "veed-lipsync",
"cost": 50,
"created_at": "2026-10-01T16:16:03.864980+00:00",
"completed_at": "2026-10-01T16:18:15.402000+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/veed-lipsync/video-1.mp4"
]
},
"error_message": null
}
Если модель не справилась, операция завершается со статусом failed, в result приходит null, а причина - в error_message. Списанная сумма возвращается на баланс.
{
"id": "op_uuid-123",
"status": "failed",
"tool": "veed-lipsync",
"cost": 50,
"created_at": "2026-10-01T16:16:03.864980+00:00",
"completed_at": "2026-10-01T16:18:15.402000+00:00",
"result": null,
"error_message": "Не удалось обработать видео. Проверьте, что в кадре хорошо видно лицо, и попробуйте ещё раз."
}
Сохраните id из ответа на создание и проверяйте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForResult(id: string) {
while (true) {
const response = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const operation = await response.json()
if (operation.status === 'completed' || operation.status === 'failed') {
return operation
}
await new Promise((resolve) => setTimeout(resolve, 10000))
}
}
Статус меняется так: queued - в очереди, processing - видео обрабатывается, затем completed или failed. Ролик на 10 секунд обычно готов за 1-3 минуты, длинные записи обрабатываются до 20 минут. Одну операцию можно опрашивать не чаще раза в секунду, разумный интервал - 10-20 секунд.
После завершения в result приходит одно видео:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/veed-lipsync/video-1.mp4"
]
}
type - всегда "video".urls - массив с одной ссылкой на MP4 с вашей аудиодорожкой.Цена - 5 ₽ за каждую секунду аудио, минимум 3 секунды (15 ₽). Видео на цену не влияет: ролик получается длиной с аудио.
| Длина аудио | Цена |
|---|---|
| 1-3 секунды | 15 ₽ (минимум) |
| 10 секунд | 50 ₽ |
| 60 секунд | 300 ₽ |
| 600 секунд (максимум) | 3000 ₽ |
Длительность округляется вверх до целой секунды: аудио 9,2 секунды оплачивается как 10 секунд, а аудио короче 3 секунд - как 3 секунды. Сумма списывается при создании операции и видна в поле cost.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую платную операцию. Если ответ на создание потерялся, не отправляйте запрос вслепую ещё раз - сначала проверьте историю операций в личном кабинете.queued, результат забирайте через GET /api/v1/operations/{id}.http/https ссылками: видео - mp4, mov или webm, аудио - mp3, wav, m4a, aac, flac, ogg или opus. Ссылка должна открываться без авторизации, файл - до 128 МБ. Адреса localhost и внутренних сетей не принимаются.400 validation_error и деньги не спишутся.400 validation_error.