Создаёт видео из текста, из изображения с начальным и конечным кадром или по референсам — изображениям и аудио. Цена зависит от разрешения: 720p — 3 ₽/сек., 1080p — 5 ₽/сек., 2K — 7 ₽/сек.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Agnes Video 2.5 делает короткие ролики длиной от 4 до 12 секунд в разрешении 720p, 1080p или 2K. Сцену можно описать словами, начать ролик с готовой картинки и при желании задать последний кадр или собрать видео по референсам: показать героя и предметы на фото, а голос, реплику или музыку - в аудио. Подходит для рекламы товаров, анимации иллюстраций, переходов между двумя кадрами и вертикальных роликов для соцсетей.
Основные сценарии:
text).image).reference).Каждый вызов создаёт асинхронную операцию. Сохраните id из ответа и проверяйте статус отдельным запросом.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус queued.Тип ролика выбирается параметром generation_type:
text - видео по описанию;image - видео по картинке image; с use_last_image: true и last_image ролик начнётся точно с image и закончится last_image, без них картинка служит образцом сцены;reference - видео по референсам reference_images и reference_audios.Во всех режимах формат кадра задаёт aspect_ratio, качество - resolution, длину - duration.
{
"tool": "agnes-video-2-5",
"input": {
"generation_type": "text",
"prompt": "...",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
}
}
tool - slug нейросети, всегда "agnes-video-2-5".input - параметры запуска. Все поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Да | Режим. text - видео из текста, image - видео из изображения, reference - видео по референсам. Если не передать, будет text. |
prompt | string | Да | Описание ролика: что происходит в кадре, как движутся герои и камера, свет, стиль, реплики и звуки. От 3 до 5000 символов. Нужен во всех режимах. |
image | string (url) | Да, для image | Ссылка на картинку. С use_last_image: true она станет точным первым кадром, без него - образцом: герой и место сохранятся, а кадр нейросеть может построить заново. Форматы: jpg, jpeg, png, webp. Используется только в режиме image. |
use_last_image | boolean | Нет | true - ролик начнётся точно с image и закончится картинкой из last_image. Работает только в режиме image. |
last_image | string (url) | Да, если use_last_image: true | Ссылка на картинку, которой должен закончиться ролик. Форматы: jpg, jpeg, png, webp. |
reference_images | string[] (url) | Нет | Референсные изображения для режима reference, до 5 ссылок: персонаж, предметы, одежда, место, стиль. Форматы: jpg, jpeg, png, webp. |
reference_audios | string[] (url) | Нет | Референсное аудио для режима reference, до 3 ссылок: голос, реплика, музыка. Форматы: mp3, wav, все файлы вместе - не длиннее 12 секунд. Можно передать и без изображений: тогда героя и место нейросеть придумает по prompt. |
aspect_ratio |
В режиме reference нужен хотя бы один файл в reference_images или reference_audios, иначе запрос вернёт 400 validation_error.
Для всех файлов нужны внешние http/https ссылки, которые открываются без авторизации.
Самый дешёвый вариант: 3 ₽ за секунду, ролик на 5 секунд - 15 ₽.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "agnes-video-2-5",
"input": {
"generation_type": "text",
"prompt": "Пекарь в маленькой пекарне достаёт из печи противень с румяными круассанами, пар поднимается в луче утреннего света, камера медленно приближается к выпечке",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'agnes-video-2-5',
input: {
generation_type: 'text',
prompt: 'Пекарь в маленькой пекарне достаёт из печи противень с румяными круассанами, пар поднимается в луче утреннего света, камера медленно приближается к выпечке',
aspect_ratio: '16:9',
resolution: '720p',
duration: 5,
},
}),
})
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': 'agnes-video-2-5',
'input': {
'generation_type': 'text',
'prompt': 'Пекарь в маленькой пекарне достаёт из печи противень с румяными круассанами, пар поднимается в луче утреннего света, камера медленно приближается к выпечке',
'aspect_ratio': '16:9',
'resolution': '720p',
'duration': 5,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Формат 9:16 для коротких роликов в соцсетях: 5 ₽ за секунду, 8 секунд - 40 ₽.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "agnes-video-2-5",
"input": {
"generation_type": "text",
"prompt": "Девушка в жёлтом дождевике бежит по мокрой набережной, капли летят от каблуков, за ней загораются вечерние фонари, камера едет рядом",
"aspect_ratio": "9:16",
"resolution": "1080p",
"duration": 8
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'agnes-video-2-5',
input: {
generation_type: 'text',
prompt: 'Девушка в жёлтом дождевике бежит по мокрой набережной, капли летят от каблуков, за ней загораются вечерние фонари, камера едет рядом',
aspect_ratio: '9:16',
resolution: '1080p',
duration: 8,
},
}),
})
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': 'agnes-video-2-5',
'input': {
'generation_type': 'text',
'prompt': 'Девушка в жёлтом дождевике бежит по мокрой набережной, капли летят от каблуков, за ней загораются вечерние фонари, камера едет рядом',
'aspect_ratio': '9:16',
'resolution': '1080p',
'duration': 8,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Без конечного кадра картинка из image служит образцом: герой, предметы и место сохраняются, а кадр нейросеть может построить заново. Формат задайте в aspect_ratio близким к пропорциям картинки.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "agnes-video-2-5",
"input": {
"generation_type": "image",
"prompt": "Кот на подоконнике потягивается, зевает и поворачивает голову к окну, за стеклом медленно падает снег",
"image": "https://cdn.example.com/first-frame.jpg",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 6
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'agnes-video-2-5',
input: {
generation_type: 'image',
prompt: 'Кот на подоконнике потягивается, зевает и поворачивает голову к окну, за стеклом медленно падает снег',
image: 'https://cdn.example.com/first-frame.jpg',
aspect_ratio: '16:9',
resolution: '720p',
duration: 6,
},
}),
})
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': 'agnes-video-2-5',
'input': {
'generation_type': 'image',
'prompt': 'Кот на подоконнике потягивается, зевает и поворачивает голову к окну, за стеклом медленно падает снег',
'image': 'https://cdn.example.com/first-frame.jpg',
'aspect_ratio': '16:9',
'resolution': '720p',
'duration': 6,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Ролик начнётся с image и закончится last_image. Подходит для превращений, пролётов и плавных переходов между двумя сценами.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "agnes-video-2-5",
"input": {
"generation_type": "image",
"prompt": "Камера пролетает над утренним городом и опускается к фасаду кафе, вывеска загорается, на террасе появляются первые посетители",
"image": "https://cdn.example.com/first-frame.jpg",
"use_last_image": true,
"last_image": "https://cdn.example.com/last-frame.jpg",
"aspect_ratio": "16:9",
"resolution": "2k",
"duration": 10
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'agnes-video-2-5',
input: {
generation_type: 'image',
prompt: 'Камера пролетает над утренним городом и опускается к фасаду кафе, вывеска загорается, на террасе появляются первые посетители',
image: 'https://cdn.example.com/first-frame.jpg',
use_last_image: true,
last_image: 'https://cdn.example.com/last-frame.jpg',
aspect_ratio: '16:9',
resolution: '2k',
duration: 10,
},
}),
})
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': 'agnes-video-2-5',
'input': {
'generation_type': 'image',
'prompt': 'Камера пролетает над утренним городом и опускается к фасаду кафе, вывеска загорается, на террасе появляются первые посетители',
'image': 'https://cdn.example.com/first-frame.jpg',
'use_last_image': True,
'last_image': 'https://cdn.example.com/last-frame.jpg',
'aspect_ratio': '16:9',
'resolution': '2k',
'duration': 10,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Персонаж, предметы и место берутся с референсов, а сцену вы описываете в prompt. Удобно, когда герой или товар должны выглядеть как на фото.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "agnes-video-2-5",
"input": {
"generation_type": "reference",
"prompt": "Мужчина с первой картинки стоит у стойки кофейни и протягивает гостю чашку со второй картинки, тёплый вечерний свет, камера плавно объезжает стойку",
"reference_images": [
"https://cdn.example.com/reference-1.jpg",
"https://cdn.example.com/reference-2.png"
],
"aspect_ratio": "9:16",
"resolution": "720p",
"duration": 6
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'agnes-video-2-5',
input: {
generation_type: 'reference',
prompt: 'Мужчина с первой картинки стоит у стойки кофейни и протягивает гостю чашку со второй картинки, тёплый вечерний свет, камера плавно объезжает стойку',
reference_images: [
'https://cdn.example.com/reference-1.jpg',
'https://cdn.example.com/reference-2.png',
],
aspect_ratio: '9:16',
resolution: '720p',
duration: 6,
},
}),
})
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': 'agnes-video-2-5',
'input': {
'generation_type': 'reference',
'prompt': 'Мужчина с первой картинки стоит у стойки кофейни и протягивает гостю чашку со второй картинки, тёплый вечерний свет, камера плавно объезжает стойку',
'reference_images': [
'https://cdn.example.com/reference-1.jpg',
'https://cdn.example.com/reference-2.png',
],
'aspect_ratio': '9:16',
'resolution': '720p',
'duration': 6,
},
},
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": "agnes-video-2-5",
"input": {
"generation_type": "reference",
"prompt": "Девушка с картинки стоит на сцене маленького клуба и поёт под музыку из аудио, свет прожектора, камера медленно приближается",
"reference_images": [
"https://cdn.example.com/reference-1.jpg"
],
"reference_audios": [
"https://cdn.example.com/voice-1.mp3",
"https://cdn.example.com/music-1.wav"
],
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": 8
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'agnes-video-2-5',
input: {
generation_type: 'reference',
prompt: 'Девушка с картинки стоит на сцене маленького клуба и поёт под музыку из аудио, свет прожектора, камера медленно приближается',
reference_images: [
'https://cdn.example.com/reference-1.jpg',
],
reference_audios: [
'https://cdn.example.com/voice-1.mp3',
'https://cdn.example.com/music-1.wav',
],
aspect_ratio: '16:9',
resolution: '1080p',
duration: 8,
},
}),
})
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': 'agnes-video-2-5',
'input': {
'generation_type': 'reference',
'prompt': 'Девушка с картинки стоит на сцене маленького клуба и поёт под музыку из аудио, свет прожектора, камера медленно приближается',
'reference_images': [
'https://cdn.example.com/reference-1.jpg',
],
'reference_audios': [
'https://cdn.example.com/voice-1.mp3',
'https://cdn.example.com/music-1.wav',
],
'aspect_ratio': '16:9',
'resolution': '1080p',
'duration': 8,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "agnes-video-2-5",
"cost": 15,
"balance_after": 485,
"created_at": "2026-10-28T12:00:00.000000+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "agnes-video-2-5",
"cost": 15,
"created_at": "2026-10-28T12:00:00.000000+00:00",
"completed_at": "2026-10-28T12:03:10.000000+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/agnes-video-2-5/video-1.mp4"
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "agnes-video-2-5",
"cost": 15,
"created_at": "2026-10-28T12:00:00.000000+00:00",
"completed_at": "2026-10-28T12:01:40.000000+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. В наших проверках ролики приходили за 2-8 минут: 720p на 5-8 секунд - за 2,5-8 минут, 2K на 5 секунд - около 4,5 минуты. Опрашивать одну операцию можно не чаще раза в секунду, для видео разумный интервал - 10 секунд.
После завершения в result приходит:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/agnes-video-2-5/video-1.mp4"
]
}
type - всегда "video".urls - массив с одной ссылкой: ролик MP4 со звуковой дорожкой.Размеры кадра в наших проверках: 720p 16:9 - 1280 × 720, 720p 9:16 - 720 × 1280, 1080p 16:9 - 1888 × 1088, 1080p 21:9 - 2206 × 946, 2K 16:9 - 2560 × 1440. Частота - 24 кадра в секунду.
Цена считается по секундам итогового ролика (duration) и зависит только от разрешения:
resolution | Цена |
|---|---|
720p | 3 ₽/сек. |
1080p | 5 ₽/сек. |
2k | 7 ₽/сек. |
Режим, референсные изображения и аудио, последний кадр на цену не влияют.
| Запуск | Расчёт | Цена |
|---|---|---|
| 720p, 4 с | 4 × 3 | 12 ₽ |
| 720p, 5 с | 5 × 3 | 15 ₽ |
| 1080p, 8 с | 8 × 5 | 40 ₽ |
| 2K, 10 с | 10 × 7 | 70 ₽ |
| 2K, 12 с | 12 × 7 | 84 ₽ |
Стоимость списывается при создании операции и приходит в поле cost ответа.
Idempotency-Key: повтор одного запроса в течение 24 часов вернёт исходную операцию без повторного списания. Повтор без этого заголовка создаёт новую операцию.max_price в теле запроса, чтобы сервер отклонил запуск дороже согласованной суммы до списания.queued, результат забирается по id.http/https ссылками, которые открываются без авторизации. Изображения - только JPG, JPEG, PNG или WebP, аудио - MP3 или WAV.last_image с use_last_image: true. Одна картинка без конечного кадра работает как образец сцены.reference_audios вместе не длиннее 12 секунд, иначе запрос вернёт 400 validation_error.duration - только целое число от 4 до 12. Дробное значение, например 7.5, вернёт 400 validation_error.image, use_last_image и last_image работают только в image, reference_images и reference_audios - только в reference.failed и сообщением «Ваш запрос не прошел модерацию.»enum |
| Да |
Формат кадра. Варианты: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. В режиме image выбирайте формат, близкий к пропорциям картинки. Если не передать, будет 16:9. |
resolution | enum | Да | Разрешение: 720p, 1080p или 2k. От него зависит цена секунды. Если не передать, будет 720p. |
duration | number | Да | Длительность ролика в секундах, целое число от 4 до 12. От неё зависит цена. Если не передать, будет 5. |