HiAPI
블로그

사용 가이드

seedance-2-0 숏폼 영상 제작 가이드: hiapi API 실전 레시피

hiapi의 seedance-2-0 작업 API로 세로형 TikTok/Reels/Shorts 숏폼을 제작하세요——텍스트 투 비디오 및 이미지 투 비디오, 검증된 가격, 그리고 바로 복사해 붙여넣을 수 있는 제출/폴링/다운로드 스크립트.

Jul 1, 2026
seedance-2-0 숏폼 영상 제작 가이드: hiapi API 실전 레시피

빠른 개요

  • 이것은 무엇인가: hiapi의 seedance-2.0으로 세로형 숏폼 영상(TikTok / Reels / Shorts)을 만드는 즉시 실행 가능하고 재현 가능한 레시피입니다. 아래에 삽입된 숏폼은 바로 위에 인쇄된 프롬프트로 그대로 생성된 것입니다——남의 데모를 빌려온 것이 결코 아닙니다.
  • 두 가지 모드, 하나의 모델: seedance-2.0은 동일한 엔드포인트에서 텍스트 투 비디오와 이미지 투 비디오를 모두 지원합니다——프롬프트에서 시작하거나, 기존 정지 이미지를 움직이게 할 수 있습니다.
  • API 사실(플랫폼에서 검증됨): seedance-2.0은 비동기 작업 엔드포인트(/v1/tasks)에서 실행됩니다. input 객체에는 prompt, aspect_ratio(필수——숏폼에는 9:16 사용), resolution(480p / 720p / 1080p) 그리고 초 단위의 duration이 필요합니다. 결과는 MP4 형식으로 output[0].url에 반환됩니다.
  • 가격(출력 초당 기준): 480p는 $0.136/초, 720p는 $0.293/초, 1080p는 $0.729/초입니다. 4초짜리 480p 숏폼 비용은 $0.54입니다. 실시간 가격은 가격 페이지를 참고하세요.
  • 실행 방법: 작업 API에 POST를 보내고, 상태가 success가 될 때까지 폴링한 다음 output[0].url에서 MP4를 다운로드합니다——해당 URL은 임시이며 만료되므로 바이트 데이터를 즉시 저장하세요. 전체 복사 가능 스크립트(두 모드 + 배치 루프)는 문서 끝에 있습니다.

숏폼에 seedance-2.0을 선택하는 이유

숏폼 플랫폼에는 고정된 문법이 있습니다: 세로형 9:16, 몇 초의 길이, 하나의 명확한 액션 비트. 바로 이것이 seedance-2.0이 태어난 형태입니다. 단 하나의 화면 비율 플래그로 영화 같은 움직임을 렌더링하므로, 세로 화면을 얻기 위해 모델과 씨름할 필요가 없습니다——9:16을 요청하면 그 구도로 구성합니다.

또 다른 이유는 워크플로우입니다: 각 숏폼은 단일 비동기 작업입니다. 작업을 제출하고, 작업 ID를 폴링한 다음, 완성된 MP4를 받아오면 됩니다. 지켜봐야 할 스트리밍 소켓도, 피해야 할 100초 타임아웃도 없습니다——다른 모든 hiapi 생성 모델이 사용하는 작업 프로토콜과 동일하므로, 이미 이미지 모델을 호출해 본 적이 있다면 여기서의 제어 흐름도 같습니다.

모드 1——텍스트 투 비디오

숏폼을 얻는 가장 빠른 경로입니다: 샷을 설명하고, 화면 비율과 길이를 선택하고, 제출하세요.

아래 프롬프트는 제가 실제로 실행한 것입니다. 키워드 목록이 아니라 감독처럼——피사체, 조명, 카메라 움직임——작성하세요.

프롬프트: 햇살이 가득한 카페에서 바리스타가 에스프레소 한 잔을 추출한다, 컵 속으로 소용돌이치는 크레마의 클로즈업, 따뜻한 아침 빛, 부드럽게 피어오르는 김, 얕은 심도, 매끄러운 핸드헬드 카메라 푸시인.

설정: aspect_ratio: 9:16, resolution: 480p, duration: 4

이 숏폼은 기본 9:16 화면 비율이라 Reels/Shorts 타임라인에 바로 넣을 수 있습니다. 렌더링에 약 2분이 걸렸고, 현재 480p 요금으로 추정하면 약 $0.54——여러 변형을 생성하고 가장 좋은 것을 고르기에 충분히 저렴합니다.

요청 본문은 작습니다. 사람들이 자주 놓치는 필드 중 하나가 aspect_ratio입니다: 이 필드는 필수이며, 누락하면 API가 missing required field "aspect_ratio"로 작업을 거부합니다.

import os, json, requests

TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

payload = {
    "model": "seedance-2.0",
    "input": {
        "prompt": (
            "A barista pulls a shot of espresso in a sunlit cafe, close-up on the "
            "crema swirling into the cup, warm morning light, gentle steam rising, "
            "shallow depth of field, smooth handheld camera push-in."
        ),
        "aspect_ratio": "9:16",   # required — 9:16 for short-form
        "resolution": "480p",     # 480p | 720p | 1080p
        "duration": 4,            # seconds
    },
}

r = requests.post(BASE, headers=HEADERS, data=json.dumps(payload), timeout=60)
task_id = r.json()["data"]["taskId"]
print("submitted:", task_id)

모드 2——이미지 투 비디오

두 번째 모드는 장면을 처음부터 창조하는 대신 제공한 정지 이미지를 움직이게 하는 것입니다. 바로 브랜드 작업에 필요한 것입니다: (촬영하거나 생성한) 깔끔한 제품 정지 이미지를 준비한 다음 seedance-2.0이 액션 비트를 추가하게 하면, 구도와 제품 모두 브랜드 규격을 유지할 수 있습니다.

호출 형태는 작업 호출과 같습니다——aspect_ratio, resolution, duration은 유지하고, 이제 프롬프트는 전체 장면이 아니라 화면에 적용할 움직임(“느린 푸시인”, “모델이 카메라 쪽으로 몸을 돌린다”, “김이 피어오르기 시작한다”)을 설명합니다. 이미지 모델의 정지 이미지와 결합하면 2단계 파이프라인이 완성됩니다: 키 비주얼을 생성한 다음 움직이게 하세요.

팁: 이미지 투 비디오 숏폼은 짧게(4초) 유지하고 움직임을 미묘하게 하세요. 숏폼은 분주한 샷보다 깔끔한 비트 하나에 보상을 줍니다.

숏폼 배치의 비용 계산

과금이 출력 초당이므로 비용은 예측하기 매우 쉽습니다——해상도를 선택하고 숏폼 길이를 곱하세요:

해상도 가격 / 초 4초 숏폼 8초 숏폼
480p $0.136 $0.54 $1.09
720p $0.293 $1.17 $2.34
1080p $0.729 $2.92 $5.83

훅을 반복 개선하려면 480p로 초안을 만드세요——720p의 4분의 1 가격으로 구도와 움직임을 판단하기에 충분합니다. 승리한 버전만 최종 게시용으로 720p 또는 1080p로 다시 렌더링하세요. 현재 모델별 요금은 가격 페이지를 참고하세요.

전체 스크립트——제출, 폴링, 다운로드

이것은 엔드투엔드 버전입니다: 텍스트 투 비디오 작업을 제출하고, 완료될 때까지 폴링한 다음 MP4를 저장합니다. 다운로드 단계가 중요합니다——output[0].url은 만료되는 임시 링크이므로, 작업이 성공하면 즉시 바이트를 디스크에 기록하세요.

import os, json, time, requests

TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}


def submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4):
    payload = {
        "model": "seedance-2.0",
        "input": {
            "prompt": prompt,
            "aspect_ratio": aspect_ratio,  # required
            "resolution": resolution,      # 480p | 720p | 1080p
            "duration": duration,          # seconds
        },
    }
    r = requests.post(BASE, headers=HEADERS, data=json.dumps(payload), timeout=60)
    r.raise_for_status()
    return r.json()["data"]["taskId"]


def wait(task_id, timeout_s=600, poll=8):
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        r = requests.get(f"{BASE}/{task_id}", headers=HEADERS, timeout=30)
        data = r.json().get("data", {})
        status = data.get("status")
        if status == "success":
            return data
        if status == "fail":
            raise RuntimeError(f"task failed: {data.get('error')}")
        time.sleep(poll)
    raise TimeoutError(f"task {task_id} did not finish in {timeout_s}s")


def download(task, path):
    out = task["output"][0]
    assert out["type"] == "video", f"unexpected output type: {out['type']}"
    # output[0].url is temporary (see expireAt) — save immediately.
    resp = requests.get(out["url"], timeout=120)
    resp.raise_for_status()
    with open(path, "wb") as f:
        f.write(resp.content)
    return path


if __name__ == "__main__":
    prompt = (
        "A barista pulls a shot of espresso in a sunlit cafe, close-up on the crema "
        "swirling into the cup, warm morning light, gentle steam rising, shallow "
        "depth of field, smooth handheld camera push-in."
    )
    tid = submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4)
    print("submitted:", tid)
    task = wait(tid)
    print("saved:", download(task, "espresso_9x16.mp4"))

하나의 훅을 배치 전체로 만들려면 submit / wait / download를 프롬프트를 순회하는 루프로 감싸세요:

HOOKS = {
    "espresso":  "A barista pulls a shot of espresso in a sunlit cafe, close-up on the crema, gentle steam, handheld push-in.",
    "matcha":    "A whisk froths bright green matcha in a ceramic bowl, top-down light, slow spiral motion, calm morning mood.",
    "pour-over": "Hot water spirals over fresh coffee grounds in a dripper, close macro, steam rising, warm backlight.",
}

for name, prompt in HOOKS.items():
    tid = submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4)
    task = wait(tid)
    download(task, f"{name}_9x16.mp4")
    print("done:", name)

이 배치를 480p로 초안 작성하고, 승자를 선택해 1080p로 다시 렌더링한 다음 게시하세요. 이것이 하나의 모델과 하나의 엔드포인트 위에서 완성되는 전체 숏폼 사이클입니다.

핵심 요점

  • seedance-2.0은 /v1/tasks에서 단일 비동기 작업으로 MP4 하나를 반환합니다——hiapi 이미지 모델과 동일한 제어 흐름입니다.
  • aspect_ratio는 필수입니다; TikTok / Reels / Shorts에는 9:16을 사용하세요.
  • 과금은 출력 초당: 480p $0.136/초, 720p $0.293/초, 1080p $0.729/초——따라서 480p로 저렴하게 초안을 만들고, 승자만 고해상도로 완성하세요.
  • 출력 URL은 임시입니다——작업이 success를 보고하면 즉시 바이트 데이터를 다운로드하세요.
  • 동일한 호출이 텍스트 투 비디오와 이미지 투 비디오를 모두 수행합니다; 이미지 투 비디오를 생성한 정지 이미지와 결합하면 브랜드에 맞는 제품 움직임을 얻을 수 있습니다.

영구 AI 아티팩트로 빌드 시작하기

API 키를 받아 태스크 기반의 하나의 API로 이미지, 비디오, 오디오 모델을 호출하세요.

API 문서 보기