소개
Video Head Swap은 분석의 작업 ID, 그 미리보기 이미지에서 고른 위치, 위치별 참고 사진 1~3장을 받아 해당 머리가 교체된 클립을 돌려줍니다. 머리카락과 두상, 인물 자체는 바뀌지만 몸과 의상, 움직임, 화각, 원본 오디오 트랙은 촬영된 그대로 남습니다. 넣지 않은 머리에는 손이 가지 않습니다.
Video Head Swap은 두 번의 호출로 끝납니다. 첫 번째 호출은 530초 클립에서 머리를 모두 추적해 머리마다 미리보기 스틸을 정해진 순서로 돌려줍니다. 두 번째 호출에 고른 위치와 위치별 참고 사진 13장을 넘기면, 해당 머리만 교체되고 원본 오디오가 그대로 남은 클립을 받습니다.
핵심 기능 및 하이라이트
누구를 바꿀지는 사용자가 정합니다
이런 종류의 엔드포인트는 대개 어느 인물을 가리켰는지 추측할 수밖에 없습니다. 여기서는 첫 번째 호출이 찾아낸 머리를 번호와 함께 보여 주고, 두 번째 호출은 돌려받은 번호에만 손을 댑니다. 네 사람이 나오는 클립에서 한 명만 바꾸고 나머지 셋은 촬영된 그대로 둘 수 있습니다.
영상과 해상도를 두 번 모두 같게 유지합니다
Video Head Swap은 하나가 아니라 두 개가 한 쌍인 엔드포인트입니다. 첫 번째 호출인 video-analyze는 530초 클립 안의 머리를 모두 추적해 머리마다 미리보기 스틸을 정해진 순서로 돌려주며, 클립 길이나 검출 수와 무관하게 요청당 정액으로 청구됩니다. 두 번째 호출인 video-edit에는 그 분석의 작업 ID, 고른 위치, 위치별 참고 사진 13장을 넘깁니다. 돌아오는 것은 원본 오디오 트랙이 살아 있는 클립 한 편이며, 480p 또는 720p 해상도에 따라 영상 초 단위로 청구됩니다. 추적 데이터 자체는 밖으로 나가지 않습니다. 다루는 것은 본인의 작업 ID와, 받아 본 미리보기 이미지에 그대로 대응하는 0부터 시작하는 위치 번호뿐입니다. 두 호출은 같은 영상과 같은 해상도로 실행해야 하며, 어긋나면 조용히 통과시키지 않고 두 번째 호출을 거부합니다.
요청 파라미터
| 파라미터 | 필수 | 설명 |
|---|---|---|
analysis_task_id | 예 | 이 클립을 분석한 호출의 작업 ID입니다. 미리보기 이미지가 object_index와 같은 순서로 나열되며 24시간 동안 쓸 수 있습니다. 1자 이상 · 64자 이하 |
swap_targets | 예 | 교체할 머리마다 항목 하나씩입니다. 넣지 않은 머리에는 손이 가지 않습니다. 1개 이상 · 10개 이하 |
video_url | 아니요 | 생략할 수 있습니다. 생략하면 분석 쪽 영상이 쓰입니다. 1자 이상 |
resolution | 아니요 | 분석이 실행된 해상도와 일치해야 합니다. 요금 등급을 정하는 항목이기도 합니다. |
seed | 아니요 | 난수 시드이며 0을 넘기면 무작위가 됩니다. 다른 조건 하나만 바꿔 비교할 때 조건을 맞추기 위한 값이지, 프레임 단위로 동일한 결과를 약속하지는 않습니다. |
요금
원본 클립을 5초 단위로 올림하여 과금합니다. 6초 클립은 10초분입니다. 제출 전 견적은 업로드한 클립이면 실제 길이로, 동영상 URL이면 최대 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 레퍼런스에서 확인하세요.

