Введение
Video Head Swap принимает идентификатор задачи анализа, выбранные по его превью позиции и от одной до трёх референсных фотографий для каждой и возвращает ролик с заменёнными головами. Волосы, форма головы и личность меняются; тело, костюм, движение, кадрирование и исходная звуковая дорожка остаются такими, какими их сняли. Головы, которых нет в списке, остаются нетронутыми.
Video Head Swap работает в два вызова. Первый отслеживает каждую голову в ролике длиной от 5 до 30 секунд и возвращает по одному превью на голову в фиксированном порядке. Второй принимает выбранные позиции и от одной до трёх референсных фотографий для каждой и возвращает ролик, в котором эти головы заменены, а исходная звуковая дорожка сохранена.
Ключевые возможности и особенности
Кого менять — решаете вы
Большинству эндпоинтов такого рода приходится догадываться, кого именно вы имели в виду. Здесь первый вызов показывает каждую найденную голову с номером, а второй трогает только те номера, которые вы вернули. В ролике с четырьмя людьми можно заменить одного, а остальные трое останутся ровно такими, какими их сняли.
Сохраняйте видео и разрешение одинаковыми
Video Head Swap — это не один эндпоинт, а пара. Первый вызов, video-analyze, отслеживает все головы в ролике длиной от 5 до 30 секунд и возвращает по одному превью на голову в фиксированном порядке; оплата фиксированная за запрос, независимо от длины ролика и количества найденных голов. Второй вызов, video-edit, принимает идентификатор задачи этого анализа, выбранные позиции и от одной до трёх референсных фотографий для каждой и возвращает один ролик с нетронутой исходной звуковой дорожкой, оплачиваемый посекундно в 480p или 720p. Сами данные трекинга до вас не доходят: вы работаете со своим идентификатором задачи и с позициями, нумерованными с нуля, которые в точности соответствуют показанным превью. Оба вызова должны выполняться на одном и том же видео и в одном и том же разрешении, и при расхождении второй вызов отклоняется, а не пропускается молча.
Параметры запроса
| Параметр | Обязательно | Описание |
|---|---|---|
analysis_task_id | Да | Идентификатор задачи вызова анализа для этого ролика. Его превью перечислены в том же порядке, что и |
swap_targets | Да | По одной записи на каждую заменяемую голову; головы, которых нет в списке, не затрагиваются. |
video_url | Нет | Необязателен. Если опустить, берётся видео из анализа. Не менее 1 символов |
resolution | Нет | Должно совпадать с разрешением, в котором выполнялся анализ. Это же поле определяет ценовую ступень. |
seed | Нет | Случайное зерно; ноль запрашивает случайное значение. Одно и то же зерно позволяет сравнивать на равных, когда вы меняете что-то одно, но не обещает покадрово идентичный результат. |
Стоимость
Оплата взимается полными блоками по 5 секунд исходного клипа: клип длиной 6 секунд стоит столько же, сколько 10 секунд. Оценка перед отправкой рассчитывается по реальной длине загруженного клипа, а для ссылки на видео — по максимуму в 30 секунд; разница, если есть, освобождается при списании.
| Спецификация | Стоимость |
|---|---|
| $0.064 / секунду |
| $0.12 / секунду |
Сценарии использования
Переназначить актёра в уже удачном кадре
Дубль с утверждёнными светом, разводкой и движением камеры остаётся на месте: вы меняете голову, а не пересобираете весь кадр, теряя актёрскую работу.
Любой сюжет — с согласия исполнителя
Что бы ни было в материале, в запросе не меняется ничего. Требование о правах, описанное ниже, тоже не меняется: это жёсткое условие, а не формальность.
Один человек через всю сгенерированную серию
Сгенерируйте партию роликов любой видеомоделью, проанализируйте каждый и проведите одну и ту же согласованную голову через все, чтобы серия читалась как один человек.
Толпа, в которой меняется только один
Проанализируйте сцену с несколькими людьми в кадре, посмотрите превью и верните только нужную позицию. Все остальные останутся нетронутыми.
Руководство по промптам и практические советы
Подтвердите права на каждую задействованную голову
И в материале, и на референсных фотографиях присутствуют люди. Разрешение нужно и на изображение, которое вы переносите, и на материал, в который вы его помещаете. Храните разрешение вместе с записью о задаче.
Сначала анализ, затем чтение порядка превью
Анализ возвращает превью в фиксированном порядке. Первое изображение — object_index 0, второе — 1, и так далее. Эта позиция — единственная зацепка, которая вам нужна: её вы и возвращаете в swap_targets.
Сохраняйте видео и разрешение одинаковыми
Оба вызова должны работать с одним видео в одном разрешении. Если опустить video_url во втором вызове, он берётся из анализа; если отправить — должен совпадать. Другое разрешение отклоняется, а не пересчитывается молча.
Быстрый старт API
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "spicyapi/head-swap-video-v1/video-edit",
"input": {
"analysis_task_id": "example",
"resolution": "720p",
"swap_targets": [
{
"image_urls": [
"example"
],
"object_index": 0
}
]
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
Аутентификация, полная схема, опрос статуса и обработка ошибок описаны в справочнике API.

