happyhorse-1.1-t2v
텍스트 설명을 바탕으로 사운드가 있는 짧은 동영상을 만드는 모델입니다. 움직임, 구도, 시각적 스타일을 말로 지정하는 장면에 적합합니다.
- Ailoot · 동영상
POST /v1/videos/generationshappyhorse-1.1-t2v - Ailoot · 동영상
POST /v1/videos/generationshappyhorse-t2v - Ailoot · 동영상
POST /v1/videos/generationshappyhorse-t2v-latest
모델 소개
이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.
HappyHorse-1.1-T2V는 텍스트를 바탕으로 짧은 동영상 장면을 만드는 Alibaba 모델입니다. 설명으로 캐릭터, 동작, 배경, 시각적 표현을 지정하며, 이 모드에는 원본 이미지가 필요하지 않습니다. 모델은 영상을 구성하고 함께 재생할 사운드도 만들 수 있습니다.
개발사는 장면의 의미에 대한 이해, 영화적인 연출, 표현력 있는 움직임을 강조합니다. 텍스트로 분위기, 캐릭터의 동작, 사물의 움직임, 물리적인 역동성을 정할 수 있습니다. 무엇이 일어나야 하는지를 중심으로 장면을 구성한 뒤, 조명, 앵글, 카메라 움직임으로 연출 방향을 잡을 수 있습니다.
말로 정하는 연출
지시는 필수이며 모든 언어로 작성할 수 있습니다. 중국어가 아닌 문자는 최대 5000자, 중국어 문자는 최대 2500자까지 입력할 수 있으며, 초과한 부분은 잘립니다. 동작, 주변 환경, 중요한 시각적 세부 사항을 이 제한 안에 설명해야 합니다. 이러한 지시는 완성된 첫 프레임을 제공하는 대신, 모델이 새로운 장면을 만들 여지를 남깁니다.
이 모드에서는 텍스트가 주된 제어 수단입니다. 캐릭터나 사물의 구체적인 모습은 말로 묘사할 수 있습니다. 외형을 별도의 이미지로 전달하는 기능은 같은 제품군의 다른 모드에 해당합니다. 결과는 전체 지시에 따라 달라지므로, 같은 초기 난수 시드는 비슷한 결과를 얻는 데 도움이 되지만 정확한 재현을 보장하지는 않습니다.
영상과 사운드
HappyHorse-1.1의 동영상 길이는 3~15초 범위에서 정수로 선택합니다. 480P, 720P, 1080P 해상도를 지원합니다. 완성된 파일은 초당 24프레임의 MP4입니다. 모델은 영상과 함께 사운드를 생성해 장면에서 일어나는 일과 연결할 수 있습니다.
화면 비율은 미리 지정할 수 있습니다. 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9를 지원하며, 넓은 영화적 화면부터 길쭉한 세로 영상까지 선택할 수 있습니다. 해상도, 형식, 길이는 결과물의 크기를 정하고, 내용과 움직임은 텍스트로 정합니다.
이 버전은 말로 표현한 구상에서 새로운 장면을 만드는 용도입니다. 연출을 텍스트로 설명해야 하는 짧은 에피소드, 시각적 아이디어, 분위기 있는 동영상에 적합합니다.
Ailoot · 동영상 POST /v1/videos/generations happyhorse-1.1-t2v
happyhorse-1.1-t2vhappyhorse-1.1-t2vhappyhorse-t2vhappyhorse-t2v-latest
시작하기
텍스트 설명을 바탕으로 사운드가 있는 짧은 동영상을 만드는 모델입니다. 움직임, 구도, 시각적 스타일을 말로 지정하는 장면에 적합합니다.
- 허용 입력
- 텍스트
- 결과
- 동영상
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot · 동영상 POST /v1/videos/generations
- 입력
text- 출력
video- 출력 형식
- mp4
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 happyhorse-1.1-t2v | 기본값— |
필드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[] | 요건선택 사항 | 값과 한도 최소 항목 수: 0 최대 항목 수: 0 디코딩 후 최대 바이트 수: 20,971,520 MIME 유형: image/jpeg, image/png, image/webp | 기본값— |
입력 자료 조합
텍스트로 동영상 생성 · 필수: prompt
메서드 매개변수와 수명 주기
| 매개변수 | 명세 |
|---|---|
매개변수content_type | 명세application/json |
매개변수required | 명세model, prompt |
매개변수material_types | 명세text |
매개변수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 | 명세{"max_count":0} |
수명 주기: 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_PROMPT_FILE:?Set your actual UTF-8 scene brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-1.1-t2v", "prompt": "", "duration": 5, "resolution": "720P", "ratio": "16:9"}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
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-t2v, happyhorse-t2v, happyhorse-t2v-latest
메서드 경로 별칭
위에 표시된 메서드 경로를 사용하세요.
관련 호출용 ID
Ailoot · 동영상 POST /v1/videos/generations happyhorse-t2v
happyhorse-t2vhappyhorse-1.1-t2vhappyhorse-t2vhappyhorse-t2v-latest
시작하기
텍스트 설명을 바탕으로 사운드가 있는 짧은 동영상을 만드는 모델입니다. 움직임, 구도, 시각적 스타일을 말로 지정하는 장면에 적합합니다.
- 허용 입력
- 텍스트
- 결과
- 동영상
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot · 동영상 POST /v1/videos/generations
- 입력
text- 출력
video- 출력 형식
- mp4
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 happyhorse-t2v | 기본값— |
필드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[] | 요건선택 사항 | 값과 한도 최소 항목 수: 0 최대 항목 수: 0 디코딩 후 최대 바이트 수: 20,971,520 MIME 유형: image/jpeg, image/png, image/webp | 기본값— |
입력 자료 조합
텍스트로 동영상 생성 · 필수: prompt
메서드 매개변수와 수명 주기
| 매개변수 | 명세 |
|---|---|
매개변수material_types | 명세text |
매개변수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_PROMPT_FILE:?Set your actual UTF-8 scene brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-t2v", "prompt": "", "duration": 5, "resolution": "720P", "ratio": "16:9"}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
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-t2v, happyhorse-t2v, happyhorse-t2v-latest
메서드 경로 별칭
위에 표시된 메서드 경로를 사용하세요.
관련 호출용 ID
Ailoot · 동영상 POST /v1/videos/generations happyhorse-t2v-latest
happyhorse-t2v-latesthappyhorse-1.1-t2vhappyhorse-t2vhappyhorse-t2v-latest
시작하기
텍스트 설명을 바탕으로 사운드가 있는 짧은 동영상을 만드는 모델입니다. 움직임, 구도, 시각적 스타일을 말로 지정하는 장면에 적합합니다.
- 허용 입력
- 텍스트
- 결과
- 동영상
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot · 동영상 POST /v1/videos/generations
- 입력
text- 출력
video- 출력 형식
- mp4
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 happyhorse-t2v-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[] | 요건선택 사항 | 값과 한도 최소 항목 수: 0 최대 항목 수: 0 디코딩 후 최대 바이트 수: 20,971,520 MIME 유형: image/jpeg, image/png, image/webp | 기본값— |
입력 자료 조합
텍스트로 동영상 생성 · 필수: prompt
메서드 매개변수와 수명 주기
| 매개변수 | 명세 |
|---|---|
매개변수material_types | 명세text |
매개변수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_PROMPT_FILE:?Set your actual UTF-8 scene brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-t2v-latest", "prompt": "", "duration": 5, "resolution": "720P", "ratio": "16:9"}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
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-t2v, happyhorse-t2v, happyhorse-t2v-latest
메서드 경로 별칭
위에 표시된 메서드 경로를 사용하세요.
관련 호출용 ID
FAQ · happyhorse-1.1-t2v
- 어떤 입력과 결과를 사용할 수 있나요?
POST /v1/videos/generations·happyhorse-1.1-t2v:text→videoPOST /v1/videos/generations·happyhorse-t2v:text→videoPOST /v1/videos/generations·happyhorse-t2v-latest:text→video- 요청은 어떤 필드를 사용하나요?
POST /v1/videos/generations·happyhorse-1.1-t2v:model,prompt,duration,resolution,ratio,image_urlsPOST /v1/videos/generations·happyhorse-t2v:model,prompt,duration,resolution,ratio,image_urlsPOST /v1/videos/generations·happyhorse-t2v-latest:model,prompt,duration,resolution,ratio,image_urls- 어떤 제한이 적용되나요?
POST /v1/videos/generations·happyhorse-1.1-t2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-t2v:duration.minimum:3;duration.maximum:15POST /v1/videos/generations·happyhorse-t2v-latest:duration.minimum:3;duration.maximum:15