소개
Wan 2.7 Spicy 이미지→영상은 무검열 Wan 2.7 Spicy 모델 계열의 두 엔드포인트 중 하나입니다. image_url의 시작 프레임과 필수 prompt로 720p 또는 1080p의 2~15초 영상을 오디오와 함께 만듭니다. 인물, 의상, 몸, 세트, 빛의 방향, 클립의 형태는 스틸 이미지가, 움직임, 카메라, 소리는 프롬프트가 맡습니다.
요청 본문에는 콘텐츠 플래그도, 요청별 신고도, 검토 단계도 없습니다. 클립은 권한이 있는 프레임에 담긴 것을 그대로 이어 갑니다. 이 계열에는 텍스트→영상과 레퍼런스 작업이 없으므로 새 클립은 모두 스틸 이미지에서 시작합니다. 이미 가진 클립을 이어 가려면 영상 연장을 사용하세요.
핵심 기능 및 하이라이트
보낸 프레임이 그대로 움직입니다
image_url은 JPEG, 투명도 없는 PNG, BMP, WEBP를 받으며, 각 변은 240~8,000픽셀, 비율은 1:8에서 8:1 사이, 크기는 20MB 이하여야 합니다. 화면비 필드는 없으므로 보낸 크롭이 그대로 돌아옵니다. 원본 이미지에 보이는 것은 그대로 클립에 이어집니다.
2~15초의 정수 길이
duration_seconds는 2에서 15 사이의 정수(기본값 5)를, resolution은 720p(기본값) 또는 1080p를 받습니다. 둘 다 요금과 처리 시간에 영향을 줍니다. 10초를 넘기면 손과 천의 흔들림이 눈에 띄므로, 긴 샷은 원하는 포즈를 이미 취한 플레이트에서 시작하는 것이 좋습니다.
생성된 소리 또는 직접 준비한 트랙
generate_audio는 기본적으로 켜져 있으며 화면에 맞춘 룸톤과 효과음을 함께 반환합니다. 녹음한 대사나 음악 큐로 립싱크와 속도를 움직이려면 audio_url에 WAV 또는 MP3(2~30초, 최대 15MB)를 전달하고 generate_audio는 켜 두십시오. false로 두면 전달한 트랙도 사용되지 않습니다.
프롬프트 확장은 켜진 상태로 시작합니다
이 엔드포인트의 enable_prompt_expansion은 기본값이 true이며, 추가 요금 없이 생성 전에 프롬프트를 다시 씁니다. 한 줄짜리 브리프에는 도움이 됩니다. 움직임 묘사가 정확해졌다면 false로 바꿔 작성한 문구가 그대로 모델에 전달되게 하십시오.
요청 파라미터
| 파라미터 | 필수 | 설명 |
|---|---|---|
image_url | 예 | 첫 프레임이고 여기서 가장 큰 지렛대입니다. 의상과 몸, 세트, 빛의 방향, 클립의 화면비가 전부 여기서 넘어옵니다. |
prompt | 예 | 필수입니다. 움직임과 카메라에만 쓰세요. 1자 이상 |
negative_prompt | 아니요 | 나오면 안 되는 것을 적습니다. 두 번째 인물, 소품, 벽의 글자, 원본 컷이 자꾸 재현하는 워터마크 같은 것들입니다. 500자 이하 |
duration_seconds | 아니요 | 2에서 15 사이의 정수 초라면 어떤 값이든 되고 기본값은 5입니다. 손과 원단의 흔들림은 10초를 넘기면 눈에 띕니다. |
resolution | 아니요 | 720p 또는 1080p이고 기본값은 720p입니다. 가격과 작업이 돌아오는 시간을 둘 다 바꿉니다. |
audio_url | 아니요 | 클립이 따라갈 오디오 트랙이고 입 모양과 호흡을 이끕니다. 대사나 음악 큐가 특정 프레임에 떨어져야 할 때 쓰세요. |
seed | 아니요 | 0에서 2147483647까지입니다. 720p와 1080p를, 또는 5초와 10초를 비교하는 동안에는 고정해 두세요. |
generate_audio | 아니요 | 기본으로 켜져 있고, 클립이 화면에 맞춰진 소리와 함께 돌아옵니다. false로 두면 audio_url로 넣은 트랙도 쓰이지 않습니다. 기본값: |
enable_prompt_expansion | 아니요 | 기본은 켜짐이며 추가 요금은 없습니다. 생성 전에 프롬프트를 다시 쓰므로 한 줄짜리 브리프에는 도움이 됩니다. 기본값: |
요금
| 사양 | 요금 |
|---|---|
| $0.1235 / 초 |
| $0.19 / 초 |
활용 사례
권한 있는 플레이트에서 만드는 무검열 장면
다른 영상 API가 거부하는 장면: 정지 화면을 보내고 움직임을 설명하면 클립을 받습니다. 요청 어디에도 내용을 선언하는 항목은 없습니다. 사용할 수 있는 것은 동의한 성인과 적법하게 라이선스된 소재뿐이며, 등장하는 모든 사람에 대한 권리, 나이, 현지 법률은 사용자가 책임집니다.
여러 클립에 걸친 같은 캐릭터
캐릭터 플레이트 한 장을 모든 클립의 시작 프레임으로 재사용하고 동작 문장만 바꿉니다. 얼굴과 의상을 담당하는 것은 프롬프트가 아니라 플레이트이므로 샷이 바뀌어도 같은 인물로 남습니다. 테이크를 비교할 때는 seed도 고정하십시오.
천, 바람, 부수적인 움직임
사구 예시에서는 밤의 모래 언덕에서 몇 미터나 되는 쪽빛 실크를 머리 위로 던져 올립니다. 그동안 능선에서 모래가 흘러내리고, 랜턴 불꽃이 흔들리고, 긴 그림자가 모래 물결을 가로지릅니다. 크고 부드러운 천은 까다로운 피사체이므로 5초 내내 실크가 찢어지거나 멈추지 않는지 확인하십시오.
직접 준비한 오디오로 말하는 클립
녹음한 대사를 audio_url로 올리면 클립이 그에 맞춰 생성되어 입 움직임과 속도가 이미 가진 테이크를 따릅니다. 무언가를 입 모양으로만 흉내 내는 캐릭터가 아니라 대본을 실제로 말하는 캐릭터가 됩니다.
프롬프트 가이드 및 실전 팁
시작 프레임부터 만들기
스틸을 납품할 형태로 자르고, 원하는 인물, 의상, 방, 빛의 방향이 이미 담겨 있는지 확인합니다. 그다음 두 번째 인물, 소품, 벽의 글자, 워터마크처럼 플레이트가 자꾸 암시하는 것을 negative_prompt(최대 500자)에 넣습니다. 프롬프트는 움직임을 위한 자리이므로 무언가를 제외할 수 있는 곳은 여기뿐입니다.
공개 예시 응용하기
백스테이지 예시는 duration_seconds 5, resolution 720p로 전구 거울 앞의 쇼걸에서 시작합니다. 의상, 깃털, 빛은 플레이트가 이미 담고 있으므로 프롬프트는 그녀의 동작과 방의 소리만 말합니다.
She finishes adjusting the sequin strap, checks herself in the bulb-lit mirror, then turns her head to camera and raises one eyebrow before stepping out of frame toward the stage. Bulbs flicker, feathers stir in the draft, smoke drifts, muffled orchestra and applause building behind the wall.
이 엔드포인트의 클립을 만든 실제 요청이며, 옆에 표시된 시작 프레임에서 생성되었습니다.
한 번에 한 필드만 바꾸기
먼저 5초, 720p에서 샷을 확정한 뒤 seed를 고정한 채 1080p나 더 긴 길이를 시험합니다. 두 가지를 동시에 바꾸면 비교해도 알 수 있는 것이 없습니다. 10초를 넘기면 손과 천의 흔들림을 꼼꼼히 확인하고, 납품 전에는 소리를 켜고 재생하십시오.
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": "alibaba/wan-2.7-spicy/image-to-video",
"input": {
"duration_seconds": 5,
"image_url": "https://example.com/reference.png",
"prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
"resolution": "720p"
}
}'
# 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 레퍼런스에서 확인하세요.




























