소개
한 이미지의 얼굴을 다른 이미지 속 인물에게 옮기면서 두 사진의 피부 톤을 맞춥니다. 얼마나 옮길지는 엔진이 정합니다. 그 쌍에서 더 자연스러운 쪽을 골라 얼굴만 또는 머리 전체를 섞기 때문에 헤어라인이 항상 그대로 남지는 않습니다. 대상 이미지의 자세, 의상, 조명, 배경은 그대로입니다.
Face Swap Plus는 Face Swap 라인에서 조정할 수 있는 등급입니다. 두 이미지 외에 짧은 글 지시, 출력 파일 형식, seed를 받으며 spicyapi/face-swap-v1-plus/edit로 보냅니다. 호출은 비동기로 처리됩니다. 작업 ID가 돌아오면 그 작업을 폴링하고, 요청당 이미지 한 장이 돌아오며 어떤 형식을 고르든 출력 이미지 단위로 과금합니다.
핵심 기능 및 하이라이트
피부 톤을 알아서 맞춥니다
얼굴 합성이 가장 쉽게 들키는 곳은 경계입니다. 따뜻한 빛에서 찍은 레퍼런스를 차가운 빛의 대상 이미지에 넣으면 턱 주위에 테두리가 생기고 목이 머리와 어울리지 않게 됩니다. 이 엔진은 옮기는 과정에서 두 사진의 톤을 맞추므로, 비슷하지만 똑같지는 않은 쌍도 대개 나중에 색을 손보지 않고 자리를 잡습니다. 조명 방향이 상관없어지는 것은 아닙니다. 반대쪽에서 빛을 받은 얼굴은 여전히 어색해 보이지만, 가장 흔한 어긋남은 엔진이 맡습니다.
섞는 깊이는 쌍마다 정해집니다
똑똑한 머리 합성입니다. 쌍마다 얼굴만 섞을지 머리 전체를 섞을지 어느 쪽이 더 자연스러운지를 엔진이 판단하며, 한쪽을 강제하는 설정은 없습니다. 헤어라인이 항상 대상 이미지 쪽에 남는 라인의 다른 모델과 실질적으로 다른 점이 바로 이것입니다. 예상과 조금 다른 헤어라인으로 돌아올 수 있는 이유도 여기에 있습니다. 엔진이 머리 전체를 섞는 쪽이 더 그럴듯하다고 판단한 것입니다.
요청 파라미터
| 파라미터 | 필수 | 설명 |
|---|---|---|
image_url | 예 | 바뀌는 이미지입니다. 이 사람의 자세, 의상, 조명, 배경은 보존되며 교체되는 것은 머리 영역입니다. 1자 이상 |
reference_image_url | 예 | 이목구비를 제공하는 이미지입니다. 피부 톤은 맞춰 주지만 빛의 방향은 맞춰 주지 않으므로 반대쪽에서 빛을 받은 레퍼런스는 여전히 턱에 눈에 띄는 이음매를 남깁니다. 1자 이상 |
prompt | 아니요 | 선택 항목이지만 실제로는 없는 것으로 보고 만드시기 바랍니다. 모델은 이 필드를 받아들입니다. 200자 이하 |
output_format | 아니요 | 돌아올 이미지의 파일 형식입니다. 아무것도 지정하지 않으면 JPEG가 쓰입니다. |
output_quality | 아니요 | 결과물에 요청할 이미지 품질을 10~100으로 지정합니다(기본값 95). 가격에는 영향이 없습니다. |
seed | 아니요 | 시드를 다시 쓰면 같은 이미지 조합에 대한 두 실행을 동일한 추첨에 놓고 비교할 수 있어, 바꾼 한 가지만 움직입니다. 비교 도구이지 같은 결과를 보장하지는 않습니다. |
요금
$0.16 / 장
활용 사례
아바타·프로필 이미지 대량 처리
대상-레퍼런스 쌍 목록을 쌍마다 한 번씩 프로그램으로 엔드포인트에 보냅니다. 재시도를 첫 실행과 비교할 수 있어야 한다면 쌍마다 seed를 고정하고, 결과를 바로 웹에 올린다면 WebP를 고르십시오.
업로드 폼 뒤에 있는 일반 사용자용 기능
상호작용은 사용자의 사진 한 장과 여러분이 제공하는 이미지 한 장이 전부입니다. 사용자가 설정할 것도, 쓸 프롬프트도 없으므로 기능 전체가 폼 필드 하나와 백그라운드 작업 하나로 끝납니다.
카탈로그와 템플릿 작업
준비해 둔 이미지 여러 장에 같은 레퍼런스 얼굴을 넣으면 어느 것도 새로 만들지 않고 일관된 시리즈가 됩니다. 출력 형식 설정으로 파이프라인이 이미 기대하는 형태로 파일을 받을 수 있습니다. 템플릿에 필요한 액세서리는 합성 전에 이미지 안에 들어 있어야 합니다.
무검열 컷에서 기준은 소재가 아니라 동의입니다
SpicyAPI는 자체 콘텐츠 필터를 더하지 않고 성인 플래그도 요구하지 않으므로, 화면에 무엇이 담기든 요청 본문의 필드는 같습니다. 느슨해지지 않는 것은 권한입니다. 그 소재에 그 얼굴을 쓰는 데 대해 등장하는 본인의 명시적이고 충분히 설명받은 동의가 필요하며, 사진이 공개되어 있다고 해서 동의가 있는 것은 결코 아닙니다.
프롬프트 가이드 및 실전 팁
여기서 지시 필드는 아무 효과가 없습니다
prompt는 기반 모델이 받아들이고 200자로 제한되지만, 저희는 이 필드로 무엇도 바꾸지 못했습니다.
| 보낸 것 | 돌아온 것 |
|---|---|
add mirrored aviator sunglasses | 선글라스 없음. 아무것도 보내지 않은 것과 같음 |
wearing black sunglasses | 선글라스 없음. 아무것도 보내지 않은 것과 같음 |
restyle the hair into a sleek straight bob | 머리 모양 변화 없음 |
soften the expression into a faint half smile | 표정 변화 없음 |
a wide open-mouthed laugh | 표정 변화 없음 |
2026년 9월 20일에 실제로 다섯 번 호출해 각각 같은 요청에서 필드를 비운 결과와 비교했습니다. 오류도 경고도 없으므로 응답만으로는 값이 무시되었다는 것을 알 수 없습니다. 이 필드 없이 설계하십시오. 액세서리나 다른 표정이 필요하다면 합성 전에 대상 이미지에 넣어 두십시오.
엔진이 대신 정하는 것
이 엔드포인트를 두 번 실행했더니 정반대의 판단이 돌아왔습니다. 그것이 가장 분명하게 보여 주는 예입니다.
| 대상 이미지 | 옮겨진 것 |
|---|---|
| 단단히 묶은 검은 포니테일 | 머리 전체. 레퍼런스의 빨간 머리가 이목구비와 함께 옮겨짐 |
| 젖은 채 뒤로 넘긴 머리 | 얼굴만. 대상 이미지의 머리는 찍은 그대로 남음 |
액세서리나 다른 표정이 필요했다면
지시 필드로는 거기까지 갈 수 없으므로, 변경은 합성 전에 이미 있어야 합니다.
| 원했던 것 | 대신 처리할 곳 |
|---|---|
| 선글라스, 모자, 장신구 | 이 엔드포인트를 호출하기 전에 대상 이미지의 인물에게 착용시킨다 |
| 다른 표정이나 다른 헤어스타일 | 대상 이미지를 그렇게 촬영하거나 생성한다. 합성은 둘 다 유지한다 |
출력 형식과 seed 고르기
파일 형식이 이후 공정에서 중요하다면 output_format을 지정하십시오. 나중에 변환하면 다시 인코딩해야 하기 때문입니다. 계속 편집할 무손실 파일이라면 PNG, 바로 웹에 올릴 결과라면 WebP, 아무것도 지정하지 않으면 JPEG입니다. 셋 중 무엇을 골라도 가격은 같으므로, 더 싸 보이는 것이 아니라 파이프라인이 원하는 것을 고르십시오. seed는 실행 결과를 비교하려 할 때만 고정하십시오. 같은 쌍에 대한 두 번의 실행이 같은 추첨을 받으므로, 움직이는 것은 바꾼 변수 하나뿐입니다. 비교용 도구일 뿐, 바이트 단위로 같은 이미지를 약속하지는 않습니다. 운영 환경에서는 대개 매번 새 추첨이 맞습니다.
결과가 원하는 대로 나오지 않을 때
| 보이는 증상 | 먼저 바꿀 것 |
|---|---|
| 톤을 맞췄는데도 턱에 이음매가 보임 | 같은 방향에서 빛을 받은 레퍼런스를 쓴다. 톤은 맞춰도 방향은 맞추지 않는다 |
| 헤어라인이 바뀌었는데 유지하고 싶었음 | 여기서는 정상. Face Swap이나 Face Swap Pro를 쓴다 |
| 지시가 눈에 띄는 효과를 내지 않음 | 정상. 이 필드는 여기서 작동하지 않으므로 대상 이미지를 바꾼다 |
| 엉뚱한 사람이 바뀜 | 대상 이미지를 한 사람으로 잘라 낸다 |
| 이목구비가 흐릿하거나 대략적임 | 얼굴이 더 크고 선명한 레퍼런스를 쓴다 |
작업에 맞는 엔드포인트 고르기
| 필요한 것 | 엔드포인트 |
|---|---|
| 피부 톤 보정과 파일 형식 선택 | 이 엔드포인트 |
| 특징점 정확도와 원래 질감, 조절 항목 없음 | Face Swap Pro |
| seed가 있는 기본 합성, 머리카락은 항상 그대로 | Face Swap |
| 머리카락을 포함한 머리 전체, 매번 | Head Swap |
| 움직이는 클립 전체에 얼굴 하나 | Video Face Swap |
일괄 처리로 돌리기
필수 필드 두 개와 기본값이 있는 필드 세 개뿐이라 일괄 처리는 쌍에 대한 반복문이 됩니다. 생성 호출마다 Idempotency-Key를 붙이고, 작업 ID를 그 호출을 일으킨 레코드 옆에 저장하십시오. 연결이 끊겨도 같은 키로 다시 보내면 원래 작업이 돌아오고, 두 번째 과금이 붙는 두 번째 작업은 시작되지 않습니다. 몇 초마다 폴링한 뒤 결과를 각각 자체 저장소로 복사하십시오. 생성된 파일은 14일 뒤, 업로드한 원본 이미지는 하루 뒤에 삭제됩니다.
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-plus/edit",
"input": {
"image_url": "https://example.com/reference.png",
"output_format": "jpeg",
"reference_image_url": "https://example.com/reference.png"
}
}'
# 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 레퍼런스에서 확인하세요.









