Введение
Face Swap переносит черты лица с одного изображения на человека на другом. Переносятся только черты: причёска, линия роста волос, силуэт головы, поза, одежда, свет и фон целевого кадра остаются прежними. Именно поэтому результат встраивается в исходную фотографию, а не лежит поверх неё.
Запрос — это два URL изображений и необязательный seed: image_url — фотография, которую меняют, reference_image_url — источник лица. Поля для промпта нет, а каждый запрос возвращает одно изображение.
Ключевые возможности и особенности
Кадр остаётся, меняется личность
Это узкий выбор для случая, когда на целевом фото уже правильные волосы, поза, одежда, кадрирование и окружение. Переносится только лицо, а остальная утверждённая композиция защищена, поэтому замена человека не превращается в полную генерацию изображения.
Для повторяемых пар изображений
Процесс намеренно прост: подготовьте целевой кадр и референс с урегулированными правами, с совместимым ракурсом и светом, затем проверьте линию челюсти, глаза и переход кожи. Это делает эндпоинт удобным для контролируемых вариантов аватаров, каталожных и рекламных кадров, где снимок должен оставаться узнаваемым.
Определите объём замены заранее
Используйте Face Swap, когда причёска и силуэт головы целевого кадра — часть композиции. Если новый человек должен прийти со своими волосами и формой головы, отправьте задачу в Head Swap: правильно выбранный объём избавляет от лишнего повторного запуска.
Параметры запроса
| Параметр | Обязательно | Описание |
|---|---|---|
image_url | Да | Изображение, которое меняют. Форма головы, волосы, поза, одежда и фон этого человека сохраняются — заменяются только черты лица. Не менее 1 символов |
reference_image_url | Да | Изображение, отдающее черты лица. Берётся только лицо, без формы головы и волос. Не менее 1 символов |
face_mapping | Нет | Для групповых снимков: укажите, какое лицо с референса ставится на какое лицо цели, по одной паре на элемент; лица нумеруются с 0 в порядке обнаружения. Не более 10 элементов |
style | Нет | Отделка заменённого лица: realistic (по умолчанию) сохраняет естественный тон и текстуру кожи, beautify сглаживает и осветляет кожу, lossless сохраняет больше всего деталей лица. |
face_enhance | Нет | Прогоняет заменённое лицо через улучшение, чтобы получить его в более высоком разрешении. По умолчанию выключено. По умолчанию: |
seed | Нет | Переиспользуйте seed, чтобы сравнить два прогона на одной и той же паре изображений при одинаковой выборке; оставьте пустым или поставьте 0 ради случайного прогона каждый раз. |
Стоимость
$0.013 / изображение
Сценарии использования
Новое лицо для портрета, где причёска уже подходит
Используйте этот эндпоинт, когда причёска, линия роста волос и силуэт головы на целевом фото — часть композиции и менять нужно только черты лица. Отправьте целевой кадр как image_url, а лицо как reference_image_url, и перед тем как принять результат, сравните глаза и линию челюсти с исходником в полном размере.
Замена человека на стоковом или сгенерированном кадре
Возьмите кадр, где свет, поза и декорации уже работают, и поставьте в него другое лицо, вместо того чтобы генерировать всё изображение заново и терять уже утверждённую композицию.
Массовые конвейеры аватаров и фото профиля
Раз промпт писать не нужно, список пар «целевой кадр — референс» можно прогонять через эндпоинт программно. Фиксируйте seed для пары, когда повторная попытка должна быть сопоставима с первым запуском.
Единый персонаж на протяжении съёмки
Сгенерируйте серию сцен любой моделью, а затем перенесите одно лицо во все, чтобы серия читалась как один и тот же человек. Поскольку волосы и одежда остаются от каждого целевого кадра, сгенерированное разнообразие сохраняется.
Руководство по промптам и практические советы
Убедитесь, что у вас есть права на оба лица
Прежде всего технического: и целевой кадр, и референс изображают людей, и вам нужно разрешение как на переносимое лицо, так и на изображение, в которое вы его переносите. Храните согласие вместе с записью о задаче.
Разместите оба изображения и отправьте пару
image_url — изображение, которое меняют; reference_image_url — источник лица. Промпт не участвует. Универсальному графическому редактору понадобилась бы инструкция вроде: «Face swap: take the face and hairline of the woman in the second image and place it onto the woman in the first image. Keep the first image's pose, outfit, magazine layout, lighting, framing and colour grade completely unchanged. Match skin tone and lighting so the result reads as one photograph.» Этому эндпоинту не нужно ни то ни другое.
Проверьте результат, прежде чем повторять
На обоих изображениях должно быть хорошо видимое, примерно фронтальное, хорошо освещённое лицо; сильный профиль, смаз от движения, плотное перекрытие и очень мелкие лица — это случаи, когда перенос деградирует или не удаётся вовсе. Большая разница в направлении света или тоне кожи между изображениями видна на линии челюсти, поэтому выбирайте референс со светом, близким к целевому кадру. По умолчанию на изображении заменяется одно лицо; для группового снимка перечислите пары в face_mapping (какое лицо референса ставится на какое лицо цели, нумерация с 0). Нет ни промпта, ни маски, ни регулятора силы: если результат не тот, помогает другая пара изображений, а не переформулированный запрос.
Быстрый старт 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/face-swap-v1/edit",
"input": {
"image_url": "https://example.com/reference.png",
"reference_image_url": "https://example.com/reference.png",
"style": "realistic"
}
}'
# 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.











