Генерирует видео по тексту, изображениям и референсам, а в отдельных режимах умеет синхронизировать картинку с аудио. Цена - от 10 до 100 ₽ за секунду видео, в зависимости от модели, разрешения и загрузки референсного видео.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
SkyReels V4 делает короткие видео длиной до 15 секунд. Ролик можно описать текстом, собрать из своих кадров или построить по референсам: фотографиям персонажей, готовому коллажу, видео-образцу движения, исходному видео для продолжения или аудио с речью.
Три типа генерации:
text) - ролик целиком по описанию.i2v) - стартовый кадр, по желанию конечный кадр и до 6 промежуточных кадров, привязанных к секундам ролика.omni) - пять сценариев на выбор:
image - персонажи и объекты по референсным изображениям;grid - видео по одному готовому коллажу;reference (Motion reference) - движение или стиль берутся из видео-образца;extend (Video extension) - продолжение загруженного видео;audio_sync (Audio sync) - персонаж по изображениям говорит синхронно с аудио.Две модели: fast - дешевле и обычно быстрее, std (Обычная) - качественнее, но дороже.
Каждый вызов создаёт асинхронную операцию. API сразу возвращает id и стартовый статус, а готовое видео нужно забрать отдельной проверкой статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id, стартовый статус и списанную стоимость.Режим задаётся двумя параметрами:
generation_type | omni_mode | Что получится |
|---|---|---|
text | - | Видео из текста |
i2v | - | Видео из изображений (стартовый, конечный и промежуточные кадры) |
omni | image | Видео по референсным изображениям |
omni | grid | Видео по коллажу |
omni | reference | Motion reference: движение по видео-образцу |
omni | extend | Video extension: продолжение видео |
omni | audio_sync | Audio sync: речь персонажа по аудио |
{
"tool": "skyreels-v4",
"input": {
"generation_type": "text",
"model_tier": "fast",
"prompt": "...",
"...": "..."
}
}
tool - slug нейросети, всегда "skyreels-v4".input - параметры конкретного запуска. Набор полей зависит от generation_type и omni_mode.input, без дополнительного вложенного объекта.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Да | Тип генерации: text (видео из текста), i2v (видео из изображений), omni (видео по референсам). Если не передать, используется text. |
model_tier | enum | Да | Модель: fast или std (Обычная). Влияет на цену. Если не передать, используется fast. |
omni_mode | enum | Да (для omni) | Сценарий референсов: image, grid, reference, extend, audio_sync. Учитывается только при generation_type: "omni". Если не передать, используется image. |
prompt | string | Да | Задание: сцена, действие, стиль, движение камеры. От 3 до 4000 символов. Если в запросе есть теги (@image1, @Actor-1, @video1 и т. п.), каждый тег нужно повторить в тексте задания - так модель понимает, к чему относится каждый файл. |
prompt_optimizer | boolean | Нет | Улучшать формулировку задания перед генерацией. По умолчанию true. |
duration | number | Да | Длительность ролика в секундах, целое число от 3 до 15. В сценариях reference и audio_sync длину ролика задаёт загруженный файл, а duration не влияет ни на длину, ни на цену. Если не передать, используется 5. |
resolution | enum | Да | Разрешение: 480p, 720p, 1080p. Влияет на цену. Если не передать, используется 480p. |
aspect_ratio | enum | Да | Соотношение сторон: 16:9, 4:3, 1:1, , . В видео из изображений и в сценариях с загруженным видео итоговое соотношение может определяться входным файлом. Если не передать, используется . |
generation_type: "i2v")| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
first_frame_image | string (url) | Нет | URL стартового кадра. Формально необязателен, но в обычном сценарии его передают: ролик начнётся с этой картинки. |
use_end_frame_image | boolean | Нет | Включает конечный кадр. Без true поле end_frame_image игнорируется. |
end_frame_image | string (url) | Да (если use_end_frame_image: true) | URL конечного кадра: на этой картинке ролик закончится. |
mid_frame_images | object[] | Нет | Промежуточные кадры, от 0 до 6 элементов. Поля элемента: tag (обязательный тег вида @image1), image_url (обязательный URL изображения), time_stamp (необязательная секунда появления, от 1 до 14). Без time_stamp позицию кадра выберет модель. Указывайте секунду не больше длительности ролика минус 1. Каждый tag повторите в prompt. |
omni_mode: "image")| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
omni_image_refs | object[] | Да | От 1 до 3 референсов. Поля элемента: tag (обязательный тег вида @Actor-1), image_urls (обязательный массив от 1 до 5 URL изображений этого персонажа или объекта). Каждый tag повторите в prompt. |
omni_mode: "grid")| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
grid_tag | string | Да | Тег коллажа, например @image1. Повторите его в prompt. |
grid_image_urls | string[] (url) | Да | Массив ровно из одного URL: готовый коллаж-сетка. Больше одного файла сервер не примет. |
omni_mode: "reference")| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
ref_video_tag | string | Да | Тег видео-образца, например @video1. Повторите его в prompt. |
ref_video_urls | string[] (url) | Да | Массив ровно из одного URL видео-образца, от 1 до 10 секунд. Длина готового ролика равна длине этого видео, и цена считается по ней. |
omni_reference_refs | object[] | Нет | Необязательные референсные изображения, от 0 до 3 элементов. Поля элемента те же, что у omni_image_refs: tag и image_urls (от 1 до 5 URL). |
omni_mode: "extend")| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
ref_video_tag | string | Да | Тег исходного видео, например @video1. Повторите его в prompt. |
ref_video_urls | string[] (url) | Да | Массив ровно из одного URL исходного видео, от 1 до 15 секунд. Цена считается по duration. |
omni_mode: "audio_sync")| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
audio_sync_refs | object[] | Да | Ровно один персонаж. Поля элемента: tag (обязательный тег вида @Actor-1), image_urls (обязательный массив от 1 до 5 URL изображений персонажа). Повторите tag в prompt. |
audio_sync_audio_url | string (url) | Да | URL аудио с речью, от 1 до 15 секунд. Длина готового ролика равна длине аудио, и цена считается по ней. |
@, дальше латинские буквы, цифры, дефис или подчёркивание: @Actor-1, @image1, @video_main. Кириллица и пробелы в теге не допускаются.prompt, например: "@Actor-1 идёт по ночной улице". Тег без упоминания в задании модель не свяжет с нужным файлом..jpg, .jpeg, .png, .gif, .bmp.ref_video_urls): .mp4, .mov.audio_sync_audio_url): .mp3, .wav, .m4a, .aac, .flac, .ogg, .opus.http/https ссылками.Модель fast, 720p, 5 секунд.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "skyreels-v4",
"input": {
"generation_type": "text",
"model_tier": "fast",
"prompt": "Утренний рыбный рынок у моря: продавцы раскладывают улов на лёд, чайки кружат над прилавками, камера медленно едет вдоль рядов, мягкий рассветный свет",
"prompt_optimizer": true,
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}
}'
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-v4',
input: {
generation_type: 'text',
model_tier: 'fast',
prompt:
'Утренний рыбный рынок у моря: продавцы раскладывают улов на лёд, чайки кружат над прилавками, камера медленно едет вдоль рядов, мягкий рассветный свет',
prompt_optimizer: true,
duration: 5,
resolution: '720p',
aspect_ratio: '16:9',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "skyreels-v4",
"input": {
"generation_type": "text",
"model_tier": "fast",
"prompt": "Утренний рыбный рынок у моря: продавцы раскладывают улов на лёд, чайки кружат над прилавками, камера медленно едет вдоль рядов, мягкий рассветный свет",
"prompt_optimizer": True,
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Стоимость: 5 × 15 ₽ = 75 ₽.
Модель std, 1080p, 8 секунд. Два промежуточных кадра появятся на 3-й и 5-й секунде, теги @image1 и @image2 повторены в задании.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "skyreels-v4",
"input": {
"generation_type": "i2v",
"model_tier": "std",
"prompt": "Бутон розы медленно раскрывается: сначала приоткрываются лепестки как на @image1, затем цветок наполовину раскрыт как на @image2, в конце полностью распустившаяся роза, студийный свет, камера неподвижна",
"first_frame_image": "https://cdn.example.com/rose-start.jpg",
"use_end_frame_image": true,
"end_frame_image": "https://cdn.example.com/rose-end.jpg",
"mid_frame_images": [
{
"tag": "@image1",
"image_url": "https://cdn.example.com/rose-mid-1.jpg",
"time_stamp": 3
},
{
"tag": "@image2",
"image_url": "https://cdn.example.com/rose-mid-2.png",
"time_stamp": 5
}
],
"duration": 8,
"resolution": "1080p",
"aspect_ratio": "1:1"
}
}'
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-v4',
input: {
generation_type: 'i2v',
model_tier: 'std',
prompt:
'Бутон розы медленно раскрывается: сначала приоткрываются лепестки как на @image1, затем цветок наполовину раскрыт как на @image2, в конце полностью распустившаяся роза, студийный свет, камера неподвижна',
first_frame_image: 'https://cdn.example.com/rose-start.jpg',
use_end_frame_image: true,
end_frame_image: 'https://cdn.example.com/rose-end.jpg',
mid_frame_images: [
{
tag: '@image1',
image_url: 'https://cdn.example.com/rose-mid-1.jpg',
time_stamp: 3,
},
{
tag: '@image2',
image_url: 'https://cdn.example.com/rose-mid-2.png',
time_stamp: 5,
},
],
duration: 8,
resolution: '1080p',
aspect_ratio: '1:1',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "skyreels-v4",
"input": {
"generation_type": "i2v",
"model_tier": "std",
"prompt": "Бутон розы медленно раскрывается: сначала приоткрываются лепестки как на @image1, затем цветок наполовину раскрыт как на @image2, в конце полностью распустившаяся роза, студийный свет, камера неподвижна",
"first_frame_image": "https://cdn.example.com/rose-start.jpg",
"use_end_frame_image": True,
"end_frame_image": "https://cdn.example.com/rose-end.jpg",
"mid_frame_images": [
{
"tag": "@image1",
"image_url": "https://cdn.example.com/rose-mid-1.jpg",
"time_stamp": 3,
},
{
"tag": "@image2",
"image_url": "https://cdn.example.com/rose-mid-2.png",
"time_stamp": 5,
},
],
"duration": 8,
"resolution": "1080p",
"aspect_ratio": "1:1",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Стоимость: 8 × 50 ₽ = 400 ₽.
Если нужен только стартовый кадр, уберите use_end_frame_image, end_frame_image и mid_frame_images.
Модель fast, 480p. Персонаж с фотографий @Actor-1 повторяет движения из видео @video1. Длину ролика задаёт видео-образец, поэтому duration не передаём.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "skyreels-v4",
"input": {
"generation_type": "omni",
"omni_mode": "reference",
"model_tier": "fast",
"prompt": "@Actor-1 танцует на крыше многоэтажки на закате, повторяя движения из @video1, лёгкий ветер, тёплый свет",
"ref_video_tag": "@video1",
"ref_video_urls": [
"https://cdn.example.com/dance-reference.mp4"
],
"omni_reference_refs": [
{
"tag": "@Actor-1",
"image_urls": [
"https://cdn.example.com/actor-front.jpg",
"https://cdn.example.com/actor-side.jpg"
]
}
],
"resolution": "480p",
"aspect_ratio": "9:16"
}
}'
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-v4',
input: {
generation_type: 'omni',
omni_mode: 'reference',
model_tier: 'fast',
prompt:
'@Actor-1 танцует на крыше многоэтажки на закате, повторяя движения из @video1, лёгкий ветер, тёплый свет',
ref_video_tag: '@video1',
ref_video_urls: ['https://cdn.example.com/dance-reference.mp4'],
omni_reference_refs: [
{
tag: '@Actor-1',
image_urls: [
'https://cdn.example.com/actor-front.jpg',
'https://cdn.example.com/actor-side.jpg',
],
},
],
resolution: '480p',
aspect_ratio: '9:16',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "skyreels-v4",
"input": {
"generation_type": "omni",
"omni_mode": "reference",
"model_tier": "fast",
"prompt": "@Actor-1 танцует на крыше многоэтажки на закате, повторяя движения из @video1, лёгкий ветер, тёплый свет",
"ref_video_tag": "@video1",
"ref_video_urls": ["https://cdn.example.com/dance-reference.mp4"],
"omni_reference_refs": [
{
"tag": "@Actor-1",
"image_urls": [
"https://cdn.example.com/actor-front.jpg",
"https://cdn.example.com/actor-side.jpg",
],
}
],
"resolution": "480p",
"aspect_ratio": "9:16",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Если видео-образец длится 8,2 секунды, стоимость: 9 × 20 ₽ = 180 ₽.
Модель std, 720p. Один персонаж @Actor-1 по двум фотографиям и аудио с речью. Длину ролика задаёт аудио.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "skyreels-v4",
"input": {
"generation_type": "omni",
"omni_mode": "audio_sync",
"model_tier": "std",
"prompt": "@Actor-1 сидит за столом в уютной кофейне и спокойно говорит в камеру, естественная мимика, лёгкие жесты руками",
"audio_sync_refs": [
{
"tag": "@Actor-1",
"image_urls": [
"https://cdn.example.com/speaker-1.jpg",
"https://cdn.example.com/speaker-2.jpg"
]
}
],
"audio_sync_audio_url": "https://cdn.example.com/speech.mp3",
"resolution": "720p",
"aspect_ratio": "9:16"
}
}'
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-v4',
input: {
generation_type: 'omni',
omni_mode: 'audio_sync',
model_tier: 'std',
prompt:
'@Actor-1 сидит за столом в уютной кофейне и спокойно говорит в камеру, естественная мимика, лёгкие жесты руками',
audio_sync_refs: [
{
tag: '@Actor-1',
image_urls: [
'https://cdn.example.com/speaker-1.jpg',
'https://cdn.example.com/speaker-2.jpg',
],
},
],
audio_sync_audio_url: 'https://cdn.example.com/speech.mp3',
resolution: '720p',
aspect_ratio: '9:16',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "skyreels-v4",
"input": {
"generation_type": "omni",
"omni_mode": "audio_sync",
"model_tier": "std",
"prompt": "@Actor-1 сидит за столом в уютной кофейне и спокойно говорит в камеру, естественная мимика, лёгкие жесты руками",
"audio_sync_refs": [
{
"tag": "@Actor-1",
"image_urls": [
"https://cdn.example.com/speaker-1.jpg",
"https://cdn.example.com/speaker-2.jpg",
],
}
],
"audio_sync_audio_url": "https://cdn.example.com/speech.mp3",
"resolution": "720p",
"aspect_ratio": "9:16",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Если аудио длится 6,4 секунды, стоимость: 7 × 18 ₽ = 126 ₽.
Два референса: персонаж @Actor-1 и предмет @Prop-1. Запрос на JavaScript и Python устроен так же, как в сценариях выше.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "skyreels-v4",
"input": {
"generation_type": "omni",
"omni_mode": "image",
"model_tier": "fast",
"prompt": "@Actor-1 едет по осеннему парку на велосипеде @Prop-1, листья летят из-под колёс, камера следует сбоку",
"omni_image_refs": [
{
"tag": "@Actor-1",
"image_urls": [
"https://cdn.example.com/actor-1.jpg",
"https://cdn.example.com/actor-2.jpg"
]
},
{
"tag": "@Prop-1",
"image_urls": [
"https://cdn.example.com/bike-1.png",
"https://cdn.example.com/bike-2.png"
]
}
],
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9"
}
}'
Стоимость: 6 × 15 ₽ = 90 ₽.
В grid_image_urls передаётся ровно одна ссылка на готовый коллаж.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "skyreels-v4",
"input": {
"generation_type": "omni",
"omni_mode": "grid",
"model_tier": "fast",
"prompt": "Раскадровка @image1 оживает как одна непрерывная сцена: героиня выходит из дома, садится в машину и уезжает в сторону гор",
"grid_tag": "@image1",
"grid_image_urls": [
"https://cdn.example.com/storyboard-grid.jpg"
],
"duration": 10,
"resolution": "480p",
"aspect_ratio": "16:9"
}
}'
Стоимость: 10 × 10 ₽ = 100 ₽.
Исходное видео до 15 секунд, длину продолжения и цену задаёт duration.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "skyreels-v4",
"input": {
"generation_type": "omni",
"omni_mode": "extend",
"model_tier": "std",
"prompt": "Продолжи @video1: лодка выходит из тумана в открытое море, солнце поднимается над горизонтом, камера плавно отъезжает назад",
"ref_video_tag": "@video1",
"ref_video_urls": [
"https://cdn.example.com/boat-source.mp4"
],
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}
}'
Стоимость: 5 × 35 ₽ = 175 ₽.
{
"id": "op_uuid-123",
"status": "queued",
"tool": "skyreels-v4",
"cost": 180,
"balance_after": 820,
"created_at": "2026-10-01T12:00:00Z"
}
cost - сумма, которая уже списана с баланса, balance_after - баланс после списания.
{
"id": "op_uuid-123",
"status": "completed",
"tool": "skyreels-v4",
"cost": 180,
"created_at": "2026-10-01T12:00:00Z",
"completed_at": "2026-10-01T12:03:40Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/skyreels-v4/result.mp4"
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "skyreels-v4",
"cost": 180,
"created_at": "2026-10-01T12:00:00Z",
"completed_at": "2026-10-01T12:01:05Z",
"result": null,
"error_message": "Не удалось выполнить операцию"
}
Операция не создаётся, деньги не списываются:
{
"error": {
"code": "validation_error",
"message": "Видео-образец должен длиться от 1 до 10 секунд.",
"request_id": "6f1c2a9e-3b7d-4c55-9a1e-2d8f0b4c7e11"
}
}
request_id пригодится при обращении в поддержку: по нему находится конкретный запрос.
После создания операции сохраните id и проверяйте по нему статус:
GET /api/v1/operations/{id}id возвращается сразу в ответе на POST /api/v1/operations.queued → processing → completed или failed.429. На практике хватает одного запроса в 5-10 секунд: генерация видео обычно занимает несколько минут.curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForVideo(id: string): Promise<string[]> {
while (true) {
const response = await fetch(
`https://bratuha.ru/api/v1/operations/${id}`,
{ headers: { Authorization: 'Bearer brth_ваш_ключ' } },
)
const data = await response.json()
if (data.status === 'completed') return data.result.urls
if (data.status === 'failed') throw new Error(data.error_message)
await new Promise((resolve) => setTimeout(resolve, 10_000))
}
}
const urls = await waitForVideo('op_uuid-123')
console.log(urls)
После успешного завершения result выглядит так:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/skyreels-v4/result.mp4"
]
}
type всегда "video".urls - массив ссылок на готовое видео в формате .mp4. Один запуск возвращает один ролик, но читайте результат как массив.Если операция завершилась с ошибкой, result будет null, а причина придёт в error_message.
Цена считается за секунду ролика:
Итоговая цена = число оплачиваемых секунд × ставка за секунду.
Ставка зависит от модели (model_tier), разрешения (resolution) и того, есть ли в запросе загруженное видео. Загруженное видео бывает только в сценариях reference (Motion reference) и extend (Video extension).
| Модель | Разрешение | Без загруженного видео | С загруженным видео (reference, extend) |
|---|---|---|---|
fast | 480p | 10 ₽ | 20 ₽ |
fast | 720p | 15 ₽ | 25 ₽ |
fast | 1080p | 32 ₽ | 70 ₽ |
std | 480p | 15 ₽ | 28 ₽ |
std | 720p | 18 ₽ | 35 ₽ |
std | 1080p | 50 ₽ | 100 ₽ |
Режимы text, i2v, omni + image, omni + grid и omni + audio_sync идут по колонке «Без загруженного видео». Изображения, промежуточные кадры, аудио и prompt_optimizer ставку не меняют.
| Сценарий | По какой длине считается | Допустимая длина |
|---|---|---|
text, i2v, omni + image, omni + grid, omni + extend | duration из запроса | 3-15 секунд |
omni + reference (Motion reference) | Длина видео-образца в ref_video_urls | Видео от 1 до 10 секунд |
omni + audio_sync (Audio sync) | Длина аудио в audio_sync_audio_url | Аудио от 1 до 15 секунд |
Длину видео-образца и аудио сервер измеряет сам до списания. Секунды округляются вверх до целого, минимум к оплате 3 секунды: аудио на 2,1 секунды оплачивается как 3 секунды. В reference и audio_sync значение duration на цену не влияет, даже если вы его передали.
fast, 480p, duration: 5: 5 × 10 ₽ = 50 ₽.std, 1080p, duration: 8: 8 × 50 ₽ = 400 ₽.fast, 480p, видео-образец 8,2 секунды: округляем до 9 секунд, 9 × 20 ₽ = 180 ₽. Переданный duration ничего не меняет.std, 720p, аудио 6,4 секунды: округляем до 7 секунд, 7 × 18 ₽ = 126 ₽.fast, 480p, аудио 2,1 секунды: минимум 3 секунды, 3 × 10 ₽ = 30 ₽.std, 720p, исходное видео 12 секунд, duration: 5: длина исходного видео на цену не влияет, 5 × 35 ₽ = 175 ₽.Самый дешёвый вариант - fast, 480p, 3 секунды без загруженного видео: 30 ₽. Самый дорогой - std, 1080p, Video extension на 15 секунд: 1500 ₽.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую оплаченную операцию. Не повторяйте запрос автоматически после таймаута, сначала проверьте, не создалась ли операция.queued, готовое видео забирается через GET /api/v1/operations/{id}.http/https ссылками. localhost, private IP и внутренние адреса не принимаются..jpg, .jpeg, .png, .gif, .bmp. Другие форматы, в том числе .webp, в этой нейросети не поддерживаются.400 validation_error без списания, если:
reference короче 1 или длиннее 10 секунд;extend короче 1 или длиннее 15 секунд;audio_sync короче 1 или длиннее 15 секунд;ref_video_urls или grid_image_urls больше одной ссылки;first_frame_image в режиме text или ref_video_urls в режиме omni + image не попадут в генерацию и не изменят цену. end_frame_image учитывается только вместе с use_end_frame_image: true.duration принимает только целые числа от 3 до 15.generation_type: "text", model_tier: "fast", omni_mode: "image", duration: 5, resolution: "480p", aspect_ratio: "16:9", prompt_optimizer: true. Чтобы не получить неожиданный режим или цену, передавайте режим, модель и разрешение явно.@image1, @Actor-1, @video1) должен встречаться в prompt. Сервер это не проверяет, но без упоминания в задании модель не поймёт, к чему относится файл.mid_frame_images указывайте time_stamp меньше длительности ролика: при подойдут секунды с 1 по 4.9:163:416:9duration: 5