모델

happyhorse-1.1-r2v

Markdown · JSON

happyhorse-1.1-r2v

참고 이미지와 텍스트 시나리오를 바탕으로 동영상을 생성하는 모델입니다. 새로운 장면에서 캐릭터의 외형, 사물, 시각적 스타일을 유지하는 데 도움이 됩니다.

모델 소개

이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.

HappyHorse-1.1-R2V는 참고 이미지와 텍스트 지시를 바탕으로 새로운 동영상 장면을 만듭니다. Alibaba는 움직임을 생성할 때 캐릭터와 대상이 알아볼 수 있는 모습과 시각적 스타일을 유지하는 데 초점을 맞춥니다. 참고 이미지는 장면의 내용과 외형을 정하고, 텍스트는 각 요소가 어떻게 상호작용해야 하는지 설명합니다.

참고 이미지의 역할

이미지는 1~9개를 사용할 수 있습니다. 캐릭터, 사물, 주변 환경, 미술적 표현을 지정하는 데 쓸 수 있습니다. 설명에 참고 이미지의 번호와 그 이미지 속 특정 대상을 명시하면, 시각 자료를 원하는 동작 부분과 연결할 수 있습니다. 여러 이미지의 요소를 하나의 구도에 결합해야 할 때 특히 유용합니다.

시작 프레임을 사용하는 모드와 달리, 이 모드의 참고 이미지는 새로운 장면의 내용을 구성하는 기반입니다. 텍스트 지시는 필수이며, 대상의 외형을 동작, 카메라 움직임, 전체 연출과 연결합니다. 개발사는 시각적 일관성과 영화적인 움직임을 강조합니다. 결과물은 원본 이미지를 편집해 이어 붙인 영상이 아니라 생성된 영상입니다.

각각 최대 20MB인 JPEG, JPG, PNG, WEBP를 지원합니다. 이미지의 짧은 변은 400픽셀 이상이어야 하며, 720P 이상 수준의 자료를 권장합니다. 이 모드의 입력은 이미지와 텍스트로 구성됩니다.

길이, 화면 비율, 사운드

결과물은 초당 24프레임의 MP4로 저장됩니다. 길이는 3~15초 범위에서 정수로 지정합니다. 해상도는 480P, 720P, 1080P 중에서 선택할 수 있으며, 사운드 생성도 지원합니다.

가로, 세로, 정사각형 화면 비율을 지원합니다. 선택 가능한 비율은 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9입니다. 형식을 선택하면 새로운 장면을 구성할 화면 공간을 미리 정할 수 있습니다.

텍스트는 모든 언어로 작성할 수 있습니다. 중국어가 아닌 문자는 최대 5000자, 중국어 문자는 최대 2500자까지 입력할 수 있으며, 초과한 부분은 잘립니다. 참고 이미지의 핵심 역할, 동작, 움직임을 이 제한 안에 담아야 합니다. 초기 난수 시드는 여러 결과가 비슷해지도록 유도할 수 있지만, 하나의 동영상이 정확히 재현되는 것을 보장하지는 않습니다.

Ailoot · 동영상 POST /v1/videos/generations happyhorse-1.1-r2v

happyhorse-1.1-r2v

Alibaba /happyhorse-1.1-r2v
모델 ID
  • happyhorse-1.1-r2v
  • happyhorse-r2v
  • happyhorse-r2v-latest

시작하기

참고 이미지와 텍스트 시나리오를 바탕으로 동영상을 생성하는 모델입니다. 새로운 장면에서 캐릭터의 외형, 사물, 시각적 스타일을 유지하는 데 도움이 됩니다.

허용 입력
텍스트 · 이미지
결과
동영상

Ailoot에서 사용 가능 · 입력 및 메서드

Ailoot · 동영상 POST /v1/videos/generations
입력
text, image
출력
video
출력 형식
mp4
필드유형요건값과 한도기본값
필드model유형string요건필수값과 한도
happyhorse-1.1-r2v
기본값—
필드prompt유형string요건필수값과 한도
최소 길이: 1
기본값—
필드duration유형integer요건선택 사항값과 한도
최솟값: 3
최댓값: 15
단위: 초
기본값5
필드resolution유형string요건선택 사항값과 한도
480P, 720P, 1080P
기본값720P
필드ratio유형string요건선택 사항값과 한도
16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9
기본값16:9
필드image_urls유형https_url|data_image_url[]요건필수값과 한도
최소 항목 수: 1
최대 항목 수: 9
디코딩 후 최대 바이트 수: 20,971,520
MIME 유형: image/jpeg, image/png, image/webp
기본값—
입력 자료 조합

reference_images_to_video · 필수: prompt, image_urls

메서드 매개변수와 수명 주기
매개변수명세
매개변수content_type명세application/json
매개변수required명세model, prompt, image_urls
매개변수material_types명세text, image
매개변수optional명세duration, resolution, ratio
매개변수duration_integer_range명세3, 15
매개변수default_duration명세5
매개변수resolution명세480P, 720P, 1080P
매개변수default_resolution명세720P
매개변수ratio명세16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9
매개변수ratio_must_omit명세false
매개변수image_urls명세{"min_count":1,"max_count":9,"schemes":["https","base64 래스터 데이터"],"max_data_image_bytes":20971520}

수명 주기: submit_once_poll_original

GET /v1/videos/{request_id}

GET /v1/videos/generations/{request_id}

GET /v1/videos/{request_id}/content

GET /v1/videos/generations/{request_id}/content

메서드 형식과 ID는 정확합니다. 공급자의 기능 지원과 요청 수락은 별개입니다.

요금

Ailoot 메서드 요금

Ailoot 동영상POST /v1/videos/generations
출력
US$0.18 1080p 해상도 초당
출력
US$0.07 480p 해상도 초당
출력
US$0.14 720p 해상도 초당

Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. 금액 확보와 정산 방식 →

요청 예제

Ailoot · 동영상

참조 이미지
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URLS_FILE:?Set a JSON file containing your actual reference-image URLs}"
export AILOOT_IMAGE_URLS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-1.1-r2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
f=Path(os.environ["AILOOT_IMAGE_URLS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual reference URL JSON file")
urls=json.loads(f.read_text())
if not isinstance(urls,list) or not 1<=len(urls)<=9:raise SystemExit("Provide one to nine reference-image URLs")
for u in urls:
    z=urlsplit(u) if isinstance(u,str) else None
    if not z or z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Each reference must be an actual HTTPS image URL")
p["image_urls"]=urls
p["ratio"]="16:9"
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
print(json.dumps(r))
PY_RESULT

결과 수신 및 저장

Ailoot · 동영상

mp4

  • GET /v1/videos/{request_id}
  • GET /v1/videos/generations/{request_id}
  • GET /v1/videos/{request_id}/content
  • GET /v1/videos/generations/{request_id}/content
작업 상태 확인
GET · 상태 조회
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
완료된 자산 모두 저장
GET · 완료된 모든 자산 조회
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
기타 콘텐츠 조회
GET · 콘텐츠 조회
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
완료된 결과 모두 보관

완료된 모든 동영상과 반환된 파일을 저장하고, 실제로 반환된 모든 자산 URL에서 가져오세요.

반환된 모든 데이터 항목/출력 인덱스를 보존하세요. content_url은 첫 번째 출력만 가리킵니다. 실제 콘텐츠 경로/자산을 모두 가져오세요. index 없는 콘텐츠 GET은 전체 출력을 의미하지 않습니다.

원래 응답을 확인해야 할 경우

기존 원래 작업을 조회하세요. 전송 결과를 알 수 없는 요청을 절대로 다시 제출하지 마세요.

응답 필드
필드유형
필드id유형string
필드object유형string
필드model유형string
필드status유형string
필드content_url유형signed URL
필드data[]유형signed URL
필드usage유형object
필드result_pending_check유형boolean
오류와 다음 단계
응답조건다음 단계
응답400 · invalid_request_error조건필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음다음 단계새 생성 요청 전에 표시된 필드를 수정하세요.
응답409 · video_not_ready조건원래 결과 콘텐츠를 아직 사용할 수 없음다음 단계원래 반환된 ID를 폴링하고 Retry-After를 준수하세요.
응답server_error조건반환된 응답에 작업 또는 결과 확인이 필요하다고 표시되어 있습니다다음 단계최초로 반환된 작업/태스크 ID, 요청 헤더와 응답을 보관하고, 지원되는 조회 방식으로 해당 최초 작업을 계속 조회하세요. 생성 요청을 다시 제출하지 마세요.

별칭

모델 별칭

Ailoot happyhorse-1.1-r2v, happyhorse-r2v, happyhorse-r2v-latest

메서드 경로 별칭

위에 표시된 메서드 경로를 사용하세요.

관련 호출용 ID

happyhorse-1.1-r2v, happyhorse-r2v, happyhorse-r2v-latest

Ailoot · 동영상 POST /v1/videos/generations happyhorse-r2v

happyhorse-r2v

Alibaba /happyhorse-r2v
모델 ID
  • happyhorse-1.1-r2v
  • happyhorse-r2v
  • happyhorse-r2v-latest

시작하기

참고 이미지와 텍스트 시나리오를 바탕으로 동영상을 생성하는 모델입니다. 새로운 장면에서 캐릭터의 외형, 사물, 시각적 스타일을 유지하는 데 도움이 됩니다.

허용 입력
텍스트 · 이미지
결과
동영상

Ailoot에서 사용 가능 · 입력 및 메서드

Ailoot · 동영상 POST /v1/videos/generations
입력
text, image
출력
video
출력 형식
mp4
필드유형요건값과 한도기본값
필드model유형string요건필수값과 한도
happyhorse-r2v
기본값—
필드prompt유형string요건필수값과 한도
최소 길이: 1
기본값—
필드duration유형integer요건선택 사항값과 한도
최솟값: 3
최댓값: 15
단위: 초
기본값5
필드resolution유형string요건선택 사항값과 한도
480P, 720P, 1080P
기본값720P
필드ratio유형string요건선택 사항값과 한도
16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9
기본값16:9
필드image_urls유형https_url|data_image_url[]요건필수값과 한도
최소 항목 수: 1
최대 항목 수: 9
디코딩 후 최대 바이트 수: 20,971,520
MIME 유형: image/jpeg, image/png, image/webp
기본값—
입력 자료 조합

reference_images_to_video · 필수: prompt, image_urls

메서드 매개변수와 수명 주기
매개변수명세
매개변수material_types명세text, image
매개변수required명세null
매개변수optional_controls명세null

수명 주기: submit_once_poll_original

GET /v1/videos/{request_id}

GET /v1/videos/generations/{request_id}

GET /v1/videos/{request_id}/content

GET /v1/videos/generations/{request_id}/content

메서드 형식과 ID는 정확합니다. 공급자의 기능 지원과 요청 수락은 별개입니다.

요금

Ailoot 메서드 요금

Ailoot 동영상POST /v1/videos/generations
출력
US$0.18 1080p 해상도 초당
출력
US$0.07 480p 해상도 초당
출력
US$0.14 720p 해상도 초당

Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. 금액 확보와 정산 방식 →

요청 예제

Ailoot · 동영상

참조 이미지
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URLS_FILE:?Set a JSON file containing your actual reference-image URLs}"
export AILOOT_IMAGE_URLS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-r2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
f=Path(os.environ["AILOOT_IMAGE_URLS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual reference URL JSON file")
urls=json.loads(f.read_text())
if not isinstance(urls,list) or not 1<=len(urls)<=9:raise SystemExit("Provide one to nine reference-image URLs")
for u in urls:
    z=urlsplit(u) if isinstance(u,str) else None
    if not z or z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Each reference must be an actual HTTPS image URL")
p["image_urls"]=urls
p["ratio"]="16:9"
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
print(json.dumps(r))
PY_RESULT

결과 수신 및 저장

Ailoot · 동영상

mp4

  • GET /v1/videos/{request_id}
  • GET /v1/videos/generations/{request_id}
  • GET /v1/videos/{request_id}/content
  • GET /v1/videos/generations/{request_id}/content
작업 상태 확인
GET · 상태 조회
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
완료된 자산 모두 저장
GET · 완료된 모든 자산 조회
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
기타 콘텐츠 조회
GET · 콘텐츠 조회
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
완료된 결과 모두 보관

완료된 모든 동영상과 반환된 파일을 저장하고, 실제로 반환된 모든 자산 URL에서 가져오세요.

반환된 모든 데이터 항목/출력 인덱스를 보존하세요. content_url은 첫 번째 출력만 가리킵니다. 실제 콘텐츠 경로/자산을 모두 가져오세요. index 없는 콘텐츠 GET은 전체 출력을 의미하지 않습니다.

원래 응답을 확인해야 할 경우

기존 원래 작업을 조회하세요. 전송 결과를 알 수 없는 요청을 절대로 다시 제출하지 마세요.

응답 필드
필드유형
필드id유형string
필드object유형string
필드model유형string
필드status유형string
필드content_url유형signed URL
필드data[]유형signed URL
필드usage유형object
필드result_pending_check유형boolean
오류와 다음 단계
응답조건다음 단계
응답400 · invalid_request_error조건필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음다음 단계새 생성 요청 전에 표시된 필드를 수정하세요.
응답409 · video_not_ready조건원래 결과 콘텐츠를 아직 사용할 수 없음다음 단계원래 반환된 ID를 폴링하고 Retry-After를 준수하세요.
응답server_error조건반환된 응답에 작업 또는 결과 확인이 필요하다고 표시되어 있습니다다음 단계최초로 반환된 작업/태스크 ID, 요청 헤더와 응답을 보관하고, 지원되는 조회 방식으로 해당 최초 작업을 계속 조회하세요. 생성 요청을 다시 제출하지 마세요.

별칭

모델 별칭

Ailoot happyhorse-1.1-r2v, happyhorse-r2v, happyhorse-r2v-latest

메서드 경로 별칭

위에 표시된 메서드 경로를 사용하세요.

관련 호출용 ID

happyhorse-1.1-r2v, happyhorse-r2v, happyhorse-r2v-latest

Ailoot · 동영상 POST /v1/videos/generations happyhorse-r2v-latest

happyhorse-r2v-latest

Alibaba /happyhorse-r2v-latest
모델 ID
  • happyhorse-1.1-r2v
  • happyhorse-r2v
  • happyhorse-r2v-latest

시작하기

참고 이미지와 텍스트 시나리오를 바탕으로 동영상을 생성하는 모델입니다. 새로운 장면에서 캐릭터의 외형, 사물, 시각적 스타일을 유지하는 데 도움이 됩니다.

허용 입력
텍스트 · 이미지
결과
동영상

Ailoot에서 사용 가능 · 입력 및 메서드

Ailoot · 동영상 POST /v1/videos/generations
입력
text, image
출력
video
출력 형식
mp4
필드유형요건값과 한도기본값
필드model유형string요건필수값과 한도
happyhorse-r2v-latest
기본값—
필드prompt유형string요건필수값과 한도
최소 길이: 1
기본값—
필드duration유형integer요건선택 사항값과 한도
최솟값: 3
최댓값: 15
단위: 초
기본값5
필드resolution유형string요건선택 사항값과 한도
480P, 720P, 1080P
기본값720P
필드ratio유형string요건선택 사항값과 한도
16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9
기본값16:9
필드image_urls유형https_url|data_image_url[]요건필수값과 한도
최소 항목 수: 1
최대 항목 수: 9
디코딩 후 최대 바이트 수: 20,971,520
MIME 유형: image/jpeg, image/png, image/webp
기본값—
입력 자료 조합

reference_images_to_video · 필수: prompt, image_urls

메서드 매개변수와 수명 주기
매개변수명세
매개변수material_types명세text, image
매개변수required명세null
매개변수optional_controls명세null

수명 주기: submit_once_poll_original

GET /v1/videos/{request_id}

GET /v1/videos/generations/{request_id}

GET /v1/videos/{request_id}/content

GET /v1/videos/generations/{request_id}/content

메서드 형식과 ID는 정확합니다. 공급자의 기능 지원과 요청 수락은 별개입니다.

요금

Ailoot 메서드 요금

Ailoot 동영상POST /v1/videos/generations
출력
US$0.18 1080p 해상도 초당
출력
US$0.07 480p 해상도 초당
출력
US$0.14 720p 해상도 초당

Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. 금액 확보와 정산 방식 →

요청 예제

Ailoot · 동영상

참조 이미지
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URLS_FILE:?Set a JSON file containing your actual reference-image URLs}"
export AILOOT_IMAGE_URLS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-r2v-latest", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
f=Path(os.environ["AILOOT_IMAGE_URLS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual reference URL JSON file")
urls=json.loads(f.read_text())
if not isinstance(urls,list) or not 1<=len(urls)<=9:raise SystemExit("Provide one to nine reference-image URLs")
for u in urls:
    z=urlsplit(u) if isinstance(u,str) else None
    if not z or z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Each reference must be an actual HTTPS image URL")
p["image_urls"]=urls
p["ratio"]="16:9"
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
print(json.dumps(r))
PY_RESULT

결과 수신 및 저장

Ailoot · 동영상

mp4

  • GET /v1/videos/{request_id}
  • GET /v1/videos/generations/{request_id}
  • GET /v1/videos/{request_id}/content
  • GET /v1/videos/generations/{request_id}/content
작업 상태 확인
GET · 상태 조회
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
완료된 자산 모두 저장
GET · 완료된 모든 자산 조회
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
기타 콘텐츠 조회
GET · 콘텐츠 조회
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
완료된 결과 모두 보관

완료된 모든 동영상과 반환된 파일을 저장하고, 실제로 반환된 모든 자산 URL에서 가져오세요.

반환된 모든 데이터 항목/출력 인덱스를 보존하세요. content_url은 첫 번째 출력만 가리킵니다. 실제 콘텐츠 경로/자산을 모두 가져오세요. index 없는 콘텐츠 GET은 전체 출력을 의미하지 않습니다.

원래 응답을 확인해야 할 경우

기존 원래 작업을 조회하세요. 전송 결과를 알 수 없는 요청을 절대로 다시 제출하지 마세요.

응답 필드
필드유형
필드id유형string
필드object유형string
필드model유형string
필드status유형string
필드content_url유형signed URL
필드data[]유형signed URL
필드usage유형object
필드result_pending_check유형boolean
오류와 다음 단계
응답조건다음 단계
응답400 · invalid_request_error조건필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음다음 단계새 생성 요청 전에 표시된 필드를 수정하세요.
응답409 · video_not_ready조건원래 결과 콘텐츠를 아직 사용할 수 없음다음 단계원래 반환된 ID를 폴링하고 Retry-After를 준수하세요.
응답server_error조건반환된 응답에 작업 또는 결과 확인이 필요하다고 표시되어 있습니다다음 단계최초로 반환된 작업/태스크 ID, 요청 헤더와 응답을 보관하고, 지원되는 조회 방식으로 해당 최초 작업을 계속 조회하세요. 생성 요청을 다시 제출하지 마세요.

별칭

모델 별칭

Ailoot happyhorse-1.1-r2v, happyhorse-r2v, happyhorse-r2v-latest

메서드 경로 별칭

위에 표시된 메서드 경로를 사용하세요.

관련 호출용 ID

happyhorse-1.1-r2v, happyhorse-r2v, happyhorse-r2v-latest

FAQ · happyhorse-1.1-r2v
어떤 입력과 결과를 사용할 수 있나요?

POST /v1/videos/generations · happyhorse-1.1-r2v: text, image → video

POST /v1/videos/generations · happyhorse-r2v: text, image → video

POST /v1/videos/generations · happyhorse-r2v-latest: text, image → video

요청은 어떤 필드를 사용하나요?

POST /v1/videos/generations · happyhorse-1.1-r2v: model, prompt, duration, resolution, ratio, image_urls

POST /v1/videos/generations · happyhorse-r2v: model, prompt, duration, resolution, ratio, image_urls

POST /v1/videos/generations · happyhorse-r2v-latest: model, prompt, duration, resolution, ratio, image_urls

어떤 제한이 적용되나요?

POST /v1/videos/generations · happyhorse-1.1-r2v: duration.minimum: 3; duration.maximum: 15

POST /v1/videos/generations · happyhorse-r2v: duration.minimum: 3; duration.maximum: 15

POST /v1/videos/generations · happyhorse-r2v-latest: duration.minimum: 3; duration.maximum: 15

자세히 보기

Claude Code, OpenCode, Hermes, 자체 앱에 Ailoot를 연결하세요.

회사와 그 프로젝트 포트폴리오

회사와 그 프로젝트 포트폴리오: 수백만 고객, 매월 수십억 규모의 매출.

할인받아 토큰을 구매하세요.

정기 작업에는 구독 할인, 토큰 구매에는 최대 50% 프로모션 코드.

구독
정기 요청에 맞는 할인 요금제를 선택하세요.
최대 50% 프로모션 코드
구매할 때 코드를 넣으면 진행 중 행사에 따라 가격을 다시 계산합니다.
이력의 지출
요청마다 모델, 토큰, 금액을 저장합니다.

구독 선택 · 모델 가격 보기

판매하는 제품에 API를 연결하세요.

Ailoot 공식 이용 조건과 라이선스 계약으로 SaaS, 앱, 봇에 사용하세요. 재판매에는 리셀러 라이선스를 요청하세요.

상업용 앱
서비스의 유료 기능에 텍스트, 이미지, 영상, 소리 생성을 넣으세요.
리셀러 라이선스
프로젝트 설명과 접근 구조를 보내 사용·재판매의 서면 조건을 요청하세요.
사이트의 문서
연결 전에 공식 이용 조건, 라이선스 계약, 데이터 처리 정책을 읽을 수 있습니다.

리셀러 라이선스 요청 · 공식 이용 조건과 라이선스 계약