Seedance 2.0 Mini API для генерации видео
Параметры Seedance 2.0 Mini, референсные медиа, асинхронные задачи, аутентифицированные загрузки и биллинг по длительности на APIMaster.
Генерация видео Seedance 2.0 Mini
Используйте seedance-2.0-mini для генерации видео из текста, из изображения, для создания первого/последнего кадра, а также для работы с видео- или аудио-референсами. Mini поддерживает 480p и 720p, с длительностью выходного видео от 4 до 15 секунд.
Для генерации первого/последнего кадра явно задайте
aspect_ratio: "adaptive". Референсное аудио должно сопровождаться изображением или видео. Храните ваш APIMaster API-ключ на вашем сервере.
Эндпоинты и аутентификация
Базовый URL: https://apimaster.ai/v1. Передавайте Authorization: Bearer YOUR_API_KEY при отправке запроса, запросе статуса и загрузке.
| Операция | Метод и путь |
|---|---|
| Создание видео | POST /v1/videos/generations |
| Запрос совместимого результата | GET /v1/video/generations/{task_id} |
| Запрос результата в стиле OpenAI | GET /v1/videos/{task_id} |
| Загрузка видео | GET /v1/videos/{task_id}/content |
| Загрузка запрошенного последнего кадра | GET /v1/videos/{task_id}/last-frame |
Используйте публичный task_id, возвращаемый APIMaster. Задачи генерации видео и задачи проверки медиа — это разные ресурсы: для видео используйте указанные выше эндпоинты запроса видео. Принятый запрос создает одну асинхронную задачу; успешный HTTP-ответ не означает, что видео готово.
Параметры
| Поле | Тип | Обязательно / по умолчанию | Описание |
|---|---|---|---|
model |
string | Обязательно | seedance-2.0-mini |
prompt |
string | Обязательно | APIMaster не накладывает ограничений на длину промпта, специфичных для модели. Опишите субъект, движение, сцену, камеру и желаемое аудио; краткие промпты легче контролировать. |
duration |
integer | 5 |
Длина выходного видео, 4–15 секунд. -1 не поддерживается. |
resolution |
string | 720p |
480p или 720p; 1080p и 4k не поддерживаются. |
aspect_ratio |
string | 16:9 |
16:9, 9:16, 1:1, 4:3, 3:4, 21:9 или adaptive. |
ratio |
string | То же, что и aspect_ratio |
Псевдоним APIMaster. Если присутствуют оба, их значения должны совпадать. |
size |
string | То же, что и aspect_ratio |
Соотношение сторон, например 16:9 или adaptive. Предпочтительнее использовать aspect_ratio и resolution для указания двух измерений отдельно. Конфликтующие спецификации возвращают 400. |
seed |
integer | Не указывается | Управляет вариативностью; совпадающие сиды не гарантируют идентичный результат. |
generate_audio |
boolean | true |
Генерировать сопровождающее аудио; используйте false для вывода без звука. |
image_urls |
string[] | Не указывается | До 9 референсных изображений. Публичные URL изображений или одобренные APIMaster ID asset://. |
image_with_roles |
object[] | Не указывается | Объекты изображений с url и role; не могут появляться вместе с image_urls. См. правила ролей ниже. |
video_urls |
string[] | Не указывается | До 3 референсных видео, с общей биллинговой длительностью входных материалов не более 15 секунд. См. требования к материалам. |
audio_urls |
string[] | Не указывается | До 3 референсных аудиофайлов, общая длительность не более 15 секунд. Требует наличия референсных изображений или видео. |
return_last_frame |
boolean | false |
При успешном завершении возвращать аутентифицированный APIMaster URL для загрузки последнего кадра, если результат включает последний кадр. |
nsfw_check |
boolean | false |
Запрашивать модерацию текстового/изобразительного контента перед генерацией. Видео и аудио не включаются в эту проверку модерации. |
tools |
object[] | Не указывается | Объявление инструмента поиска: [{"type":"web_search"}]. |
Генерация черновиков и улучшение черновиков доступны только в Seedance 2.5. Не передавайте draft: true или draft_task_id в эту модель.
Справочные материалы
Предоставляйте публично доступные HTTPS-URL или утвержденные ID из вашей медиатеки APIMaster. Файлы, находящиеся за страницами с авторизацией или требующие ваши собственные заголовки авторизации, не могут быть получены. Успешная загрузка изображения не подразумевает одобрения контента или его соответствия всем требованиям модели.
| Материал | Требования |
|---|---|
| Справочные изображения | До 9; используйте читаемые изображения в формате RGB JPEG/PNG. Конечная точка загрузки изображений APIMaster имеет собственное ограничение в 20 MiB и принимает JPEG, PNG, GIF и WebP. |
| Справочные видео | До 3; видео MP4/MOV, H.264/H.265; аудио AAC/MP3 при наличии. Используйте видео длительностью от 480p до 720p. Общая длительность справочных материалов должна укладываться в 15 оплачиваемых секунд. APIMaster проверяет доступную длительность MP4/MOV перед списанием средств; длительности входных клипов округляются вверх до целых секунд для этой проверки и биллинга. |
| Справочное аудио | До 3; WAV или MP3, не более 20 MB на файл, общая длительность не более 15 секунд. Всегда сопровождайте изображением или видео-справочником. |
Используйте четкие изображения с достаточной детализацией, избегайте поврежденных или неполных файлов, а также следите за тем, чтобы движение в справочном видео соответствовало вашему промпту. Медиа могут не пройти асинхронную проверку формата или содержания, даже если отправка была принята.
Роли изображений
role |
Значение |
|---|---|
first_frame |
Начальный кадр; не более одного |
last_frame |
Конечный кадр; не более одного, и требует наличия первого кадра |
reference_image |
Справочное изображение, включая утвержденные ассеты персонажей |
Для задач с первым/последним кадром установите aspect_ratio в значение adaptive и опустите video_urls и audio_urls. Используйте image_with_roles для явных ролей; не передавайте также image_urls.
{
"model": "seedance-2.0-mini",
"prompt": "A paper boat drifts gently from the starting composition to the ending composition",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "adaptive",
"image_with_roles": [
{"url": "https://your-storage.example/start.png", "role": "first_frame"},
{"url": "https://your-storage.example/end.png", "role": "last_frame"}
],
"generate_audio": false
}
Загрузки и медиатека
Загрузите локальное изображение с помощью POST /v1/uploads/images, используя multipart-поле file и авторизацию Bearer. Возвращенный верхнеуровневый url может быть использован как публичный входной образ.
curl "https://apimaster.ai/v1/uploads/images" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@reference.png"
Для повторно используемых материалов или материалов персонажей создайте группу с помощью POST /v1/seedance2/private-avatar/groups, отправьте материалы с помощью POST /v1/seedance2/private-avatar/assets, запросите статус проверки с помощью GET /v1/tasks/{asset_task_id} и используйте только ассеты со статусом Active в качестве asset://{asset_id}. Эти ресурсы принадлежат вашему аккаунту. Явно указывайте model: "seedance-2.0-mini". ID ассетов с другой платформы или из другого аккаунта здесь использовать нельзя.
См. рабочий процесс медиатеки для создания, отправки, проверки, частичных сбоев и удаления. Конечные точки загрузки и управления ассетами являются общими; лимиты генерации на этой странице применяются к Mini. Неудачная проверка может не возвращать детальной причины; используйте четкий, соответствующий требованиям материал в поддерживаемом формате и отправьте новую проверку. Не создавайте задачу повторно, пока существующая проверка еще обрабатывается.
Отправка видео
curl "https://apimaster.ai/v1/videos/generations" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model":"seedance-2.0-mini",
"prompt":"A small paper boat on calm water at sunrise, gentle tracking shot",
"duration":5,
"resolution":"720p",
"aspect_ratio":"16:9",
"generate_audio":true,
"return_last_frame":true
}'
Ответ на создание:
{"code":200,"data":[{"status":"submitted","task_id":"task_PUBLIC_VIDEO_ID"}]}
Таймаут отправки неоднозначен: запрос мог быть принят. Проверьте историю ваших задач перед повторной отправкой; еще одна успешная отправка создаст отдельную оплачиваемую задачу.
Видео- и аудио-справочники
{
"model": "seedance-2.0-mini",
"prompt": "Follow the reference motion and keep the scene consistent with the image",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "adaptive",
"image_urls": ["https://your-storage.example/reference.png"],
"video_urls": ["https://your-storage.example/reference.mp4"],
"audio_urls": ["https://your-storage.example/reference.mp3"],
"generate_audio": true
}
Запрос и загрузка
Опрашивайте каждые 3–5 секунд. Остановитесь при успехе или неудаче.
curl "https://apimaster.ai/v1/video/generations/task_PUBLIC_VIDEO_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
Успешный запрос в совместимом формате:
{
"code":"success",
"message":"",
"data":{
"error":null,
"format":"mp4",
"metadata":null,
"status":"succeeded",
"task_id":"task_PUBLIC_VIDEO_ID",
"url":"https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID/content",
"actual_time":138,
"last_frame_url":"https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID/last-frame"
}
}
Пример включает опциональные поля завершения. actual_time — это прошедшее время в секундах от отправки до завершения, а не оплачиваемая длительность видео. last_frame_url опускается, если последний кадр не был запрошен или недоступен. Неудачные задачи не включают поля времени выполнения и последнего кадра, которые присутствуют только при успехе.
Запрос в стиле OpenAI:
curl "https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
| Значение | Совместимый data.status |
Стиль OpenAI status |
|---|---|---|
| Ожидание | queued |
queued |
| Генерация | processing |
in_progress |
| Успех | succeeded |
completed |
| Неудача | failed |
failed |
Объект в стиле OpenAI использует id для публичного идентификатора задачи и url для URL-адреса загрузки видео. Опциональные поля actual_time и last_frame_url появляются на верхнем уровне. При неудаче читайте error.message в соответствующем объекте результата. Ответы не включают денежные поля.
Загружайте с использованием API-ключа того же аккаунта. Открытие URL результата без авторизации недостаточно. Сохраняйте вывод своевременно.
curl -L "https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID/content" \
-H "Authorization: Bearer YOUR_API_KEY" -o output.mp4
curl -L "https://apimaster.ai/v1/videos/task_PUBLIC_VIDEO_ID/last-frame" \
-H "Authorization: Bearer YOUR_API_KEY" -o last-frame.jpg
Полный рабочий процесс на Python
import os
import time
import requests
base = "https://apimaster.ai/v1"
headers = {"Authorization": f"Bearer {os.environ['APIMASTER_API_KEY']}"}
response = requests.post(base + "/videos/generations", headers=headers, json={
"model": "seedance-2.0-mini",
"prompt": "A small paper boat on calm water at sunrise",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": True,
"return_last_frame": True,
}, timeout=90)
response.raise_for_status()
task_id = response.json()["data"][0]["task_id"]
for _ in range(240):
response = requests.get(base + "/video/generations/" + task_id,
headers=headers, timeout=30)
response.raise_for_status()
task = response.json()["data"]
if task["status"] == "failed":
raise RuntimeError((task.get("error") or {}).get("message", "Video failed"))
if task["status"] == "succeeded":
print("Elapsed seconds:", task.get("actual_time"))
for field, filename in [("url", "output.mp4"), ("last_frame_url", "last-frame.jpg")]:
if task.get(field):
with requests.get(task[field], headers=headers, stream=True, timeout=120) as result:
result.raise_for_status()
with open(filename, "wb") as out:
for chunk in result.iter_content(1024 * 1024):
out.write(chunk)
break
time.sleep(5)
else:
raise TimeoutError("Task still processing; query the same task_id later")
Биллинг по длительности
Существует четыре тарифа: 480P, 720P, 480P-input и 720P-input. Тариф с пометкой "загруженные видео" означает, что запрос содержит входные данные в виде референсного видео. Выбирайте входной тариф для запрошенного разрешения выходного видео, даже если также присутствуют референсные изображения или аудио.
- Без референсного видео: секунды сгенерированного видео × цена за единицу для соответствующего разрешения.
- С референсным видео: (общая длительность референсного видео в секундах + секунды сгенерированного видео) × цена за единицу для соответствующего входного тарифа.
- Базовая цена за единицу, указанная в конфигурации, умножается на применимые коэффициенты канала и аккаунта/группы для получения итоговой цены за единицу. Проверьте карточку модели и записи потребления в кошельке, чтобы узнать применимую цену.
Например, референсное видео длительностью 4 секунд и выходное видео длительностью 5 секунд используют 9 биллинговых секунд по входному тарифу. Цена за единицу входного тарифа может отличаться от цены обычного тарифа; не рассчитывайте только длительность выходного видео и не применяйте обычный тариф к референсным видео. Изображения и аудио не добавляют секунды референсного видео. Генерируемое аудио не вводит отдельный тариф для звука/тишины для этих четырёх настроенных цен.
При отправке задачи резервируется запрошенная длительность выходного видео, а также проверенная длительность входного видео, если оно присутствует. Если длительность выходного видео не указана, резервируется 5 секунд выходного видео. Задача сохраняет тариф, действовавший на момент её отправки; при завершении происходит сверка с фактической длительностью. При неудачной генерации плата за видео-задачу возвращается.
Ошибки и устранение неполадок
Некорректные запросы возвращают ошибку HTTP. Читайте как JSON-сообщение об ошибке, так и код состояния. Проверка параметров использует обёртку ошибок APIMaster, например:
{"code":"invalid_request","message":"First/last-frame tasks require adaptive aspect_ratio","data":null}
| Проблема | Действие |
|---|---|
| Неподдерживаемое разрешение / длительность | Выберите 480p или 720p и целочисленную длительность от 4 до 15. |
| Конфликтующие соотношения сторон или размеры | Используйте согласованные aspect_ratio, ratio, size и resolution; предпочтительно оставлять только явную пару соотношение сторон/разрешение. |
| Ограничения на первый/последний кадр | Используйте adaptive, не более одного для каждой роли, и опускайте видео/аудио референсы. |
| Невозможно проверить референсное видео | Предоставьте доступный полный файл MP4/MOV с корректной длительностью. |
| Референсное аудио без изображения/видео | Добавьте референсные изображения/видео или удалите референсное аудио. |
| Отклонение модерацией контента | Измените текст или изображение и отправьте новый запрос. Сбой службы модерации может позволить продолжить генерацию; это не является абсолютной гарантией безопасности. |
FormatUnsupported / Асинхронное отклонение из-за формата/содержимого |
Прочитайте error.message неудачной задачи, проверьте требования к форматам и материалам и замените источник. |
401 |
Предоставьте действительный Bearer API-ключ. |
| Недостаточно средств | Пополните баланс или используйте ключ с достаточной квотой. |
429 / временная ошибка сервиса |
Подождите и повторите попытку с экспоненциальной задержкой; избегайте повторных отправок после неоднозначного таймаута. |
Синхронные запросы с некорректными параметрами не создают видео-задачи и не взимают плату за генерацию. Принятые задачи всё равно могут завершиться неудачей асинхронно; проверяйте окончательный статус задачи перед использованием результата.
См. также: Обзор генерации видео, Seedance 2.0, Seedance 2.0 Fast и Seedance 2.5.
