SpicyAPI(spicyapi.ai)의 Seedance 2.0에는 영상 생성 작업이 세 개 있고, 각각이 원하는 프롬프트가 다릅니다. 텍스트투비디오는 프롬프트가 샷 전체를 담습니다. 이미지투비디오는 첫 프레임이 화면을 정하므로 프롬프트에는 다음에 무슨 일이 일어나는지만 씁니다. 레퍼런스투비디오에서는 이미지, 클립, 오디오를 넘기고 프롬프트가 각 파일의 용도를 밝힙니다. 작업에 맞는 종류의 프롬프트를 쓰지 않으면 형용사를 아무리 더해도 클립을 살릴 수 없습니다.
아래 가격과 제한은 2026년 10월 기준 공개 모델 페이지에서 가져온 것입니다. 세 작업 모두 480p부터 4K까지, 소리가 포함된 4~15초 영상을 돌려줍니다.
고정해야 하는 것으로 작업을 고르기
| 이미 가지고 있는 것 | 작업 | 프롬프트의 역할 | 가격 |
|---|---|---|---|
| 아이디어만 있고 이미지는 없음 | 텍스트투비디오 | 장면을 설명하고, 다음에 무엇이 바뀌는지 씁니다 | $0.07/s |
| 정확한 첫 프레임(제품 사진, 승인된 스틸 이미지) | 이미지투비디오 | 프레임 이후에 일어나는 일만 씁니다 | $0.07/s |
| 따로 모인 소스: 얼굴, 장소, 카메라 무브, 소리 | 레퍼런스투비디오 | 각 파일이 무엇을 더하는지 말하고, 새 샷을 지시합니다 | $0.07/s(레퍼런스 영상이 있으면 $0.043) |
텍스트투비디오는 첫 구도를 모델이 만들어 내므로 가상의 장면이나 자유롭게 조합할 수 있는 장면에 어울립니다. 실제 제품의 라벨과 비율이 중요하다면 텍스트 설명으로는 재현되지 않습니다. 사진에서 시작하세요. 레퍼런스투비디오에는 첫 프레임을 잡는 기능이 없습니다. 첫 프레임을 정확히 맞추려면 이미지투비디오를 쓰세요. 이미지투비디오는 프레임의 의상, 물체 형태, 조명을 그대로 유지합니다. 한 바퀴 돌거나 가려지는 장면을 그대로 통과한다는 보장은 없으니 클립 전체를 확인하세요.
레퍼런스투비디오는 이미지 최대 9장, 영상 클립 3개, 오디오 파일 3개를 받습니다. 각 클립과 오디오 파일은 2~15초이고, 유형별로 합산 15초가 한도입니다. 이미지나 영상이 최소 1개는 있어야 하며, 오디오만 넘기면 거절됩니다. 목적을 이루는 최소한만 쓰세요. 파일을 더하면 모순이 생깁니다. 예를 들어 서로 다른 세 조명 아래의 얼굴 하나, 레퍼런스 구도와 충돌하는 카메라 무브입니다. 프롬프트가 알려 주지 않으면 모델은 어느 파일이 우선인지 알 수 없습니다.
샷 브리프 쓰기
세 작업 모두 같은 순서를 씁니다. 주제, 동작, 카메라, 빛, 소리, 문장 하나에 아이디어 하나. 이 가이드의 나머지 부분은 예 하나로 갑니다. 빨간 자전거 정비사가 페달을 돌리는 장면입니다.
- 보이는 동작은 하나, 카메라 지시는 하나. "정비사가 페달을 한 번 돌리고 그 옆에 손을 둔다"는 모델이 그릴 대상을 줍니다. "감정적, 영화적"은 그렇지 않습니다. 질감 표현을 덧붙이기보다 주제가 어떻게 움직이는지 쓰세요("셔터를 천천히 올린다").
- 카메라가 주제와 어디에 있는지 말하세요. "카메라는 허리 높이, 중간 거리 고정"은 쓸 수 있는 지시입니다. "고정 카메라", "오빗", "빠른 줌"을 한 샷에서 섞지 마세요. 하나만 고르거나, 전부 빼세요.
- 길이는 동작에 맞추세요. 5초면 돌리기, 손 뻗기, 한 번 힐끗 보는 정도가 됩니다. 방에 들어가 도구를 집어 들고 한 문장 말하려면 10초 이상이거나 샷을 나눠야 합니다.
duration_seconds는 4부터 15까지 정수 초를 받고,-1이면 모델이 고르게 합니다. - 타임스탬프가 아니라 샷 순서를 쓰세요. Seedance 2.0은 초 단위 구간보다 "Shot 1, Shot 2, Shot 3"을 더 안정적으로 지킵니다. 동작이 사라지면 사건 수를 줄이거나 순서에 더 시간을 주세요.
- 스타일은 마지막에 짧게. "부드러운 아침 빛, 다큐멘터리 질감"은 샷을 받쳐 줍니다. 서로 무관한 라벨을 쌓으면 결과가 평범한 다듬음으로 밀리고 동작이 감춰집니다. 양식화된 장면이라면 "Photorealistic live action, not animation"으로 시작하세요. 그러지 않으면 그림 쪽으로 흐를 수 있습니다.
10초짜리 여러 샷으로 나눈 브리프 예로, 컷 지점을 분명히 한 버전입니다.
A mechanic in a dark blue work shirt repairs a red commuter bicycle in a tidy daylight workshop. Naturalistic photography, soft morning light.
Shot 1: Fixed medium shot. The mechanic turns the right pedal once by hand and the rear wheel spins.
Shot 2: Cut to a close side view of the rear wheel slowing while his gloved hand steadies the frame.
Shot 3: Back to the medium shot. He steps back and wipes his hands on a rag.
Sound: ratchet clicks, the spinning wheel, quiet workshop. No music, no captions.먼저 Playground에서 해보기
코드를 쓰기 전에 Playground에서 브리프를 실행하세요. 여기서 실패하는 프롬프트는 API로 불러도 실패합니다.
- 텍스트투비디오 페이지를 열고 Playground 탭의 Form 뷰에 그대로 머무르세요. 실행하려면 충전된 계정으로 로그인해야 합니다.
- 브리프를 Prompt에 붙여 넣습니다.
- Aspect ratio(16:9), Resolution, Duration를 정합니다. 초안에는 480p와 5초를 고르세요. 두 설정 모두 "affects price"로 표시되며, Generate audio와 Web search도 마찬가지입니다(Web search는 꺼 둡니다).
- 가격 예상치를 읽고 실행합니다. Advanced parameters의 Seed는 프롬프트 수정 전후를 비교할 때 도움이 됩니다.
이미지투비디오에도 같은 탭이 있고 Input image 업로드(선택 사항인 Closing frame)가 있습니다. 레퍼런스투비디오에서는 Reference images, Reference videos, Reference audio 아래에 파일을 추가합니다. 추가한 순서대로 image 1, video 1, audio 1 번호가 붙고, Insert reference가 맞는 이름을 프롬프트에 넣어 줍니다.
그다음 코드로 부르기
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
request = {
"model": "bytedance/seedance-2.0/text-to-video",
"input_data": {
"prompt": "One adult mechanic in a dark blue work shirt stands beside one red commuter bicycle on a repair stand. Medium shot in a tidy daylight workshop. The mechanic turns the right pedal once by hand, watches the rear wheel rotate, then pauses with the hand resting beside the pedal. The camera stays fixed at waist height; the bicycle remains fully visible. Soft morning light from the left. A quiet workshop ambience and one short mechanical click, with no speech. One continuous shot.",
"duration_seconds": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": True,
},
}
quote = client.quote_task(**request) # free; nothing is reserved
print(quote["estimatedCost"], quote["maxCharge"])
task = client.create_task(
**request,
idempotency_key=str(uuid.uuid4()),
quote_id=quote["quoteId"],
expected_cost=quote["estimatedCost"],
)
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"]) # copy it to your own storage now나머지 두 작업도 같은 호출을 쓰고 model과 input_data만 다릅니다. 이미지투비디오는 image_url(선택 사항으로 last_image_url 추가), 레퍼런스투비디오는 reference_image_urls에 레퍼런스 영상과 오디오 목록을 선택적으로 함께 씁니다. Playground의 JSON 뷰를 열면 지금 다루는 작업의 정확한 본문이 보입니다. 업로드, 대기, 재시도, 오류, 비용을 아끼는 멱등 키는 Python SDK 레퍼런스와 비동기 작업 가이드에 있습니다.
또는 Agent에게 맡기기
어시스턴트가 클립을 대신 실행하게 하려면 CLI, MCP 서버, Skill 중 하나를 넘기세요. CLI와 MCP 서버는 가격을 보여 주고, 유료 호출 전에 확인을 요청합니다.
- CLI. 같은
input객체를input.json에 놓고 다음을 실행하세요(npx @spicyapi/cli는 설치 없이 동작합니다. CLI 문서 참고).
``bash spicyapi tasks create --model bytedance/seedance-2.0/text-to-video --input-file input.json --wait ``
- MCP 서버. 어시스턴트에 MCP 서버를 추가한 뒤 이렇게 물어보세요. "Run Seedance 2.0 text to video with this brief, 5 seconds at 480p."
spicyapi_task_create를 호출해 가격 확인에서 멈추고, 이어서spicyapi_task_wait를 호출합니다. - Skill.
npx skills add spicyapi-ai/spicy-skill로 Agent Skill을 설치하면, 코딩 어시스턴트가 필드를 추측하지 않고 현재 모델 스키마를 읽게 됩니다.
텍스트투비디오: 장면 전체를 세우기
이미지가 없을 때는 먼저 출연자와 핵심 물체를 정하고, 그다음 시작 구도를, 그다음 작은 변화 하나를 씁니다. "정비사가 페달을 잡고 있다"는 상태이고, "페달을 한 번 돌린다"는 동작입니다. 모델은 후자가 필요합니다. 자전거가 빨간색이어야 하고 수리 대 위에 계속 놓여 있어야 한다면, 그 정보는 맨 뒤가 아니라 장면 설명에 넣으세요.
One adult mechanic in a dark blue work shirt stands beside one red commuter bicycle on a repair stand. Medium shot in a tidy daylight workshop. The mechanic turns the right pedal once by hand, watches the rear wheel rotate, then pauses with the hand resting beside the pedal. The camera stays fixed at waist height; the bicycle remains fully visible. Soft morning light from the left. A quiet workshop ambience and one short mechanical click, with no speech. One continuous shot.enable_web_search는 텍스트투비디오에만 있고 요금을 올립니다(720p는 초당 $0.152에서 $0.246으로). 샷이 모델이 찾아 봐야 하는 정보에 의존할 때만 켜고, 사실 관계는 직접 확인하세요.
클립이 빗나가면, 원인이 된 브리프의 그 한 부분만 바꾸세요.
| 보이는 것 | 바꿀 곳 |
|---|---|
| 사람이 더 나오거나 자전거가 두 대 | 개수를 명시하고("정비사 한 명, 자전거 한 대") 집단 표현을 빼세요 |
| 동작이 끝나지 않음 | 사건 하나를 빼거나 길이를 늘리세요 |
| "고정"이라 했는데 카메라가 움직임 | 카메라에 대한 직접적인 문장을 하나만 두고 다른 카메라 표현을 빼세요 |
| 원치 않는 컷 | "one continuous shot"이라 말하고 브리프에서 장면 변화를 빼세요 |
| 요청하지 않은 자막이나 음악 | "no captions, no music"를 추가하세요. 위험은 줄지만 보장은 아닙니다 |
| 만화풍이나 일러스트 느낌 | "Photorealistic live action, not animation"으로 시작하세요 |
이미지투비디오: 화면은 프레임이 알아서 하게 하세요
원하는 움직임에 맞춰 프레임을 고르세요. 얼굴을 바짝 당겨 찍은 헤드샷은 걷는 프롬프트가 다룰 대상을 주지 못하고, 뒷바퀴에서 잘린 자전거는 그 바퀴가 도는 것을 보여 줄 수 없습니다. 보내기 전에 프레임에서 인체 형태, 물체 수, 엉뚱한 글자, 조명을 확인하세요. 스틸 이미지의 결함은 클립 내내 남고, 움직이게 만들어도 고쳐지지 않습니다.

그다음 바뀌는 것만 쓰세요. 정비사의 옷과 작업장을 다시 묘사하면 같은 주제에 대한 두 개의 경쟁하는 설명이 모델에 들어가고, 그것은 드리프트를 부릅니다. 움직이는 주제, 동작, 카메라, 소리를 분명히 적으세요.
The mechanic turns the visible pedal once by hand. The rear wheel rotates naturally, then slows while the mechanic watches it. The camera remains fixed at the original medium distance. One continuous shot, quiet workshop ambience.image_url은 공개되어 직접 내려받을 수 있는 링크여야 합니다(한 변 300~6000 px, 10 MB 미만. 실존하는 식별 가능한 사람의 사진은 거절될 수 있음). 컴퓨터에 있는 파일은 먼저 업로드하고 반환된 spicy:// URI를 넘기세요. 프롬프트는 선택 사항이며, 없으면 모델이 알아서 움직임을 고릅니다. aspect_ratio: "adaptive"를 쓰면 이미지 자체의 형태를 따릅니다.
last_image_url은 마지막 프레임을 고정하며 image_url과 함께 쓸 때만 동작합니다. 어울리는 프레임을 쓰세요. 같은 주제, 비슷한 각도와 물체 배치. 서로 관계없는 두 구도를 넣으면 클립이 변환 문제가 되어 모델이 그 경로를 지어 내야 합니다.
15초를 넘기려면 return_last_frame을 true로 두고, 반환된 마지막 프레임을 저장해 다음 호출의 image_url로 넘기세요. 이어 붙이기 필드는 없으므로 각 구간은 저장된 프레임에서 시작합니다.
레퍼런스투비디오: 파일마다 역할을 주기
프롬프트에서 역할을 정하고 업로드 순서에 맞춰 주세요. image 1, image 2, video 1, audio 1입니다. 주제에는 짧은 이름을 붙여 한 번 정의한 뒤 계속 쓰세요. 클립에서 무엇을 빌리고 무엇을 남기지 않을지 모델에 알려 주세요.
Define the mechanic in image 1 as the Mechanic. Use image 2 for the workshop and the red bicycle. The Mechanic turns the pedal once while the wheel rotates, then pauses. Medium shot, camera fixed at waist height. One continuous shot. Quiet ambience, no speech.
도움이 되는 것들입니다.
- 파일마다 일은 하나. 외모가 흐려지면 얼굴 레퍼런스와 옷차림 또는 전신 레퍼런스를 나누고, 무엇이 무엇을 제공하는지 쓰세요. 한 인물을 두세 각도에서 찍은 것은 거의 같은 프레임을 쌓은 것보다 더 잘 통합니다. 여러 시점을 붙인 콜라주는 여러 사람으로 보일 수 있습니다.
- 생성했거나 공개가 끝난 얼굴을 쓰세요. Seedance의 입력 검사는 과금 전에도 실존하는 식별 가능한 사람의 사진을 거절할 수 있습니다. 이미지는 한 변 300~6000 px, 10 MB 미만이어야 합니다.
- 스타일을 맞추세요. 한 레퍼런스 세트에 사진, 카툰, 애니를 섞으면 결과가 평평해지기 쉽습니다.
- 레퍼런싱은 편집이 아닙니다. "video 1의 느린 옆으로 이동만 빌리고 사람과 장소는 빌리지 말라"는 새 장면을 요청하는 것입니다. "video 1을 편집해"는 그 영상을 고치라는 요청입니다. 둘을 한 프롬프트에 섞지 마세요.
- 오디오 파일이 무엇을 주는지 쓰세요. 목소리, 공간 음향, 음악적 성격 중 하나입니다. 이미지나 영상이 옆에 필요하고,
generate_audio를 끄면 오디오를 넘겨도 사운드트랙은 나오지 않습니다. - 영상은 마지막에 넣으세요. 먼저 이미지로 장면을 맞추고, 이유를 명시하고 클립을 추가하세요. 영상은 가격도 바꿉니다(아래 참고).
- 순서가 중요합니다. 도구가 파일 순서를 다시 매기면
image 1이 다른 그림이 됩니다. 파일을 교체했을 때는 프롬프트의 배정을 다시 읽으세요.
사용할 권리가 있는 자료와, 출연에 동의한 사람만 올리세요.
소리 지시하기
generate_audio는 기본으로 켜져 있고 꺼도 요금이 같습니다. 나중에 클립에 음악을 입히거나 더빙할 거면 끄세요. 소리를 브리프의 독립된 항목으로 다루세요.
- 소스의 이름을 쓰세요. "Ratchet clicks, spinning wheel, quiet workshop"가 "ambient sound"보다 낫습니다. 정말 원하는 거라면 "no music"를 쓰세요. 그러지 않으면 장면에 음악이 붙어 돌아올 수 있습니다.
- 대사: 화자를 밝히고, 대사는 따옴표 안에 넣고, 길이에 맞게 짧게 두고, 한 언어로 통일하세요. 정확한 단어를 확인하세요. 그럴듯해 보이는 대사도 이름이나 제안을 바꿔 놓을 수 있습니다.
- 편집에서 고치세요. 화면은 맞는데 소리가 틀렸다면 화면을 다시 생성하지 말고 소리만 갈아 끼우세요.
한 번에 하나씩 고치며 반복하기
한 번 시도할 때 한 가지만 바꾸세요. 원치 않는 줌이면 카메라 문장을, 정체성 드리프트이면 레퍼런스 세트를 바꿉니다. 그러지 않으면 더 나은 클립이 나와도 어떤 수정이 효과가 있었는지 알려 주지 않습니다. 프롬프트 수정을 판단할 때는 seed를 고정하고 나머지는 모두 같게 두세요. 시드는 비교 도구이지 프레임까지 똑같이 반복된다는 약속이 아닙니다.
초안은 480p로 만들고 동작이 제대로 읽히면 해상도를 올리세요. 720p가 기본값입니다. 요금을 정하는 것은 해상도와 길이이며, 화면비율, 비트레이트, 워터마크는 그렇지 않습니다. Seedance 자체 검사는 렌더링 전에 일부 표현을 거절하는데, 키스 묘사가 확실한 트리거입니다. 거절된 작업은 보통 과금 없이 해제됩니다.

시도마다 기록을 남기세요. 프롬프트, 작업, 업로드 순서의 파일, 길이, 해상도, 시드입니다. 어떤 장면에서 프롬프트가 통했다면 그 기록이 다음 장면에서 무엇을 재사용할지 알려 줍니다.

비용
텍스트투비디오와 이미지투비디오는 출력된 초당으로 과금되며, 소리를 켜든 끄든 요율은 같습니다.
| 해상도 | 초당 | 5초 클립 |
|---|---|---|
| 480p | $0.07 | $0.35 |
| 720p | $0.152 | $0.76 |
| 1080p | $0.374 | $1.87 |
| 4K | $0.778 | $3.89 |
480p 초안 3개와 720p 최종본 1개면 $1.81입니다. -1(모델이 길이를 고름)을 쓰면 예상치는 최대 15초로 가정해 720p 기준 $2.28이며, 최종 과금은 전달된 길이를 따릅니다. Seedance 2.0 Fast와 Mini는 더 저렴합니다(Mini는 480p에서 초당 $0.025부터, Fast는 $0.045부터)하며 720p까지만 지원합니다. 이들의 초안은 브리프를 확인하는 단서로 쓰세요. 기본 모델 결과의 미리 보기로는 아닙니다.
레퍼런스 영상이 과금을 바꾸는 유일한 입력입니다. 레퍼런스투비디오는 요청에 영상이 포함되면 초당 요율을 낮춥니다(720p: $0.152 대신 $0.0928). 다만 그 요율은 출력된 초에 레퍼런스 클립의 초까지 더해 적용됩니다. 720p 5초 클립에 10초짜리 레퍼런스 클립을 붙이면 15 × $0.0928 = $1.39이고, 클립이 없으면 $0.76입니다. 4K에서는 영상 유무와 요율이 같으니 클립은 초만 더합니다. SpicyAPI는 최대 금액을 먼저 묶어 두고, 작업이 정산되면 쓰지 않은 부분을 해제합니다. 레퍼런스 클립은 움직임을 담는 몇 초로 잘라내세요.
다른 모델이 답인 경우
작업 선택, 프레임 품질, 레퍼런스 역할, 카메라 지시를 먼저 확인하세요. 이 문제들은 어떤 모델로 옮겨도 따라오기 때문입니다. 요구가 2.0의 범위를 넘으면 다음으로 넘어가세요. Seedance 2.5는 4~30초를 돌려주고, 레퍼런스투비디오에서 이미지 최대 30장, 클립 10개, 오디오 파일 10개를 받으며, 자체 요금과 1080p 상한을 가집니다. 2.0 프롬프트를 옮기기 전에 프롬프트 가이드를 읽으세요. BytePlus도 자체 프롬프트 가이드를 공개합니다.
FAQ
다른 가이드의 @Image1을 쓰는 프롬프트도 붙여 넣을 수 있나요?
다시 쓰세요. SpicyAPI의 이름은 image 1, video 1, audio 1이며, 입력 배열의 순서와 대응됩니다.






