Создаёт видео по тексту, изображениям, референсам и исходному видео, а ещё умеет делать переход между первым и конечным кадром. Без видео-референсов - 14 ₽/сек. в 480p или 28 ₽/сек. в 720p, с видео-референсами - 8 ₽/сек. в 480p или 16 ₽/сек. в 720p (считается по формуле: (длительность генерации + суммарная длительность видео-референсов) × ставка за секунду), для редактирования - 16 ₽/сек. в 480p или 32 ₽/сек. в 720p.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Seedance 2.5 создаёт видео по тексту, по изображениям и по готовым референсам. Модель подходит для рекламных роликов, коротких сцен, анимации фотографий и монтажных переходов между двумя кадрами.
Практически у модели четыре режима вызова:
text - видео только по текстовому описанию;image - видео на основе одного или нескольких исходных изображений;frames - плавный переход между первым и последним кадром;references - видео по смешанным референсам: изображения, видео и аудио одновременно.Каждый вызов создаёт асинхронную операцию. Сразу после запроса API возвращает id и стартовый статус, а готовый ролик нужно получить отдельной проверкой статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус.Режим вызова выбирается параметром seedance_2_5_generation_type:
text - видео из текста;image - видео из изображений;frames - переход между первым и последним кадром;references - видео по референсам.{
"tool": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "text",
"...": "..."
}
}
tool - slug нейросети, всегда "seedance-2-5".input - параметры конкретного запуска.input зависит от выбранного seedance_2_5_generation_type.input, без дополнительного вложенного объекта input.input.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
seedance_2_5_generation_type | enum | Да | Режим генерации. Варианты: text (видео из текста), image (видео из изображений), frames (переход между первым и последним кадром), references (видео по референсам). Определяет, какие остальные поля нужно передавать. |
prompt | string | Да | Текстовое задание: сцена, действие, стиль, движение камеры и атмосфера. Для обычной генерации описывайте сцену без команд редактирования или продления. От 2 до 20000 символов. |
image_urls | string[] (url) | Да | Массив внешних URL изображений. Обязателен и учитывается только в режиме image. От 1 до 30 изображений, каждое до 30 МБ. Разрешены только http/https ссылки. |
first_frame_url | string (url) | Да | URL первого кадра. Обязателен только в режиме frames. До 30 МБ. |
last_frame_url | string (url) | Да | URL конечного кадра. Обязателен только в режиме frames. До 30 МБ. |
reference_image_urls | string[] (url) | Нет | Массив референсных изображений для режима references. До 30 изображений, каждое до 30 МБ. |
video_urls | string[] (url) | Нет | Массив видео-референсов для режима references. До 10 видео, каждое до 200 МБ, длительность одного файла от 2 до 30 секунд, суммарно до 30 секунд, разрешение 480p или 720p. Наличие непустого video_urls меняет ставку - подробности в разделе «Ценообразование». |
audio_urls | string[] (url) | Нет | Массив аудио-референсов для режима references. До 10 файлов, каждый до 15 МБ, длительность одного файла от 2 до 30 секунд, суммарно до 30 секунд. |
size | enum | Да | Соотношение сторон. Варианты: 16:9, , , , , , (подстраивается под загруженный материал). В режиме доступно только - остальные значения сервер отклонит. |
В режиме references нужно передать хотя бы один референс - reference_image_urls, video_urls или audio_urls. Если не передать ни одного, операция не создаётся.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "text",
"prompt": "Кинематографичный вид ночного мегаполиса с высоты: неоновые вывески, лёгкий туман, плавное движение камеры вперёд, отражения огней в мокром асфальте",
"size": "16:9",
"resolution": "720p",
"duration": 6,
"generate_audio": true,
"watermark": false,
"output_format": "mp4"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'seedance-2-5',
input: {
seedance_2_5_generation_type: 'text',
prompt:
'Кинематографичный вид ночного мегаполиса с высоты: неоновые вывески, лёгкий туман, плавное движение камеры вперёд, отражения огней в мокром асфальте',
size: '16:9',
resolution: '720p',
duration: 6,
generate_audio: true,
watermark: false,
output_format: 'mp4',
},
}),
})
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": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "text",
"prompt": "Кинематографичный вид ночного мегаполиса с высоты: неоновые вывески, лёгкий туман, плавное движение камеры вперёд, отражения огней в мокром асфальте",
"size": "16:9",
"resolution": "720p",
"duration": 6,
"generate_audio": True,
"watermark": False,
"output_format": "mp4",
},
},
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": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "image",
"prompt": "Оживи фотографии: лёгкое покачивание волос от ветра, естественное дыхание и моргание, камера почти статична",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg"
],
"size": "9:16",
"resolution": "480p",
"duration": 5,
"generate_audio": false,
"output_format": "mp4"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'seedance-2-5',
input: {
seedance_2_5_generation_type: 'image',
prompt:
'Оживи фотографии: лёгкое покачивание волос от ветра, естественное дыхание и моргание, камера почти статична',
image_urls: [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.jpg',
],
size: '9:16',
resolution: '480p',
duration: 5,
generate_audio: false,
output_format: 'mp4',
},
}),
})
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": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "image",
"prompt": "Оживи фотографии: лёгкое покачивание волос от ветра, естественное дыхание и моргание, камера почти статична",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg",
],
"size": "9:16",
"resolution": "480p",
"duration": 5,
"generate_audio": False,
"output_format": "mp4",
},
},
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": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "frames",
"prompt": "Плавный переход между двумя кадрами: герой разворачивается спиной к камере, освещение и цветокоррекция остаются прежними",
"first_frame_url": "https://cdn.example.com/source-first-frame-1.jpg",
"last_frame_url": "https://cdn.example.com/source-last-frame-1.jpg",
"size": "adaptive",
"resolution": "720p",
"duration": 4,
"output_format": "mov"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'seedance-2-5',
input: {
seedance_2_5_generation_type: 'frames',
prompt:
'Плавный переход между двумя кадрами: герой разворачивается спиной к камере, освещение и цветокоррекция остаются прежними',
first_frame_url: 'https://cdn.example.com/source-first-frame-1.jpg',
last_frame_url: 'https://cdn.example.com/source-last-frame-1.jpg',
size: 'adaptive',
resolution: '720p',
duration: 4,
output_format: 'mov',
},
}),
})
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": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "frames",
"prompt": "Плавный переход между двумя кадрами: герой разворачивается спиной к камере, освещение и цветокоррекция остаются прежними",
"first_frame_url": "https://cdn.example.com/source-first-frame-1.jpg",
"last_frame_url": "https://cdn.example.com/source-last-frame-1.jpg",
"size": "adaptive",
"resolution": "720p",
"duration": 4,
"output_format": "mov",
},
},
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": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "references",
"prompt": "Собери сцену по референсам: поза и ракурс героя как в референс-видео, одежда и фон как на референсных изображениях",
"reference_image_urls": [
"https://cdn.example.com/source-image-3.jpg",
"https://cdn.example.com/source-image-4.jpg"
],
"video_urls": [
"https://cdn.example.com/source-video-1.mp4",
"https://cdn.example.com/source-video-2.mov"
],
"size": "16:9",
"resolution": "480p",
"duration": 6,
"generate_audio": false,
"output_format": "mp4"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'seedance-2-5',
input: {
seedance_2_5_generation_type: 'references',
prompt:
'Собери сцену по референсам: поза и ракурс героя как в референс-видео, одежда и фон как на референсных изображениях',
reference_image_urls: [
'https://cdn.example.com/source-image-3.jpg',
'https://cdn.example.com/source-image-4.jpg',
],
video_urls: [
'https://cdn.example.com/source-video-1.mp4',
'https://cdn.example.com/source-video-2.mov',
],
size: '16:9',
resolution: '480p',
duration: 6,
generate_audio: false,
output_format: 'mp4',
},
}),
})
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": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "references",
"prompt": "Собери сцену по референсам: поза и ракурс героя как в референс-видео, одежда и фон как на референсных изображениях",
"reference_image_urls": [
"https://cdn.example.com/source-image-3.jpg",
"https://cdn.example.com/source-image-4.jpg",
],
"video_urls": [
"https://cdn.example.com/source-video-1.mp4",
"https://cdn.example.com/source-video-2.mov",
],
"size": "16:9",
"resolution": "480p",
"duration": 6,
"generate_audio": False,
"output_format": "mp4",
},
},
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": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "references",
"prompt": "Создай видео с персонажем, который поёт и двигается в такт голосу из референсного аудио, атмосфера сцены - как в задании",
"audio_urls": [
"https://cdn.example.com/source-audio-1.mp3",
"https://cdn.example.com/source-audio-2.wav"
],
"size": "1:1",
"resolution": "480p",
"duration": 6,
"output_format": "mp4"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'seedance-2-5',
input: {
seedance_2_5_generation_type: 'references',
prompt:
'Создай видео с персонажем, который поёт и двигается в такт голосу из референсного аудио, атмосфера сцены - как в задании',
audio_urls: [
'https://cdn.example.com/source-audio-1.mp3',
'https://cdn.example.com/source-audio-2.wav',
],
size: '1:1',
resolution: '480p',
duration: 6,
output_format: 'mp4',
},
}),
})
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": "seedance-2-5",
"input": {
"seedance_2_5_generation_type": "references",
"prompt": "Создай видео с персонажем, который поёт и двигается в такт голосу из референсного аудио, атмосфера сцены - как в задании",
"audio_urls": [
"https://cdn.example.com/source-audio-1.mp3",
"https://cdn.example.com/source-audio-2.wav",
],
"size": "1:1",
"resolution": "480p",
"duration": 6,
"output_format": "mp4",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "seedance-2-5",
"cost": 168,
"balance_after": 832,
"created_at": "2026-08-08T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "seedance-2-5",
"cost": 168,
"created_at": "2026-08-08T12:00:00Z",
"completed_at": "2026-08-08T12:04:12Z",
"result": {
"type": "video",
"urls": ["https://storage.bratuha.ru/results/seedance-2-5/result.mp4"]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "seedance-2-5",
"cost": 168,
"created_at": "2026-08-08T12:00:00Z",
"completed_at": "2026-08-08T12:01:03Z",
"result": null,
"error_message": "Не удалось выполнить операцию"
}
После создания операции сохраните id и используйте его для отдельной проверки статуса:
GET /api/v1/operations/{id}id возвращается сразу после POST /api/v1/operations.curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const response = await fetch(
'https://bratuha.ru/api/v1/operations/op_uuid-123',
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
},
)
const data = await response.json()
console.log(data)
После успешного завершения операция возвращает result в таком формате:
{
"type": "video",
"urls": ["https://storage.bratuha.ru/results/seedance-2-5/result.mp4"]
}
Что важно знать:
type всегда "video";urls - массив ссылок на готовый файл в формате mp4 или mov, в зависимости от output_format;Итоговая цена = длительность ролика в секундах (duration, округляется вверх до целого, от 4 до 30) × ставка за секунду.
Ставка зависит от разрешения (resolution) и от того, используются ли видео-референсы (video_urls, доступны только в режиме references):
| Разрешение | Видео-референсы | Ставка за секунду |
|---|---|---|
480p | Нет | 14 ₽ |
720p | Нет | 28 ₽ |
480p | Да | 8 ₽ |
720p | Да | 16 ₽ |
Если в режиме references загружены видео-референсы, дополнительно оплачивается их суммарная длительность - её сервер определяет сам по метаданным файлов:
resolution = 480p - дополнительно 8 ₽ за каждую секунду видео-референсов;resolution = 720p - дополнительно 16 ₽ за каждую секунду видео-референсов.Изображения и аудио-референсы (reference_image_urls, audio_urls) на цену не влияют. Параметры generate_audio, watermark и output_format тоже не влияют на цену.
Примеры расчёта:
720p, без видео-референсов (режимы text, image, frames или references без video_urls): 6 × 28 ₽ = 168 ₽.480p, без видео-референсов: 5 × 14 ₽ = 70 ₽.references, ролик на 6 секунд, 480p, суммарная длительность видео-референсов 10 секунд: 6 × 8 ₽ + 10 × 8 ₽ = 48 ₽ + 80 ₽ = 128 ₽.references, ролик на 6 секунд, 720p, суммарная длительность видео-референсов 10 секунд: 6 × 16 ₽ + 10 × 16 ₽ = 96 ₽ + 160 ₽ = 256 ₽.POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию.queued, затем отдельно проверяете статус по id.http/https ссылки без localhost, loopback и private IP.image_urls, first_frame_url, last_frame_url, reference_image_urls) используйте .jpg, .jpeg, .png, .webp, .bmp, .tiff, .tif, .gif. Форматы HEIC/HEIF, которые поддерживаются при загрузке файлов через интерфейс сайта, в Public API по внешнему URL не принимаются.video_urls) используйте .mp4 и .mov.audio_urls) используйте .wav и .mp3.frames доступно только size = "adaptive" - остальные значения соотношения сторон сервер отклонит.references нужно передать хотя бы один референс: reference_image_urls, video_urls или audio_urls.duration можно передать нецелым числом, но для расчёта цены секунды всегда округляются вверх до целого.4:31:13:49:1621:9adaptiveframesadaptiveresolution | enum | Да | Разрешение ролика. Варианты: 480p, 720p. 720p даёт более детальный результат и стоит дороже. Влияет на цену. |
duration | number | Да | Длительность ролика в секундах, от 4 до 30. Используется для расчёта цены. |
generate_audio | boolean | Нет | Добавляет звук к ролику, если модель может согласовать его со сценой. На цену не влияет. |
watermark | boolean | Нет | Добавляет отметку о том, что видео создано с помощью ИИ. На цену не влияет. |
output_format | enum | Да | Формат готового файла. Варианты: mp4, mov. |