HiAPI
블로그

사용 가이드

happyhorse-1.1 텍스트-투-비디오 API로 숏폼 영상 만들기: 엔드투엔드 워크플로

Jul 7, 2026
happyhorse-1.1 텍스트-투-비디오 API로 숏폼 영상 만들기: 엔드투엔드 워크플로

숏폼 영상은 수량 게임입니다. TikTok, Reels, Shorts는 매일 게시하는 계정에 보상을 주며, 가장 큰 제작 병목은 보통 B-roll입니다. 훅, 제품 하이라이트, 또는 만족스러운 루프를 담아내는 3–8초 세로 클립 말이죠. HappyHorse 1.1 텍스트-투-비디오는 이 시나리오에 특히 적합합니다. 같은 호출에서 네이티브 오디오를 생성하므로 별도의 배경음악이나 폴리 사운드가 필요 없고, 9:16 세로 출력을 직접 지원하므로 후반 작업에서 크롭할 필요도 없습니다.

이 가이드는 엔드투엔드 워크플로입니다: 숏폼에 맞춘 프롬프트 패턴, 비동기 작업 수명 주기, 한 번 실행으로 일주일치 영상을 렌더링하는 배치 제작 스크립트, 그리고 플랫폼별 비용 계산. 아래에 삽입된 각 클립은 옆에 표시된 것과 완전히 동일한 요청으로 생성되었습니다. 오디오 켜짐, API에서 바로 나온 결과입니다.

사전 조건. hiapi key(Authorization: Bearer sk-…)가 필요합니다. 이전에 /v1/tasks를 호출해 본 적이 없다면 먼저 비동기 API 생성 문서나 happyhorse-1.1 curl + Python 튜토리얼을 살펴보세요. 이 글은 해당 튜토리얼을 기반으로 하며 숏폼 워크플로에 초점을 맞춥니다.

이 모델이 숏폼에 적합한 이유

이 포맷에 중요한 세 가지 특성:

  • 네이티브 오디오. 환경음, 폴리 사운드, 일회성 음향 효과가 영상과 함께 생성됩니다. '이유 없이 힐링되는' 콘텐츠와 B-roll에서 소리가 곧 콘텐츠입니다. 실제 오디오가 있는 클립은 크리에이터가 스톡 음악으로 채운 무음 AI 클립보다 확실히 우수합니다.
  • 일급 시민 9:16. aspect_ratio는 9:16(그리고 16:9, 1:1, 4:5, 21:9, 9:21 등)을 받으므로 가로 원본을 크롭해 구도를 잃는 대신 세로로 네이티브 렌더링할 수 있습니다.
  • 3–15초 범위. duration은 3에서 15 사이의 임의 정수를 받습니다. 정확히 숏폼 구간입니다. 훅은 3초, 제품 하이라이트는 4–6초, 완전한 미니 스토리는 12–15초 안에 들어갑니다.

입력 스키마는 의도적으로 작게 유지됩니다. prompt만 필수이며, 유용한 매개변수는 다음과 같습니다:

필드 값 숏폼 기본값
prompt 문자열(필수) 아래 패턴 참조
aspect_ratio 16:9, 9:16, 3:4, 4:3, 4:5, 5:4, 1:1, 9:21, 21:9 9:16
resolution 720p, 1080p 초안은 720p, 메인 게시물은 1080p
duration 정수 3–15(초) 3–5

받지 않는 것이 두 가지 있으니 요청을 낭비하며 알아내지 마세요. audio 스위치가 없고(오디오는 항상 켜짐), seed도 없습니다. 둘 중 하나를 보내면 400 검증 오류가 반환됩니다.

세 가지 실제 클립, 세 가지 숏폼 유형

이것들은 숏폼 피드를 지배하는 세 가지 포맷이며, 각각 한 번의 API 호출로 생성되었습니다. 프롬프트는 조정 가능한 반복 패턴을 따릅니다: 포맷 태그 → 주체와 동작 → 구도 → 조명 → 오디오 힌트.

1. 라이프스타일 B-roll(카페 클래식)

{
  "model": "happyhorse-1.1/text-to-video",
  "input": {
    "prompt": "세로 숏폼 테스트: 밝은 카페에서 바리스타가 라테 아트를 만들고 있다, 스마트폰 스타일의 세로 구도, 우유 스티밍과 카페 대화의 자연스러운 오디오.",
    "duration": 4,
    "resolution": "720p",
    "aspect_ratio": "9:16"
  }
}

프롬프트 끝의 오디오 힌트('우유 스티밍과 카페 대화')에 주목하세요. 원하는 소리를 명시하는 것이 이 모델을 쓸 때 가장 효과가 큰 기법입니다. 프롬프트하지 않아도 오디오는 생성되지만, 묘사하면 쓸 만한 환경음 트랙을 얻습니다.

2. 제품 출시 티저

{
  "model": "happyhorse-1.1/text-to-video",
  "input": {
    "prompt": "제품 출시 티저, 세로 9:16: 크림색과 번트 오렌지색의 두툼한 레트로 스니커가 무광 검은 턴테이블 위에서 천천히 회전하고, 하드 림 라이트가 실루엣을 강조하며, 미세한 먼지 입자가 빔 사이로 떠다니고, 어두운 스튜디오 배경, 제목 오버레이를 위한 충분한 빈 공간이 위쪽에 있음. 임팩트 있고 시네마틱. 네이티브 오디오: 낮게 웅웅거리는 베이스와 스니커의 회전이 끝날 때의 부드러운 휙 소리.",
    "duration": 3,
    "resolution": "720p",
    "aspect_ratio": "9:16"
  }
}

여기에는 숏폼 특유의 기법이 두 가지 있습니다. 첫째, '제목 오버레이를 위한 충분한 빈 공간이 위쪽에 있음'—편집기에서 이 클립 위에 텍스트를 올릴 것이므로 모델에게 네거티브 스페이스를 남기라고 요청하여 자막이 화면을 두고 경쟁하지 않게 합니다. 둘째, 오디오는 환경음이 아니라 설계된 것입니다. 낮은 베이스 웅웅거림과 동작 비트에 동기화된 휙 소리는 바로 제품 티저가 사용하는 사운드입니다.

3. 이유 없이 힐링되는 매크로 루프

{
  "model": "happyhorse-1.1/text-to-video",
  "input": {
    "prompt": "이유 없이 힐링되는 매크로, 세로 9:16: 날카로운 팔레트 나이프가 흰 탁자 위의 연한 민트색 키네틱 샌드를 깔끔하게 가르고, 절단면이 슬로모션으로 부서지며 알갱이가 쏟아지고, 부드럽고 균일한 스튜디오 조명, 익스트림 클로즈업이 화면을 가득 채움. 네이티브 오디오: 자를 때의 건조한 알갱이 바스락 소리, 음악 없음.",
    "duration": 3,
    "resolution": "720p",
    "aspect_ratio": "9:16"
  }
}

'음악 없음'이 중요합니다. ASMR류 콘텐츠에서는 모델이 오디오 예산을 폴리 사운드(알갱이 바스락 소리)에 써야 하며, 명시하면 일반적인 배경음악을 추가하는 것을 방지할 수 있습니다.

숏폼에 적용되는 프롬프트 패턴

위 클립과 그 뒤의 실행에서 정리하면:

  1. 포맷으로 시작하세요. '세로 숏폼', '제품 출시 티저, 세로 9:16', '이유 없이 힐링되는 매크로'로 시작하세요. 모델이 지정한 화면 비율에 맞춰 구도를 잡습니다. 스마트폰 스타일 구도는 와이드스크린 시네마틱 샷과 느낌이 다릅니다.
  2. 하나의 주체, 하나의 동작. 3–5초는 한 비트입니다. '바리스타가 라테 아트를 만든다'는 잘 되지만, 4초 안에 삼막 스토리를 말하면 뭉개지기만 합니다. 여러 비트가 필요하면 여러 클립을 생성하고 이어 붙이세요. 실제 숏폼도 그렇게 편집됩니다.
  3. 한 문장으로 오디오를 스크립트하세요. 각 프롬프트는 네이티브 오디오: <원하는 1–3가지 소리>로 끝납니다. 환경 배경음('카페 대화'), 폴리 사운드('건조한 알갱이 바스락 소리'), 또는 설계된 일회성 음향 효과('낮게 웅웅거리는 베이스와 부드러운 휙 소리') 모두 통합니다.
  4. 오버레이 공간을 확보하세요. 클립에 자막이나 제목이 들어가면 '위쪽 빈 공간'이나 '상단 1/3의 깨끗한 네거티브 스페이스'를 요청하세요. 후반에 다시 구도를 잡는 것보다 저렴합니다.
  5. 루프 가능한 상태로 끝내세요. 피드는 자동으로 반복됩니다. 시작한 곳에서 끝나는 프롬프트('스니커의 회전이 끝날 때')는 깔끔하게 루프되며 조용히 반복 시청을 쌓습니다.

비동기 워크플로: 제출, 폴링, 다운로드

모든 생성은 비동기 작업입니다. POST /v1/tasks는 즉시 taskId를 반환하고, status가 success가 될 때까지 GET /v1/tasks/:id를 폴링한 다음 output[0].url을 다운로드합니다. 4초 720p 클립은 보통 약 1–3분에 렌더링됩니다.

curl -s -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.1/text-to-video",
    "input": {
      "prompt": "세로 숏폼 테스트: 밝은 카페에서 바리스타가 라테 아트를 만들고 있다, 스마트폰 스타일의 세로 구도, 우유 스티밍과 카페 대화의 자연스러운 오디오.",
      "duration": 4,
      "resolution": "720p",
      "aspect_ratio": "9:16"
    }
  }'
# → {"code":200,"data":{"taskId":"tk-hiapi-…"},"message":"success"}

사람들이 놓치기 쉬운 운영 규칙: 출력 URL은 만료됩니다. 응답의 output[0].url에는 expireAt이 있으며, 작업이 성공하면 즉시 mp4를 다운로드해 자체 스토리지에 넣으세요. 핫링크 URL을 CMS나 스케줄링 도구에 넣지 마세요.

배치 제작: 한 번 실행으로 일주일치 클립 생성

병렬로 제출하면 작업 API가 진가를 발휘합니다. 생성이 즉시 반환되므로 올바른 규모의 패턴은 먼저 모든 작업을 제출하고, 그 다음 모든 작업을 폴링하는 것입니다. 다섯 클립이 대략 한 클립의 실제 소요 시간 안에 렌더링을 마칩니다.

import os, time, requests

API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"}

BATCH = [
    ("mon-coffee",  "세로 숏폼: 핸드드립 커피가 슬로모션으로 블루밍하고, 증기가 말려 올라가며, 따뜻한 아침 빛. 네이티브 오디오: 물 따르는 소리, 부드러운 카페 환경음.", 4),
    ("tue-sneaker", "제품 출시 티저, 세로 9:16: 네온 스니커가 얕은 물에 튀어 들어가고, 물방울이 공중에서 얼어붙고, 어두운 배경. 네이티브 오디오: 깊은 첨벙 소리.", 3),
    ("wed-sand",    "이유 없이 힐링되는 매크로, 세로 9:16: 라벤더색 키네틱 샌드가 가는 실로 잘리고, 절단면이 부서짐. 네이티브 오디오: 건조한 알갱이 바스락 소리, 음악 없음.", 3),
    ("thu-city",    "세로 숏폼: 밤에 비 내리는 네온 거리, 우산이 지나가고, 반사가 일렁임. 네이티브 오디오: 빗소리와 멀리서 들리는 차량 소리.", 5),
    ("fri-dessert", "세로 숏폼 매크로: 숟가락이 크렘 브륄레의 캐러멜 껍질을 깨고, 아래의 커스터드가 항복함. 네이티브 오디오: 바삭한 깨지는 소리, 그 다음 고요.", 3),
]

def submit(prompt, duration):
    r = requests.post(API, headers=HEADERS, json={
        "model": "happyhorse-1.1/text-to-video",
        "input": {"prompt": prompt, "duration": duration,
                  "resolution": "720p", "aspect_ratio": "9:16"},
    }, timeout=60)
    return r.json()["data"]["taskId"]

# 1) 먼저 모든 작업 제출
tasks = {key: submit(p, d) for key, p, d in BATCH}

# 2) 모두 종료 상태가 될 때까지 폴링
while tasks:
    time.sleep(10)
    for key, tid in list(tasks.items()):
        t = requests.get(f"{API}/{tid}", headers=HEADERS, timeout=30).json()["data"]
        if t["status"] == "success":
            url = t["output"][0]["url"]          # 만료됨—즉시 다운로드
            open(f"{key}.mp4", "wb").write(requests.get(url, timeout=180).content)
            print(f"done: {key}.mp4")
            del tasks[key]
        elif t["status"] == "fail":
            print(f"FAILED {key}: {t.get('error')}")
            del tasks[key]

대규모로 이 스크립트 형태를 운영할 때의 제작 노트:

  • 실패 시 다시 제출하세요, 다시 폴링하지 마세요. 실패한 작업은 종료 상태입니다. 같은 입력으로 새 작업을 제출하세요(콘텐츠 이유로 두 번 실패하면 때때로 프롬프트를 바꾸세요).
  • 매니페스트를 유지하세요. {key, prompt, taskId, local_path}를 JSON 파일에 계속 기록하고, 재시작 시 mp4가 이미 존재하는 키는 건너뛰세요. 배치 작업은 중단됩니다. 미리 계획하면 복구 가능성은 무료입니다.
  • 동시성 제한에 주의하세요. 수십 개의 작업을 제출할 경우 50개를 한순간에 보내지 말고 1–2초 간격으로 제출하세요.

비용은 얼마인가

과금은 출력 영상 초 단위로 계산됩니다(가격 페이지): 720p는 $0.16/초, 1080p는 $0.21/초이며 화면 비율과 무관합니다. 길이가 유일한 비용 레버이므로 숏폼이 이 모델을 쓰는 가장 저렴한 곳입니다:

클립 사양 비용
훅 / 힐링 루프 3초 · 720p $0.48
표준 B-roll 비트 4초 · 720p $0.64
제품 티저 5초 · 720p $0.80
메인 게시물 5초 · 1080p $1.05
매일 게시, 월 30 × 4초 초안 720p ~$19.20

실용적인 2단계 흐름: 3초/720p로 프롬프트를 반복하고(시도당 약 0.5달러), 승자만 게시용으로 1080p로 다시 렌더링하세요. 프롬프트는 해상도 간에 깔끔하게 전환되므로 창작 작업을 다시 하는 것이 아니라 클립이 가치 있다는 것을 안 뒤에야 픽셀 비용을 지불하는 것입니다.

API 출력에서 게시물까지

모델은 오디오가 포함된 완성된 세로 클립을 줍니다. 남은 것은 포장입니다:

  • 플랫폼별 길이: 3–5초 클립은 TikTok과 Reels에서 루프로 잘 작동합니다. Shorts의 경우 두세 비트를 이어 10–15초로 만들면 시청자를 더 오래 붙잡는 경우가 많습니다. duration은 최대 15초까지 가능하므로 편집하고 싶지 않다면 한 번의 호출로 완전한 미니 스토리를 커버할 수 있습니다.
  • 텍스트 오버레이: 편집기(CapCut, Premiere, ffmpeg drawtext)에서 자막을 추가하세요. '빈 공간 확보' 프롬프트 기법이 중요한 이유입니다.
  • 네이티브 오디오를 유지하세요 음악을 추가하더라도 기반 레이어로 유지하세요. 음악 아래의 실제 폴리 사운드는 음악만 있는 것보다 제작 가치를 더 잘 보여줍니다.
  • 일관된 시리즈: 숏폼은 포맷 반복에 보상을 줍니다. 프롬프트 골격(구도, 조명, 오디오 스타일)을 고정하고 주체만 바꾸세요. 위 세 가지 유형 템플릿은 그렇게 재사용되도록 설계되었습니다.

시리즈가 브랜드 자산—실제 제품 사진, 마스코트, 얼굴—을 중심으로 한다면 이 워크플로를 happyhorse-1.1 이미지-투-비디오와 함께 사용하세요: 키프레임을 한 번 생성하거나 촬영한 다음 그것으로부터 움직임을 이끌어내어 모든 게시물에서 주체를 동일하게 유지하세요.

렌더링 시작하기

가장 빠른 경로: key를 받고, 이 페이지의 바리스타 요청을 복사하면 몇 분 안에 첫 번째 오디오 포함 세로 클립을 얻게 됩니다. happyhorse-1.1 텍스트-투-비디오 모델 페이지에는 실시간 매개변수 참조와 가격이, 빠른 시작에는 인증이 설명되어 있습니다—hiapi 호출이 처음이라면요. 초안 세 개를 렌더링하고 가장 좋은 것을 고르면 커피 한 잔보다 적은 비용으로 내일의 게시물을 얻습니다.

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

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

API 문서 보기