happyhorse-1.1-i2v
이미지에 움직임을 더하는 모델입니다. 원본 이미지는 첫 프레임을 정하고, 설명은 이후 움직임의 방향을 제시합니다. 짧은 동영상을 만들며 사운드를 함께 생성할 수 있습니다.
- Ailoot · 동영상
POST /v1/videos/generationshappyhorse-1.1-i2v - Ailoot · 동영상
POST /v1/videos/generationshappyhorse-i2v - Ailoot · 동영상
POST /v1/videos/generationshappyhorse-i2v-latest
모델 소개
이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.
HappyHorse-1.1-I2V는 완성된 이미지를 출발점으로 동영상 장면을 만드는 Alibaba 모델입니다. 이미지는 첫 프레임이 되며, 텍스트로 캐릭터의 움직임, 장면의 변화, 카메라 방향 등 이후의 동작을 정할 수 있습니다. 일러스트, 제품 사진, 미리 준비한 시각적 콘셉트에 움직임을 더하는 데 적합합니다.
텍스트 설명은 선택 사항입니다. 설명이 없으면 모델이 시작 이미지의 내용을 바탕으로 가능한 움직임을 추론합니다. 설명을 명시하면 원본 이미지는 구도와 대상의 외형을 정하고, 텍스트는 시간에 따른 장면의 전개를 이끕니다.
첫 프레임에서 움직임으로
Alibaba는 캐릭터 외형의 유지, 시각적 일관성, 부드러운 움직임, 영상과 사운드의 결합을 강조합니다. 글자와 질감을 안정적으로 유지하는 것도 개발사가 제시한 목표에 포함됩니다. 이러한 특성은 모델의 설계 목표를 설명하며, 생성된 모든 프레임에서 모든 픽셀이 그대로 보존된다는 뜻은 아닙니다.
이 모드에서는 시작 이미지 하나를 사용합니다. 이미지는 초기 장면을 정하며, 새 구도를 만들기 위한 서로 독립적인 여러 참고 이미지의 집합이 아닙니다. 이 특정 버전에서 별도의 마지막 프레임을 지정할 수 있다는 내용은 발표되지 않았습니다.
JPEG, JPG, PNG, WEBP를 지원합니다. 입력 이미지의 가로와 세로는 각각 300픽셀 이상이어야 합니다. 허용되는 화면 비율은 1:2.5에서 2.5:1까지이며, 파일 크기는 최대 20MB입니다. 완성된 동영상의 화면 비율은 첫 프레임을 따릅니다.
동영상 설정
길이는 3~15초 범위에서 정수로 선택합니다. 해상도는 480P, 720P, 1080P를 선택할 수 있으며, 출력 형식은 MP4, 프레임 속도는 초당 24프레임입니다. 영상과 함께 사운드를 생성할 수 있습니다.
설명은 모든 언어로 작성할 수 있으며, 중국어가 아닌 문자는 최대 5000자, 중국어 문자는 최대 2500자까지 입력할 수 있습니다. 제한을 넘으면 초과한 부분이 잘리므로, 중요한 동작과 움직임의 특징은 입력 제한 안에 담는 것이 좋습니다. 같은 초기 난수 시드를 사용하면 비슷한 동영상이 나올 수 있지만, 프레임 단위로 완전히 일치하는 결과를 보장하지는 않습니다.
Ailoot · 동영상 POST /v1/videos/generations happyhorse-1.1-i2v
happyhorse-1.1-i2vhappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-i2v-latest
시작하기
이미지에 움직임을 더하는 모델입니다. 원본 이미지는 첫 프레임을 정하고, 설명은 이후 움직임의 방향을 제시합니다. 짧은 동영상을 만들며 사운드를 함께 생성할 수 있습니다.
- 허용 입력
- 텍스트 · 이미지
- 결과
- 동영상
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot · 동영상 POST /v1/videos/generations
- 입력
text,image- 출력
video- 출력 형식
- mp4
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 happyhorse-1.1-i2v | 기본값— |
필드prompt | 유형string | 요건선택 사항 | 값과 한도 최소 길이: 1 | 기본값— |
필드duration | 유형integer | 요건선택 사항 | 값과 한도 최솟값: 3 최댓값: 15 단위: 초 | 기본값5 |
필드resolution | 유형string | 요건선택 사항 | 값과 한도 480P, 720P, 1080P | 기본값720P |
필드ratio | 유형string | 요건지원되지 않음 | 값과 한도 | 기본값— |
필드image_urls | 유형https_url|data_image_url[] | 요건필수 | 값과 한도 최소 항목 수: 1 최대 항목 수: 1 디코딩 후 최대 바이트 수: 20,971,520 MIME 유형: image/jpeg, image/png, image/webp | 기본값— |
입력 자료 조합
first_frame_to_video · 필수: image_urls
메서드 매개변수와 수명 주기
| 매개변수 | 명세 |
|---|---|
매개변수content_type | 명세application/json |
매개변수required | 명세model, image_urls |
매개변수material_types | 명세text, image |
매개변수optional | 명세duration, resolution, ratio, prompt |
매개변수duration_integer_range | 명세3, 15 |
매개변수default_duration | 명세5 |
매개변수resolution | 명세480P, 720P, 1080P |
매개변수default_resolution | 명세720P |
매개변수ratio | 명세 |
매개변수ratio_must_omit | 명세true |
매개변수image_urls | 명세{"min_count":1,"max_count":1,"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 메서드 요금
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_URL:?Set the HTTPS URL of your actual first-frame image}"
export AILOOT_IMAGE_URL
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-1.1-i2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
u=os.environ["AILOOT_IMAGE_URL"]
z=urlsplit(u)
if z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Set the actual HTTPS image URL")
p["image_urls"]=[u]
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}/contentGET /v1/videos/generations/{request_id}/content
작업 상태 확인
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
완료된 자산 모두 저장
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
기타 콘텐츠 조회
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-i2v, happyhorse-i2v, happyhorse-i2v-latest
메서드 경로 별칭
위에 표시된 메서드 경로를 사용하세요.
관련 호출용 ID
Ailoot · 동영상 POST /v1/videos/generations happyhorse-i2v
happyhorse-i2vhappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-i2v-latest
시작하기
이미지에 움직임을 더하는 모델입니다. 원본 이미지는 첫 프레임을 정하고, 설명은 이후 움직임의 방향을 제시합니다. 짧은 동영상을 만들며 사운드를 함께 생성할 수 있습니다.
- 허용 입력
- 텍스트 · 이미지
- 결과
- 동영상
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot · 동영상 POST /v1/videos/generations
- 입력
text,image- 출력
video- 출력 형식
- mp4
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 happyhorse-i2v | 기본값— |
필드prompt | 유형string | 요건선택 사항 | 값과 한도 최소 길이: 1 | 기본값— |
필드duration | 유형integer | 요건선택 사항 | 값과 한도 최솟값: 3 최댓값: 15 단위: 초 | 기본값5 |
필드resolution | 유형string | 요건선택 사항 | 값과 한도 480P, 720P, 1080P | 기본값720P |
필드ratio | 유형string | 요건지원되지 않음 | 값과 한도 | 기본값— |
필드image_urls | 유형https_url|data_image_url[] | 요건필수 | 값과 한도 최소 항목 수: 1 최대 항목 수: 1 디코딩 후 최대 바이트 수: 20,971,520 MIME 유형: image/jpeg, image/png, image/webp | 기본값— |
입력 자료 조합
first_frame_to_video · 필수: 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 메서드 요금
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_URL:?Set the HTTPS URL of your actual first-frame image}"
export AILOOT_IMAGE_URL
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-i2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
u=os.environ["AILOOT_IMAGE_URL"]
z=urlsplit(u)
if z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Set the actual HTTPS image URL")
p["image_urls"]=[u]
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}/contentGET /v1/videos/generations/{request_id}/content
작업 상태 확인
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
완료된 자산 모두 저장
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
기타 콘텐츠 조회
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-i2v, happyhorse-i2v, happyhorse-i2v-latest
메서드 경로 별칭
위에 표시된 메서드 경로를 사용하세요.
관련 호출용 ID
Ailoot · 동영상 POST /v1/videos/generations happyhorse-i2v-latest
happyhorse-i2v-latesthappyhorse-1.1-i2vhappyhorse-i2vhappyhorse-i2v-latest
시작하기
이미지에 움직임을 더하는 모델입니다. 원본 이미지는 첫 프레임을 정하고, 설명은 이후 움직임의 방향을 제시합니다. 짧은 동영상을 만들며 사운드를 함께 생성할 수 있습니다.
- 허용 입력
- 텍스트 · 이미지
- 결과
- 동영상
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot · 동영상 POST /v1/videos/generations
- 입력
text,image- 출력
video- 출력 형식
- mp4
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 happyhorse-i2v-latest | 기본값— |
필드prompt | 유형string | 요건선택 사항 | 값과 한도 최소 길이: 1 | 기본값— |
필드duration | 유형integer | 요건선택 사항 | 값과 한도 최솟값: 3 최댓값: 15 단위: 초 | 기본값5 |
필드resolution | 유형string | 요건선택 사항 | 값과 한도 480P, 720P, 1080P | 기본값720P |
필드ratio | 유형string | 요건지원되지 않음 | 값과 한도 | 기본값— |
필드image_urls | 유형https_url|data_image_url[] | 요건필수 | 값과 한도 최소 항목 수: 1 최대 항목 수: 1 디코딩 후 최대 바이트 수: 20,971,520 MIME 유형: image/jpeg, image/png, image/webp | 기본값— |
입력 자료 조합
first_frame_to_video · 필수: 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 메서드 요금
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_URL:?Set the HTTPS URL of your actual first-frame image}"
export AILOOT_IMAGE_URL
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-i2v-latest", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
u=os.environ["AILOOT_IMAGE_URL"]
z=urlsplit(u)
if z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Set the actual HTTPS image URL")
p["image_urls"]=[u]
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}/contentGET /v1/videos/generations/{request_id}/content
작업 상태 확인
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
완료된 자산 모두 저장
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
기타 콘텐츠 조회
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-i2v, happyhorse-i2v, happyhorse-i2v-latest
메서드 경로 별칭
위에 표시된 메서드 경로를 사용하세요.
관련 호출용 ID
FAQ · happyhorse-1.1-i2v
- 어떤 입력과 결과를 사용할 수 있나요?
POST /v1/videos/generations·happyhorse-1.1-i2v:text,image→videoPOST /v1/videos/generations·happyhorse-i2v:text,image→videoPOST /v1/videos/generations·happyhorse-i2v-latest:text,image→video- 요청은 어떤 필드를 사용하나요?
POST /v1/videos/generations·happyhorse-1.1-i2v:model,prompt,duration,resolution,image_urlsPOST /v1/videos/generations·happyhorse-i2v:model,prompt,duration,resolution,image_urlsPOST /v1/videos/generations·happyhorse-i2v-latest:model,prompt,duration,resolution,image_urls- 어떤 제한이 적용되나요?
POST /v1/videos/generations·happyhorse-1.1-i2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-i2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-i2v-latest:duration.minimum:3;duration.maximum:15