Video
Seedance 2.0
Генерируйте видео с Seedance 2.0 через официальный API задач ModelArk: видео по тексту, первый и последний кадр, а также референсы из изображений, видео и аудио, от 480p до 4K.
Seedance 2.0 — модель генерации видео от ByteDance (Dreamina Seedance 2.0). Отправьте официальное тело задачи ModelArk на POST /v1/videos/generations, сохраните возвращённый идентификатор задачи и получите готовое видео с помощью GET /v1/tasks/{id}. Изображения, видео и аудио передаются в content как URL.
ID моделей
| ID модели | Разрешения | Примечания |
|---|---|---|
dreamina-seedance-2-0 | 480p, 720p, 1080p, 4K | Полная модель |
dreamina-seedance-2-0-fast | 480p, 720p | Более низкая цена за секунду |
dreamina-seedance-2-0-mini | 480p, 720p | Самая низкая цена за секунду |
Все три ID принимают одинаковые параметры. Актуальные цены — на странице модели.
Краткий пример
curl https://api.seedrouter.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0",
"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/videos/generations| Заголовок | Значение |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Тело запроса — официальный запрос ModelArk «создание задачи генерации видео»; это та же конечная точка, которую используют все видеомодели SeedRouter. В ответе приходит новая задача (id, status: "processing"), а не готовое видео. Храните API-ключи в серверном коде.
Параметры
| Имя | Тип | Обязательный | По умолчанию | Примечания |
|---|---|---|---|---|
model | string | Да | — | Один из трёх ID моделей, указанных выше. |
content | object[] | Да | — | Промпт и медиа; см. ниже. |
resolution | enum | Нет | 720p | 480p, 720p, 1080p, 4k; ID Fast и Mini принимают только 480p и 720p. |
ratio | enum | Нет | adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. |
duration | integer | Нет | 5 | От 4 до 15 секунд или -1, чтобы длительность выбрала модель. |
generate_audio | boolean | Нет | true | Генерировать звук вместе с видео. |
watermark | boolean | Нет | false | Добавить водяной знак. |
return_last_frame | boolean | Нет | false | Дополнительно вернуть финальный кадр как URL изображения. |
execution_expires_after | integer | Нет | 172800 | От 3600 до 259200 секунд. Задача, не завершённая к этому сроку, завершается с ошибкой task_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 | До 9 референсных изображений. |
| Видео | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | До 3. |
| Аудио | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | До 3. Нужно референсное изображение или видео. |
Неизвестные поля отклоняются. Не поддерживаются: seed, callback_url (вместо этого опрашивайте задачу), draft и draft_task, tools, а также frames и camera_fixed, доступные только в 1.x, и output_format и omni_reference_task_type (только Seedance 2.5). Задачи нельзя отменить или удалить.
Режимы
Режим определяется элементами content; параметра режима нет.
| Режим | content |
|---|---|
| Видео по тексту | один текстовый элемент |
| Первый кадр | текст (необязательно) + одно изображение с ролью first_frame или одно изображение без роли |
| Первый и последний кадр | текст (необязательно) + одно изображение first_frame + одно изображение last_frame |
| Мультимодальные референсы | текст + любое сочетание элементов reference_image, reference_video и reference_audio |
Режимы с первым кадром нельзя сочетать с референсными элементами. Если изображений несколько или есть другие медиа, у каждого изображения должна быть role.
Пример с референсами
curl https://api.seedrouter.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0",
"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–9 референсных изображений |
| Видео | MP4, MOV (H.264 или H.265) | 2–15 секунд каждое, не более 3, суммарно не более 15 секунд; не более 200 МБ; 24–60 FPS; ширина и высота 300–6000 px; соотношение сторон 0,4–2,5; 407 696–8 295 044 пикселей (ширина × высота) |
| Аудио | WAV, MP3 | 2–15 секунд каждое, не более 3, суммарно не более 15 секунд; нужно референсное изображение или видео; не более 15 МБ |
Референсные изображения и видео с реальными человеческими лицами модель не поддерживает.
Медиа проверяются при запуске задачи, до начала генерации. Задача, медиа которой нарушают одно из этих ограничений, завершается со статусом failed, ошибкой invalid_request_error и сообщением с указанием правила, например The request was rejected: content reference videos must total at most 15 seconds., и не тарифицируется. Файл, который на этом этапе не удаётся прочитать, передаётся модели, и она принимает или отклоняет его; неуспешная задача не тарифицируется в любом случае.
Факторы стоимости
Актуальные тарифы смотрите в разделе цен модели. Seedance 2.0 тарифицирует видеотокены — официальную единицу:
video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024Тариф за миллион токенов зависит от разрешения результата и от того, есть ли в запросе референсное видео; для запроса с референсным видео ко всем его токенам применяется более низкий тариф. Текстовые, графические и аудиовходы не тарифицируются. При 16:9 одна секунда — это 10 044 токена в 480p (864×496), 21 600 в 720p, 48 600 в 1080p и 194 400 в 4K.
Списание определяется токенами, о которых сообщает готовое видео (output.usage.completion_tokens), поэтому при duration: -1 оплачивается фактически сгенерированная длительность. Отрендеренные ролики немного длиннее запрошенного: запрос на 5 секунд в 720p и 16:9 даёт 121 кадр и сообщает 108 900 токенов, а не 108 000. Итоговые списания смотрите в истории использования своей учётной записи. Неуспешные задачи не тарифицируются.
Схема вывода
При отправке возвращается новая задача:
{"id": "task_...", "model": "dreamina-seedance-2-0", "status": "processing", "created_at": 1790321515}Получение задачи
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Опрашивайте каждые 10–20 секунд, пока status не станет completed или failed. Сетевой тайм-аут во время опроса не означает, что генерация завершилась сбоем: сохраните идентификатор задачи и продолжите проверку. Не создавайте другую задачу, чтобы узнать ход выполнения.
Полный пример опроса
Выполните этот код после приведённого выше примера отправки на Python.
import time
deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "completed":
print(task["output"]["video_url"])
break
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(15)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Completed task
{
"id": "task_...",
"model": "dreamina-seedance-2-0",
"status": "completed",
"created_at": 1790321515,
"finished_at": 1790321652,
"output": {
"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",
"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
}
}| Поле | Значение |
|---|---|
id | Сохраните этот идентификатор для последующих запросов. |
status | processing, completed или failed. |
output.video_url | Сгенерированное видео. |
output.last_frame_url | Финальный кадр, если return_last_frame равно true. |
output.content | Те же URL в официальной форме ModelArk. |
output.usage.completion_tokens | Видеотокены готового видео; тарифицируемое количество. |
output.duration, output.resolution, output.ratio, output.framespersecond, output.seed | Фактические параметры рендера; seed — значение, выбранное моделью. |
created_at, finished_at | Метки времени Unix в секундах. |
error | {"code", "message"} у неуспешной задачи. |
URL видео размещены в нашем хранилище. Сохраняйте файл в собственное хранилище, если нужна долговременная копия.
Ошибки
Запросы, отклонённые до создания задачи, возвращают HTTP-ошибку вместе с объектом error и не тарифицируются. Задача, которая завершилась сбоем уже после приёма, при запросе возвращает HTTP 200 с status: "failed" и объектом error. Результат, заблокированный фильтрацией контента, завершается ошибкой content_policy_violation; задача, которая выполняется дольше execution_expires_after, завершается с task_expired.
Коды, HTTP-статусы и рекомендации по повторным попыткам приведены в общем каталоге ошибок.
{
"id": "task_...",
"model": "dreamina-seedance-2-0",
"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следующей задачи.
