Краткий ответ
Seedance считывает толькоrole каждого элемента в запросе. Он не видит, какие переключатели вы выбрали в своем инструменте, и не читает для этого ваш prompt. Изображение без role обрабатывается как первый кадр (image-to-video). Добавьте к этому референсное видео, и запрос превратится в «первый кадр + референсный медиафайл», что отклоняется провайдером.
Обычно при отправке возвращается ошибка 400. Задача не создается, и тарификация не производится:
POST /seedance/api/v3/contents/generations/tasks, укажите "role": "reference_image" для изображений и "role": "reference_video" для видео, а видео передавайте в виде публичного URL, который провайдер сможет скачать напрямую, либо зарегистрируйте его в библиотеке ассетов и ссылайтесь на него как на asset://.
Реальный пример
Клиент использовал собственный локальный инструмент для творчества. Он передал изображение одного персонажа и одно видео, отметил флажок «omni reference», оставил флажок «first/last frame» неотмеченным и даже написал в prompt: «image 1 is not the first frame, do not use first/last frame mode». Тем не менее каждый запуск завершался приведенной выше ошибкой. Мы перехватили исходный запрос на стороне шлюза (Base64 изображения сокращен):415 Unsupported Media Type для того же mp4, поступавшее от собственного локального эндпоинта предпросмотра инструмента (/api/media-preview/... на localhost). Инструмент не смог преобразовать видео в пригодный для использования адрес и передал локальный путь в запрос как есть.
Не отправляйте запросы для Seedance через универсальные эндпоинты для видео
/v2/videos/generations (а также /v1/videos, /v1/video/generations) — это универсальные эндпоинты шлюза для видео. Их поля представляют собой общее подмножество параметров нескольких видеомоделей, и они не могут выразить режимы ввода Seedance:
- Отсутствует
role: они не могут различить первый кадр, первый/последний кадр и мультимодальный референс, поэтому одно изображение и одно видео всегда интерпретируются как «первый кадр + референс» - Разрешение передается не полностью: в наших тестах при запросе 2.5 с разрешением 480p результат был в 720p, а для серии 2.0 при запросе 1080p результат также составил 720p, при этом тарификация рассчитывается по фактически сгенерированному разрешению
- Параметры, уникальные для 2.5 (
omni_reference_task_type,output_formatи так далее), не имеют соответствующего поля
Правильный способ: задавайте role для каждого элемента
- Три режима ввода взаимоисключающи: первый/последний кадр (2 изображения,
first_frame/last_frame), первый кадр (1 изображение) и мультимодальный референс (reference_image/reference_video/reference_audio). Как только появляется референсное видео или референсное аудио, каждое изображение должно бытьreference_image - Отсутствие
roleозначает первый кадр: одно изображение безroleэквивалентноfirst_frame - В prompt ссылайтесь на элементы в том порядке, в котором они были переданы, например
@image1и@video1 - Лимиты на референсы: до 9 изображений + 3 видео + 3 аудиоклипа для серии 2.0 и до 30 изображений + 10 видео + 10 аудиоклипов для 2.5
Как передать референсное видео
Провайдер скачивает ваши медиафайлы на свои серверы, поэтому видео должно находиться по адресу, к которому у провайдера есть прямой доступ.<URL> на ссылку на ваше видео):
code=200, type со значением video/mp4 или video/quicktime и size, соответствующий исходному файлу. HTML-страница, тело JSON или любой код 4xx означают, что провайдер не сможет использовать эту ссылку. Инструкцию по полной проверке ссылок на изображения см. в руководстве Ссылка на изображение открывается, но возникает ошибка.