Seedance 2.5
Генерируйте, редактируйте и продлевайте видео с Seedance 2.5 через официальный API задач ModelArk: до 30 секунд в 1080p, до 30 референсных изображений, 10 видео и 10 аудио.
Seedance 2.5 — новейшая модель генерации видео от ByteDance (Dreamina Seedance 2.5). Отправьте официальное тело задачи ModelArk, сохраните возвращённый идентификатор задачи и получите готовое видео из задачи. Изображения, видео и аудио передаются в content как URL.
ID моделей
| ID модели | Разрешения | Длительность |
|---|---|---|
dreamina-seedance-2-5 | 480p, 720p, 1080p | От 4 до 30 секунд или автоматически |
Актуальные цены — на странице модели.
Краткий пример
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-5",
"content": [{"type": "text", "text": "A red paper boat drifts across a calm pond at sunrise, slow dolly-in"}],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generate_audio": true
}'Конечная точка
POST https://api.seedrouter.ai/v1/contents/generations/tasks| Заголовок | Значение |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Тело запроса — официальный запрос ModelArk «создание задачи генерации видео». Если вы уже вызываете ModelArk, измените только базовый URL на https://api.seedrouter.ai/v1 и API-ключ. В ответе приходит {"id": "task_..."}, а не готовое видео. Храните API-ключи в серверном коде.
Параметры
| Имя | Тип | Обязательный | По умолчанию | Примечания |
|---|---|---|---|---|
model | string | Да | — | dreamina-seedance-2-5. |
content | object[] | Да | — | Промпт и медиа; см. ниже. |
resolution | enum | Нет | 720p | 480p, 720p, 1080p. |
ratio | enum | Нет | adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. С первым кадром, а также для edit и extend должно быть adaptive (или не передаваться). |
duration | integer | Нет | -1 | От 4 до 30 секунд или -1, чтобы длительность выбрала модель. Для edit должно быть -1. |
generate_audio | boolean | Нет | true | Генерировать звук вместе с видео. |
watermark | boolean | Нет | false | Добавить водяной знак. |
return_last_frame | boolean | Нет | false | Дополнительно вернуть финальный кадр как URL изображения. |
output_format | enum | Нет | mp4 | mp4 или mov. |
omni_reference_task_type | enum | Нет | auto | auto, reference, edit, extend. Для edit и extend нужно референсное видео. |
execution_expires_after | integer | Нет | 172800 | От 3600 до 259200 секунд. Задача, не завершённая к этому сроку, переходит в expired и не тарифицируется. |
priority | integer | Нет | 0 | От 0 до 9. |
safety_identifier | string | Нет | — | От 1 до 64 символов, идентифицирующих вашего конечного пользователя. Подойдёт хеш. |
service_tier | enum | Нет | default | Только default. |
content_filter | boolean | Нет | true | Расширение SeedRouter. false отключает фильтрацию контента для этого запроса. |
Элементы content
| Элемент | Структура | Роль | Ограничение |
|---|---|---|---|
| Текст | {"type": "text", "text": "..."} | — | Один. |
| Изображение | {"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."} | first_frame, last_frame, reference_image | До 30 референсных изображений. |
| Видео | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | До 10. |
| Аудио | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | До 10. |
Неизвестные поля отклоняются. Не поддерживаются: seed, callback_url (вместо этого опрашивайте задачу), draft и draft_task, tools, а также frames и camera_fixed, доступные только в 1.x. Задачи нельзя отменить или удалить.
Режимы
Режим определяется элементами content; параметра режима нет.
| Режим | content |
|---|---|
| Видео по тексту | один текстовый элемент |
| Первый кадр | текст (необязательно) + одно изображение с ролью first_frame или одно изображение без роли |
| Первый и последний кадр | текст (необязательно) + одно изображение first_frame + одно изображение last_frame |
| Мультимодальные референсы | текст + любое сочетание элементов reference_image, reference_video и reference_audio |
| Редактирование видео | текст + один reference_video с omni_reference_task_type: "edit" |
| Продление видео | текст + один reference_video с omni_reference_task_type: "extend" |
Режимы с первым кадром нельзя сочетать с референсными элементами. Если изображений несколько или есть другие медиа, у каждого изображения должна быть role.
Пример с референсами
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-5",
"content": [
{"type": "text", "text": "The character from the image walks through the market in the video, same camera move"},
{"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"},
{"type": "video_url", "video_url": {"url": "https://example.com/market.mp4"}, "role": "reference_video"}
],
"ratio": "adaptive",
"duration": 8
}'Замените примеры URL на собственные доступные файлы.
Медиавходы
Этот API принимает только ссылки по URL. Base64, ссылки data:, идентификаторы asset:// и multipart-загрузки не принимаются. Playground сначала загружает выбранные файлы в хранилище и затем отправляет их URL.
Медиа должны быть публичными HTTP(S)-ссылками и соответствовать официальным ограничениям модели:
| Медиа | Форматы | Ограничения |
|---|---|---|
| Изображение | JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIF | Менее 30 МБ; ширина и высота 300–6000 px; соотношение сторон (ширина / высота) 0,4–2,5; 1–30 референсных изображений |
| Видео | MP4, MOV (H.264 или H.265) | 2–30 секунд каждое (4–30 секунд для edit), не более 10, суммарно не более 30 секунд; не более 200 МБ; 24–60 FPS; ширина и высота 300–6000 px; соотношение сторон 0,4–2,5; 407 696–8 295 044 пикселей (ширина × высота) |
| Аудио | WAV, MP3 | 2–30 секунд каждое, не более 10, суммарно не более 30 секунд; не более 15 МБ |
Референсные изображения и видео с реальными человеческими лицами модель не поддерживает.
Медиа проверяются при запуске задачи, до начала генерации. Задача, медиа которой нарушают одно из этих ограничений, завершается со статусом failed, ошибкой invalid_request_error и сообщением с указанием правила, например The request was rejected: content reference videos must total at most 15 seconds., и не тарифицируется. Файл, который на этом этапе не удаётся прочитать, передаётся модели, и она принимает или отклоняет его; неуспешная задача не тарифицируется в любом случае.
Факторы стоимости
Актуальные тарифы смотрите в разделе цен модели. Seedance 2.5 тарифицирует видеотокены — официальную единицу:
video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024Тариф за миллион токенов зависит от разрешения результата и от того, есть ли в запросе референсное видео; для запроса с референсным видео ко всем его токенам применяется более низкий тариф. Текстовые, графические и аудиовходы не тарифицируются. При 16:9 одна секунда — это 9 607,5 токена в 480p (854×480), 21 600 в 720p, 48 600 в 1080p.
Списание определяется токенами, о которых сообщает готовое видео (usage.completion_tokens), поэтому при duration: -1 оплачивается фактически сгенерированная длительность. Отрендеренные ролики немного длиннее запрошенного: запрос на 5 секунд в 720p и 16:9 даёт 121 кадр и сообщает 108 900 токенов, а не 108 000. Итоговые списания смотрите в истории использования своей учётной записи. Неуспешные и истёкшие задачи не тарифицируются.
Схема вывода
При отправке возвращается идентификатор задачи:
{"id": "task_..."}Получение задачи
curl https://api.seedrouter.ai/v1/contents/generations/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Опрашивайте каждые 10–20 секунд, пока status не станет succeeded, failed или expired. Сетевой тайм-аут во время опроса не означает, что генерация завершилась сбоем: сохраните идентификатор задачи и продолжите проверку. Не создавайте другую задачу, чтобы узнать ход выполнения.
Полный пример опроса
Выполните этот код после приведённого выше примера отправки на Python.
import time
deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/contents/generations/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "succeeded":
print(task["content"]["video_url"])
break
if task["status"] in ("failed", "expired"):
raise RuntimeError(task["error"]["message"])
time.sleep(15)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Успешная задача
{
"id": "task_...",
"model": "dreamina-seedance-2-5",
"status": "succeeded",
"content": {
"video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4",
"last_frame_url": "https://static.seedrouter.ai/media/tasks/task_example/last_frame/0.jpg"
},
"usage": {"completion_tokens": 108900, "total_tokens": 108900},
"seed": 42,
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"framespersecond": 24,
"generate_audio": true,
"draft": false,
"output_format": "mp4",
"service_tier": "default",
"execution_expires_after": 172800,
"priority": 0,
"created_at": 1790321515,
"updated_at": 1790321652
}| Поле | Значение |
|---|---|
id | Сохраните этот идентификатор для последующих запросов. |
status | queued, running, succeeded, failed или expired. |
content.video_url | Сгенерированное видео. |
content.last_frame_url | Финальный кадр, если return_last_frame равно true. |
usage.completion_tokens | Видеотокены готового видео; тарифицируемое количество. |
duration, resolution, ratio, framespersecond, seed | Фактические параметры рендера; seed — значение, выбранное моделью. |
created_at, updated_at | Метки времени Unix в секундах. |
error | {"code", "message"} у неуспешной или истёкшей задачи. |
URL видео размещены в нашем хранилище. Сохраняйте файл в собственное хранилище, если нужна долговременная копия.
Список задач
curl "https://api.seedrouter.ai/v1/contents/generations/tasks?page_num=1&page_size=20&filter.status=succeeded" \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Возвращает {"total": N, "items": [...]} с объектами задач за последние 7 дней, сначала новые. page_num и page_size — от 1 до 500 (по умолчанию 1 и 20). Фильтры: filter.status, filter.model, filter.task_ids (можно повторять) и filter.service_tier.
Ошибки
Запросы, отклонённые до создания задачи, возвращают HTTP-ошибку вместе с объектом error и не тарифицируются. Задача, которая завершилась сбоем уже после приёма, при запросе возвращает HTTP 200 с status: "failed" (или "expired") и объектом error. Результат, заблокированный фильтрацией контента, завершается ошибкой content_policy_violation; задача, которая выполняется дольше execution_expires_after, завершается как expired с task_expired.
Коды, HTTP-статусы и рекомендации по повторным попыткам приведены в общем каталоге ошибок.
{
"id": "task_...",
"model": "dreamina-seedance-2-5",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}Если тайм-аут произошёл при самой отправке, сначала проверьте список задач и только потом отправляйте повторно: первый запрос мог быть уже принят.
Советы
- Описывайте объект, действие, движение камеры и освещение полными предложениями.
- Делайте черновик в 480p с коротким
duration, а затем рендерьте выбранный вариант в более высоком разрешении. - Склеивайте сцены с помощью
return_last_frame: используйте возвращённый кадр какfirst_frameследующей задачи. - Чтобы отредактировать отснятый материал, задайте
omni_reference_task_typeравнымeditи опишите только то, что должно измениться.
