확정한 시작 프레임이 있으면 image-to-video, 캐릭터·의상·사물·장소를 별도 이미지로 제공할 때는 reference-to-video, 글만 있을 때는 text-to-video를 쓰세요. 세 작업 모두 720p는 초당 $0.14, 1080p는 초당 $0.18이라서 5초 클립은 $0.70 또는 $0.90입니다. 선택 기준은 가격이 아니라 제어력입니다. image-to-video와 reference-to-video는 uncensored 엔드포인트이고, text-to-video는 필터가 적용됩니다.
어떤 작업을 보낼까
| 가진 것 | 모델 ID와 필수 입력 | 이럴 때 선택 | 감안할 제한 |
|---|---|---|---|
| 글로 쓴 장면 | alibaba/happyhorse-1.1/text-to-video; prompt | 구도, 조명, 속도를 아직 정하는 중이거나 특정 화면 비율이 빨리 필요할 때 | 얼굴, 의상, 구도를 모델에 맡기므로 다시 실행하면 결과가 달라집니다 |
| 확정한 이미지 한 장 | alibaba/happyhorse-1.1/image-to-video; prompt, image_url | 클립이 이미 있는 이미지와 일치해야 할 때 | 화면 비율 필드가 없고(이미지가 형태를 정함) 마지막 프레임도 없으므로, 동작이 스스로 마무리되어야 합니다 |
| 역할이 서로 다른 이미지 1~9장 | alibaba/happyhorse-1.1/reference-to-video; prompt, reference_image_urls | 캐릭터, 의상, 소품, 장소를 조합하거나 같은 출연진을 여러 샷에 재사용할 때 | 이미지 한 장에 역할 하나; 이미지만 가능하며 영상·오디오 참조는 안 됩니다 |
세 작업 모두 1~2,500자 프롬프트, 3~15초의 duration_seconds(기본값 5), 720p(기본값) 또는 1080p의 resolution을 받습니다. 이 범위에서 클립 비용은 720p는 $0.42~$2.10, 1080p는 $0.54~$2.70입니다. 720p로 초안을 만들고 마음에 드는 테이크를 1080p로 다시 실행하세요. 같은 문장으로 다시 실행해도 새 테이크가 나옵니다.
- 화면 비율: 텍스트·참조 작업은 비율을 받습니다. image-to-video는 이미지를 따르므로 먼저 이미지를 잘라 두세요.
- Seed: 이미지·참조 작업에서만 쓸 수 있습니다. 고정해 두고 한 번에 하나만 바꾸세요.
- 소리: 항상 생성되며 끄는 필드가 없습니다. 편집기에서 음소거하거나 교체하세요.
- 받지 않는 값:
last_image_url,negative_prompt.
이미지 크기, 참조 크기, 업로드 한도는 각 모델 페이지에 있습니다.
성인 콘텐츠는 작업에 따라 다릅니다
2026년 9월 테스트에서 image-to-video는 시도한 모든 성인 카테고리를 결과물로 내놓았습니다. 암시적인 장면부터 강도가 가장 높은 장면까지 해당하므로, 성인 캐릭터 이미지가 가장 안전한 출발점입니다. reference-to-video도 uncensored입니다. text-to-video는 가벼운 프롬프트는 통과했지만, 강도가 높은 프롬프트는 완화하지 않고 아예 거부했습니다. 장면이 변경 없이 모델에 전달되어야 한다면 이미지에서 시작하세요. 카테고리별 결과는 HappyHorse 1.1 NSFW 테스트에 정리되어 있으며(해당 글은 아직 영어로만 제공됩니다), 현재 제공 작업은 HappyHorse 1.1 모델 페이지에서 볼 수 있습니다.
먼저 Playground에서 시험하기
예시: 남색 셔츠와 크림색 앞치마를 입은 가상의 35세 도예가가 받침대 바로 위에서 파란 도자기 새를 들고 있는 초상을 움직이게 합니다. 두 손과 받침대가 화면 안에 있습니다.
- image-to-video 페이지를 열고 Playground 탭의 Form 보기에서 로그인한 뒤 실행하세요.
- Input image에 사용 권한이 있는 본인의 초상(JPG, PNG, WEBP, GIF, 최대 10MB)을 끌어다 놓거나 Asset URL을 붙여넣으세요.
- 아래 프롬프트를 붙여넣거나 미리 채워진 상태로 여세요.
HappyHorse 1.1에서 이 프롬프트 실행하기 →. 프레임 이후에 달라지는 것만 서술합니다. 도예가, 새, 공간은 이미지가 이미 정합니다. 프롬프트는 모델에 전달되는 그대로 영어로 둡니다.
- Resolution을 720p, Duration을 5로 설정하고 실행하세요. 720p에서는 $0.70이고 세 번 시도하면 $2.10입니다. 10초, 1080p라면 시도 한 번에 $1.80입니다.
- 마음에 드는 테이크를 골라 1080p로 다시 실행하세요.
참조 이미지를 쓰려면 reference-to-video 페이지를 열고 Reference images에 이미지를 고정된 순서로 추가한 뒤, 프롬프트에서 [Image 1], [Image 2], [Image 3]처럼 번호를 붙이고 각각이 무엇을 담당하는지 적으세요. 참조 이미지마다 역할은 하나만 주세요. 같은 대상의 사진 여러 장은 조정되지 않고 평균이 되며, 아홉 칸은 상한일 뿐 목표가 아닙니다. 글만 있을 때는 Aspect ratio를 쓸 수 있는 text-to-video 페이지에서 프롬프트에 도예가, 새, 갤러리를 묘사하세요.
그다음 코드로 실행하기
Python SDK를 설치하고(pip install spicyapi), 서버 환경에 SPICY_API_KEY를 설정한 뒤 실행하세요.
import uuid
from spicyapi import SpicyClient, output_assets
client = SpicyClient() # reads SPICY_API_KEY from the environment
frame = client.upload_file("./opening-frame.png") # becomes a spicy:// URI
task = client.create_task(
model="alibaba/happyhorse-1.1/image-to-video",
input_data={
"image_url": frame["uri"],
"prompt": "One continuous medium shot. The adult artist gently lowers the blue ceramic bird "
"onto the pedestal, releases it, draws both hands back and pauses. "
"Keep the camera still. Quiet gallery ambience and one soft ceramic contact sound. "
"No cuts or added people.",
"duration_seconds": 5,
"resolution": "720p",
"seed": 240103,
},
idempotency_key=str(uuid.uuid4()), # new key per new request; reuse only to retry the same one
)
print("Resume task:", task["taskId"], flush=True)
final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
raise RuntimeError(f"Task {task['taskId']} ended as {final['state']}")
assets = output_assets(final)
if not assets or any(a.get("pending") or a.get("unavailable") or not a.get("url") for a in assets):
raise RuntimeError(f"Task {task['taskId']} has no ready output; check this task before a new run")
print(assets[0]["url"])reference-to-video는 모델을 바꾸고 reference_image_urls를 쓰세요. text-to-video는 프롬프트, aspect_ratio, duration_seconds, resolution만 받습니다. 대기, 오류, 재시도는 작업 가이드와 Python SDK 레퍼런스에 있습니다.
또는 에이전트에게 맡기기
어시스턴트가 클립을 실행해야 한다면 CLI, MCP 서버, Agent Skill이 모두 현재 스키마를 읽고, CLI와 MCP는 유료 호출 전에 가격을 보여 주고 확인을 요청합니다. input.json에 같은 input 객체를 두고 실행합니다.
npx @spicyapi/cli tasks create --model alibaba/happyhorse-1.1/image-to-video --input-file input.json --waitMCP에서는 "HappyHorse 1.1 image-to-video로 ./opening-frame.png를 움직여 줘"라고 요청하세요. 어시스턴트가 spicyapi_upload_file을 호출한 뒤 spicyapi_task_create를 호출합니다. npx skills add spicyapi-ai/spicy-skill로 Skill을 설치합니다.
구체적인 문제 해결
| 증상 | 다음 조치 |
|---|---|
image-to-video에서 알 수 없는 aspect_ratio | 필드를 제거하고, 업로드 전에 시작 이미지를 원하는 형태로 자르세요 |
text-to-video에서 알 수 없는 seed | seed를 제거하세요. 이 작업은 해당 필드를 제공하지 않습니다 |
이미지에서 invalid_asset | URL이 웹페이지를 반환했습니다. 파일을 업로드하고 그 spicy:// URI를 쓰세요 |
| 첫 프레임은 좋은데 마지막 자세가 틀림 | 동작을 단순화하세요. 결말을 고정할 마지막 프레임 입력은 없습니다 |
| 물체가 손과 합쳐짐 | 움직임을 짧게 하고 카메라를 고정하세요 |
| 밤 장면이 낮으로 바뀜 | 시간대를 하나로 유지하고 보이는 램프나 달빛을 명시하며 일출이나 시간 경과 표현을 빼세요. 클립 전체를 확인하세요 |
| 놓는 동작이 클립이 끝난 뒤에 완료됨 | 프롬프트에서 걸어 들어오는 동작을 빼거나 길이를 5초에서 7초로 늘리세요(720p $0.98) |
| 참조 얼굴이나 물체가 섞임 | 이미지마다 대상을 하나만 주고 [Image N] 태그 옆에 그 대상을 적으세요 |
| 그림은 좋은데 원치 않는 사운드트랙 | 편집기에서 트랙을 음소거하거나 교체하세요. 소리를 끄는 파라미터는 없습니다 |
content_rejected | 작업의 필터가 요청을 거부했습니다. 길이나 해상도를 바꿔도 소용없습니다. 필터가 적용되는 작업은 text-to-video이므로, 대안은 image-to-video의 시작 프레임입니다 |
저렴한 720p 초안으로 구도를 잡은 뒤, 확정한 프레임이나 참조 이미지 세트를 고정하고 납품용으로 다시 실행하세요. 5초 클립마다 읽기 쉬운 사건 하나만 계획하세요. 해상도를 올리면 잘못된 상호작용이 더 크게 보일 뿐 고쳐지지는 않습니다.






