Seedance 2.5
Генерируйте видео с помощью Seedance 2.5, используя текстовые промпты, первый и последний кадры или мультимодальные референсы. На этой странице описан весь рабочий процесс — от запроса до получения результата.
ID модели в API: seedance-2-5
Генерация выполняется асинхронно. Сохраните taskId, возвращаемый при создании задачи, а затем запрашивайте её статус или настройте получение вебхуков.
Возможности
| Функция | Допустимые значения |
|---|---|
| Разрешение видео | 480p · 720p · 1080p |
| Длительность видео | 4–30 сек. |
| Соотношение сторон | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |
| Референсные изображения | До 30 изображений |
| Референсные видео | До 10 видео |
| Референсные аудиофайлы | До 10 аудиофайлов |
| Все референсы вместе | Всего до 50 справочных файлов |
| Общая длительность на группу видео/аудио | 30 сек. |
| seed | Не поддерживается |
Тарифы и кредиты
Списание кредитов за генерацию видео происходит на основе тарифицируемой длительности в секундах. Без использования исходного видео тарифицируется только длительность готового ролика. При наличии исходного видео в расчет также включается длительность референсного видео.
В таблице ниже указана стоимость в кредитах за одну секунду, а не общая стоимость генерации. Тариф зависит от модели, разрешения готового видео, а также от наличия референсных видео в режиме генерации по образцу. Формулы и примеры расчета полной стоимости приведены под таблицей.
| Разрешение видео | Без видео на входе | С видео на входе |
|---|---|---|
480p | 10 кредита/сек | 6 кредита/сек |
720p | 20 кредита/сек | 12 кредита/сек |
1080p | 30 кредита/сек | 20 кредита/сек |
- Без видео на входе: секунд на выходе × тариф без видео.
- С видео на входе: (секунд на выходе + фактическая длительность референсного видео) × тариф с видео. Сервер измеряет общую длительность референсного видео и округляет её в большую сторону до целых секунд перед расчётом стоимости.
- Использование только изображений или аудио в качестве референсов тарифицируется по тарифу без видео. Тариф с видео применяется только в режиме reference-to-video при наличии референсных видеороликов.
Примеры расчёта стоимости
5 секунд генерации текста в видео (720p): 5 × 20 = 100 кредитов.
5 секунд видео на выходе (720p) с 5-секундным референсным видео: (5 + 5) × 12 = 120 кредитов.
Кредиты резервируются в момент отправки запроса и списываются при успешном завершении. Задачи, завершившиеся ошибкой или по таймауту, отправляются на возврат. Статус биллинга refund_failed означает, что возврат не был завершён; проверьте логи API или обратитесь в поддержку.
Списание лимитов при duration=-1
Если длительность установлена на -1, продолжительность готового видео не фиксируется, а определяется моделью автоматически.
В большинстве случаев рекомендуется указывать конкретную нужную вам длину видео вместо -1. Мы советуем использовать значение -1 исключительно для монтажа и редактирования видео, но не для других сценариев генерации.
| Исходные материалы | Принцип расчета стоимости | Пример |
|---|---|---|
| С референсными видео | Длительность всех референсных видео суммируется и округляется в большую сторону до целой секунды (обозначим как T). Итоговая стоимость рассчитывается по формуле (T + T) × тариф с видео, где первое T — это ожидаемая длительность готового ролика, а второе — длительность исходного видео. | 720p с референсным видео длительностью 5 секунд: (5 + 5) × 12 = 120 лимитов. |
| Без референсных видео (только изображения или аудио) | За ожидаемую длительность готового ролика принимается 30 секунд. Итоговая стоимость рассчитывается по формуле: 30 × тариф без видео. | 720p без референсных видео: 30 × 20 = 600 лимитов. |
Аутентификация
Создайте API-ключ в панели управления. Полный ключ показывается только один раз. Храните его на своём сервере и передавайте в качестве Bearer-токена в заголовке каждого запроса.
Базовый URL
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonЗадайте переменную окружения SEEVIO_API_KEY перед запуском этих примеров. Примеры на JavaScript выполняются на стороне сервера с помощью Node.js; примеры на Python используют библиотеку requests.
Быстрый старт
Отправьте этот минимальный запрос, сохраните полученный taskId, а затем используйте пример запроса статуса ниже. Значение credits в ответе на создание задачи — это зарезервированная сумма.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
}
}'Пример ответа при создании задачи
После того как вышеуказанный запрос будет принят, API вернет этот ответ в формате JSON. Параметр taskId представляет собой идентификатор задачи, используемый для последующих запросов ее статуса; credits — это количество кредитов, зарезервированных для выполнения данной задачи. Этот ответ подтверждает лишь создание задачи, а не готовность видео. Чтобы получить готовый видеофайл, вам необходимо периодически опрашивать статус задачи или использовать Webhook.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}Создание задачи
POST https://api.seevio.ai/v1/videos/generationsОтправьте JSON-объект, содержащий model, input и необязательный параметр callback_url. Всегда указывайте точный ID модели, приведенный на этой странице; если поле model опущено, будет выбрана seedance-2-0.
Тело запроса
| Поле | Тип | Обязательное | Описание и ограничения |
|---|---|---|---|
model | string | Да | ID модели. Чтобы использовать Seedance 2.5, укажите в этом поле seedance-2-5. |
callback_url | string | Нет | Публичный HTTPS-эндпоинт для POST-запросов о завершении или ошибке задачи. Локальные (localhost) и приватные сети не поддерживаются. Пример: https://example.com/webhooks/seevio |
input | object | Да | Настройки генерации. Должны содержать непустой prompt. |
Входные параметры
Передайте параметры image_urls, video_urls и audio_urls в виде массивов со строками URL-адресов (string[]). Каждый указанный URL-адрес должен быть общедоступным по протоколу HTTPS, включая медиафайлы, игнорируемые выбранным режимом.
| Поле | Тип | Обязательное | По умолчанию | Описание и ограничения |
|---|---|---|---|---|
input.prompt | string | Да | — | Обязателен во всех режимах, даже при наличии только медиареференсов. До 10 000 символов до обрезки; должен содержать непробельные символы. Пример: A cat surfing at sunset |
input.generation_type | string | Нет | text-to-video | text-to-video использует только prompt; image-to-video использует 1–2 изображения; reference-to-video использует референсы в виде картинок, видео и/или аудио. Допустимые значения text-to-video | image-to-video | reference-to-video |
input.image_urls | string[] | При условиях | [] | image-to-video: 1 изображение для первого кадра или 2 упорядоченных изображения для первого и последнего кадров. reference-to-video: до 30 изображений. Игнорируется в text-to-video. Пример: ["https://example.com/first-frame.jpg"] |
input.video_urls | string[] | При условиях | [] | Передаётся только в reference-to-video; до 10 видео общей длительностью не более 30 секунд. Игнорируется в других режимах. Пример: ["https://example.com/source.mp4"] |
input.audio_urls | string[] | При условиях | [] | Передаётся только в reference-to-video; до 10 аудиофайлов общей длительностью не более 30 секунд. Игнорируется в других режимах. Пример: ["https://example.com/music.mp3"] |
input.duration | integer | Нет | 5 | Целочисленная длительность видео на выходе от 4 до 30 секунд. Также принимает значение -1 только в режиме reference-to-video. Используйте его с исходным видео для редактирования; тарификация осуществляется по специальному правилу выше. Допустимые значения -1 | 4–30Пример: 5 |
input.aspect_ratio | string | Нет | adaptive | Соотношение сторон видео на выходе. adaptive позволяет модели самой определить соотношение сторон. Режим image-to-video принимает только значение adaptive; опустите это поле или установите значение adaptive. Допустимые значения 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptiveПример: adaptive |
input.resolution | string | Нет | 720p | Используйте одно из поддерживаемых разрешений на выходе, указанных здесь. Допустимые значения 480p | 720p | 1080pПример: 720p |
input.generate_audio | boolean | Нет | true | Запрос на генерацию синхронизированного аудио. Допустимые значения true | falseПример: true |
input.watermark | boolean | Нет | false | Запрос на добавление водяного знака ИИ на сгенерированное видео. Допустимые значения true | falseПример: false |
input.web_search | boolean | Нет | false | Разрешить поиск в веб-сети, если модель поддерживает эту функцию. Допустимые значения true | falseПример: false |
input.return_last_frame | boolean | Нет | false | Запрос финального кадра. Результат запроса будет содержать data.last_frame_url, когда кадр станет доступен; в противном случае возвращается null. Допустимые значения true | falseПример: true |
Логические поля должны принимать значения true или false в формате JSON, а не строки или числа.
Ответ при создании
HTTP 200 возвращает taskId (строку) и credits (число). Это подтверждает только создание задачи, а не её выполнение. Указанная ниже сумма соответствует 5-секундному видео 720p из раздела «Быстрый старт».
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}Режимы генерации и примеры
Текст в видео
Генерация по текстовому промпту. Медиа-URL в этом режиме не передаются.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
}
}'Первый кадр
Передайте одно изображение в качестве первого кадра, а затем опишите движение в промпте.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first-frame.jpg"
],
"aspect_ratio": "adaptive"
}
}'Первый и последний кадры
Передайте два URL-адреса изображений по порядку: сначала первый кадр, затем последний. В этом примере также запрашивается последний кадр сгенерированного видео.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first-frame.jpg",
"https://example.com/last-frame.jpg"
],
"aspect_ratio": "adaptive",
"return_last_frame": true
}
}'Мультимодальный референс
Сочетание изображений, видео и аудио в качестве референсов. Промпт по-прежнему обязателен. Наличие референсного видео на входе меняет формулу расчета стоимости.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"image_urls": [
"https://example.com/character.jpg"
],
"video_urls": [
"https://example.com/camera.mp4"
],
"audio_urls": [
"https://example.com/ambience.mp3"
],
"aspect_ratio": "adaptive"
}
}'Аудиореференс
Использование аудио в качестве единственного типа референса с обязательным текстовым промптом, описывающим желаемый видеоряд.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"audio_urls": [
"https://example.com/music.mp3"
]
}
}'Редактирование видео
Опишите изменения и предоставьте исходное видео. Установите duration=-1 и используйте соотношение сторон adaptive. Для этого сценария используйте исходный ролик длительностью не менее 4 секунд. Правило тарификации для duration=-1 приведено выше.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
"duration": -1,
"resolution": "720p",
"generation_type": "reference-to-video",
"video_urls": [
"https://example.com/source.mp4"
],
"aspect_ratio": "adaptive"
}
}'Продолжение видео
Опишите, как должно продолжаться исходное видео. Используйте соотношение сторон adaptive и укажите стандартную длительность видео на выходе в пределах поддерживаемого диапазона модели.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
"duration": 8,
"resolution": "720p",
"generation_type": "reference-to-video",
"video_urls": [
"https://example.com/source.mp4"
],
"aspect_ratio": "adaptive"
}
}'Запрос статуса задачи
GET https://api.seevio.ai/v1/tasks/{taskId}Замените ID в примере на taskId, полученный при создании. Запросы возвращают только те задачи, которые принадлежат владельцу API-ключа; недоступные или несуществующие ID возвращают HTTP 404.
Для начала делайте запросы каждые 10–20 секунд, увеличивайте интервал при получении HTTP 429 и прекращайте опрос, когда статус изменится на completed или failed. Для продакшена рекомендуется использовать вебхуки. Каждый пример кода ниже выполняет один запрос.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Статус | Описание и ограничения |
|---|---|
queued | Принято и ожидает отправки на генерацию. |
generating | Выполняется генерация. |
completed | Успешно завершено. Скачайте файлы из data.results до истечения срока их хранения. |
failed | Ошибка выполнения. Изучите failed_reason и billing_status. |
| Поле | Тип | Описание и ограничения |
|---|---|---|
id | string | Идентификатор задачи. Соответствует taskId из ответа на запрос создания. |
created_at | number | Время создания задачи в формате Unix timestamp (в секундах). |
model | string | ID публичной модели, использованной для этой задачи. |
billing_status | string | Статус биллинга: reserved, charged, refunded или refund_failed. |
credits | number | Кредиты, зарезервированные под задачу. Это значение сохраняется и после возврата средств; проверяйте billing_status для определения итогового списания. |
failed_reason | string | null | Причина ошибки для невыполненных задач; в противном случае null. Ответы на запросы по ошибочным задачам не содержат объект data. |
data | object | Присутствует в успешных запросах статуса задачи. Содержит результат и детали обработки. |
data.results | string[] | Массив URL-адресов видео. Пуст до завершения генерации или после истечения срока хранения видео. |
data.video_expires_at | string | null | Срок хранения видео в формате ISO 8601 (или null, если видео ещё не готово). Сохраните результат до наступления этого времени. |
data.last_frame_url | string | null | URL последнего кадра, если он был запрошен и доступен, в противном случае null. |
data.processing_time | number | null | Время обработки на стороне провайдера в секундах, если доступно, в противном случае null. |
Успешное выполнение: ответ на запрос с готовым видео
Когда запрос возвращает status=completed, генерация видео завершена. Ссылки на видеофайлы можно получить из data.results — скачайте их до наступления времени, указанного в data.video_expires_at. Значение billing_status=charged означает, что зарезервированные кредиты были списаны.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Ошибка выполнения: ответ на запрос со сведениями об ошибке и оплате
Если запрос возвращает status=failed, генерация завершилась неудачно. Причину ошибки можно узнать в failed_reason, а статус возврата средств — в billing_status. В данном примере значение refunded означает, что кредиты были возвращены на баланс. При этом в credits отображается изначально зарезервированная сумма, а блок data в ответе отсутствует.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}Вебхуки
Укажите callback_url в запросе на создание задачи, чтобы получать POST-запросы с JSON-телом при завершении или ошибке задачи. Возвращайте ответ со статусом 2xx в течение 15 секунд. В случае неудачной доставки попытки повторяются; обрабатывайте повторные доставки идемпотентно по ID задачи.
Ваша конечная точка (endpoint) для обратного вызова должна принимать POST-запросы с телом запроса в формате JSON (Content-Type: application/json).
Создание задачи с вебхуком
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
},
"callback_url": "https://example.com/webhooks/seevio"
}'Полезная нагрузка вебхука отличается от ответа на запрос статуса задачи: в ней отсутствуют billing_status и credits; детали ошибки находятся в data.failed_reason и data.credits_refunded. Поле created_at в вебхуке указывает время создания события в формате Unix timestamp (в секундах).
Задача выполнена: структура успешного ответа (callback payload)
При успешной генерации вебхук возвращает статус status=completed. Используйте id для идентификации задачи, а массив data.results — для получения URL-адресов видео. Скачайте и сохраните результаты до наступления времени, указанного в data.video_expires_at.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Ошибка выполнения задачи: структура ответа при сбое
Если генерация завершилась ошибкой, вебхук возвращает статус status=failed. Используйте id для идентификации задачи, data.failed_reason — для выяснения причины сбоя, а data.credits_refunded — для проверки количества возвращенных кредитов.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}Пример обработчика (receiver)
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrls = callbackData.data.results;
// Save the video URLs and mark this task as completed in your application.
console.log(callbackData.id, videoUrls);
}
if (callbackData.status === "failed") {
const { failed_reason, credits_refunded } = callbackData.data;
// Record the failure reason and refunded credits for this task.
console.error(callbackData.id, failed_reason, credits_refunded);
}
return new Response(null, { status: 200 });
}В этом примере для Next.js показано, как считывать JSON-тело вебхука и обрабатывать успешно выполненные и проваленные задачи. Для интеграции в продакшн добавьте сохранение данных в БД и дедупликацию по task-ID, а ресурсоемкие фоновые задачи отправляйте в очередь перед отправкой ответа на вебхук.
Требования и ограничения для медиа
- Все URL-адреса медиафайлов и вебхуков должны использовать протокол HTTPS и быть публично доступными. Избегайте localhost, приватных IP-адресов и файлов, требующих cookie или авторизации. URL-адреса референсных видео и аудио должны вести непосредственно на читаемые файлы.
- В режиме reference-to-video предоставьте как минимум один референс. Всего должно быть не более 30 изображений, 10 видео, 10 аудиофайлов и не более 50 материалов суммарно. Общая длительность видео и аудио не должна превышать 30 секунд для каждого типа медиа.
- Режим text-to-video игнорирует любые медиареференсы. Режим image-to-video использует только изображения первого/последнего кадров, игнорируя видео и аудио. Для объединения различных типов медиа используйте режим reference-to-video.
- Каждый референсный видео- и аудиофайл должен длиться от 2 до 30 секунд. Для примеров редактирования видео используйте исходные клипы длительностью не менее 4 секунд.
Требования к изображениям
- Размер каждого файла не должен превышать 30 МБ.
- Поддерживаемые форматы: jpeg, png, webp, bmp, tiff, gif.
- Соотношение сторон (ширина ÷ высота): от 0,4 до 2,5 включительно.
- Ширина и высота должны быть в пределах от 300 до 6000 пикселей включительно.
Требования к видео
- Поддерживаемые форматы: mp4, mov.
- Размер каждого файла не должен превышать 100 МБ.
- Частота кадров: от 24 до 60 кадров/с включительно.
- Соотношение сторон (ширина ÷ высота): от 0,4 до 2,5 включительно.
- Общее количество пикселей (ширина × высота): от 407 696 до 8 295 044 включительно. Например: 614 × 664 = 407 696 и 3326 × 2494 = 8 295 044. Это лишь примеры расчетов, а не фиксированные требования к разрешению.
Требования к аудио
- Поддерживаемые форматы: wav, mp3.
- Размер каждого файла не должен превышать 15 МБ.
Ошибки
Ошибки HTTP возвращают объект error с полями code и message. Успешно принятая задача всё ещё может завершиться ошибкой позже; запрашивайте статус задачи или обрабатывайте вебхук об ошибке.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Поле | Что делать |
|---|---|---|
| 400 | invalid_request | Исправьте JSON, добавьте отсутствующий промпт, скорректируйте диапазоны параметров или проверьте медиа-URL перед повторной отправкой. |
| 401 | invalid_api_key | Проверьте Bearer-токен и активность вашего API-ключа. |
| 402 | insufficient_credits | Пополните баланс кредитов или снизьте стоимость задачи. Ответ может содержать требуемую и доступную суммы. |
| 403 | forbidden | Проверьте ограничения на уровне аккаунта, указанные в тексте ошибки. |
| 404 | not_found | Проверьте ID задачи и убедитесь, что ключ принадлежит пользователю, создавшему задачу. |
| 429 | rate_limited | Подождите указанный в Retry-After интервал перед повторным запросом. |
| 500 | internal_error | Изучите сообщение об ошибке и логи API. Повторяйте запросы с осторожностью; повторная отправка запроса на создание может создать ещё одну тарифицируемую задачу. |
Лимиты запросов
Создание задач: по умолчанию для каждого API-ключа разрешено до 100 запросов в минуту. Индивидуальные лимиты запросов на данный момент не поддерживаются.
Получение информации о задачах: по умолчанию для каждого API-ключа разрешено до 120 запросов в минуту. Запросы на получение информации и запросы на создание задач учитываются раздельно.