HappyHorse
curl --request POST \
--url https://api.gravitex.ai/v1/video/generations \
--header 'Authorization: <authorization>'import requests
url = "https://api.gravitex.ai/v1/video/generations"
headers = {"Authorization": "<authorization>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<authorization>'}};
fetch('https://api.gravitex.ai/v1/video/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gravitex.ai/v1/video/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/video/generations"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gravitex.ai/v1/video/generations")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/v1/video/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body비디오 시리즈
HappyHorse
Alibaba HappyHorse 텍스트-투-비디오, 이미지-투-비디오, 참조-투-비디오
POST
/
v1
/
video
/
generations
HappyHorse
curl --request POST \
--url https://api.gravitex.ai/v1/video/generations \
--header 'Authorization: <authorization>'import requests
url = "https://api.gravitex.ai/v1/video/generations"
headers = {"Authorization": "<authorization>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<authorization>'}};
fetch('https://api.gravitex.ai/v1/video/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gravitex.ai/v1/video/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/video/generations"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gravitex.ai/v1/video/generations")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/v1/video/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body소개
HappyHorse는 Alibaba Cloud Bailian의 비디오 생성 제품군입니다: 텍스트-투-비디오(HappyHorse-T2V), 이미지-투-비디오(HappyHorse-I2V), 참조-투-비디오(HappyHorse-R2V). 물리적으로 사실적이고 부드러운 동작의 비디오를 생성합니다. 1.0은 720P 및 1080P를 지원하며, 1.1은 480P를 추가로 지원합니다. 길이는 3~15초입니다. GravitexAI 통합 비디오 API를 사용하세요: 작업 제출로task_id를 받은 후 작업 조회로 상태를 폴링하고 url을 확인합니다.
HappyHorse는 Wan 2.7과 동일한 구조로
metadata.input 및 metadata.parameters를 통해 기본 DashScope 매개변수를 전달합니다. 참조-투-비디오는 프롬프트에서 [Image 1], [Image 2](영문 괄호 형식)를 사용하며 이미지 참조만 지원합니다—비디오 참조는 없습니다.인증
string
필수
Bearer Token, 예:
Bearer sk-xxxxxxxxxx지원 모델
| 모델 ID | 설명 | 해상도 | 최대 길이 | 주요 기능 |
|---|---|---|---|---|
happyhorse-1.0-t2v | 텍스트-투-비디오 | 720P, 1080P | 15초 | 텍스트 의미, 다양한 화면 비율 |
happyhorse-1.0-i2v | 이미지-투-비디오(첫 프레임) | 720P, 1080P | 15초 | 첫 프레임 기반; 화면 비율은 입력을 따름 |
happyhorse-1.0-r2v | 참조-투-비디오 | 720P, 1080P | 15초 | 최대 9개 참조 이미지, 주체 융합 |
happyhorse-1.1-t2v | 텍스트-투-비디오 | 480P, 720P, 1080P | 15초 | 텍스트 의미, 다양한 화면 비율 |
happyhorse-1.1-i2v | 이미지-투-비디오(첫 프레임) | 480P, 720P, 1080P | 15초 | 첫 프레임 기반; 화면 비율은 입력을 따름 |
happyhorse-1.1-r2v | 참조-투-비디오 | 480P, 720P, 1080P | 15초 | 최대 9개 참조 이미지, 주체 융합 |
워크플로
- 작업 제출:
model,prompt,duration및metadata의 HappyHorse 매개변수와 함께POST /v1/video/generations. - 상태 폴링:
status가succeeded또는failed가 될 때까지 3~15초마다GET /v1/video/generations/{task_id}. - 결과 확인: 성공 시
url에 비디오 링크 포함(보통 24시간 유효—즉시 다운로드 권장).
공통 요청 구조
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
model | string | 예 | 모델 ID(위 표 참조) |
prompt | string | 경우에 따라 | 비디오 프롬프트(metadata.input.prompt와 동일) |
duration | integer | 아니오 | 길이(초); metadata.parameters.duration과 동기화 유지 |
metadata.input | object | 예 | 입력: prompt, media 등 |
metadata.parameters | object | 아니오 | 매개변수: resolution, ratio, duration, watermark, seed 등 |
제출 응답
{
"task_id": "video_69095b4ce0048190893a01510c0c98b0",
"status": "submitted",
"format": "mp4"
}
조회 응답(성공)
{
"task_id": "video_69095b4ce0048190893a01510c0c98b0",
"status": "succeeded",
"format": "mp4",
"url": "https://gravitex-ads.oss-cn-guangzhou.aliyuncs.com/2025/11/18/abc123/video.mp4"
}
사용 사례
- 텍스트-투-비디오 (T2V)
- 이미지-투-비디오 (I2V)
- 참조-투-비디오 (R2V)
텍스트 프롬프트에서 물리적으로 사실적이고 부드러운 동작의 비디오를 생성합니다.예제:
string
필수
원하는 비디오를 설명하는 텍스트 프롬프트
string
기본값:"1080P"
1.0:
720P 또는 1080P; 1.1: 480P, 720P 또는 1080Pstring
기본값:"16:9"
화면 비율:
16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9integer
기본값:"5"
길이(초), 범위 3~15
boolean
기본값:"true"
워터마크 추가(우하단 고정 텍스트 “Happy Horse”)
integer
랜덤 시드, 범위
[0, 2147483647], 재현성용curl -X POST "https://api.gravitex.ai/v1/video/generations" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse-1.0-t2v",
"prompt": "A miniature city built from cardboard and bottle caps comes alive at night. A cardboard train rolls through, tiny lights illuminating the path ahead.",
"duration": 5,
"metadata": {
"input": {
"prompt": "A miniature city built from cardboard and bottle caps comes alive at night. A cardboard train rolls through, tiny lights illuminating the path ahead."
},
"parameters": {
"resolution": "720P",
"ratio": "16:9",
"duration": 5,
"watermark": false
}
}
}'
첫 프레임 이미지와 선택적 텍스트 가이드로 비디오를 생성합니다. 화면 비율은 첫 프레임을 따릅니다—
첫 프레임 예제:
ratio를 전달하지 마세요.media 유형
| type | 설명 | 제한 |
|---|---|---|
first_frame | 첫 프레임 이미지 | 정확히 1개 |
string
첫 프레임이 어떻게 움직일지 설명하는 텍스트 프롬프트(선택)
array
필수
first_frame 객체 1개가 포함된 미디어 목록, 각각 type과 url 포함string
기본값:"1080P"
1.0:
720P 또는 1080P; 1.1: 480P, 720P 또는 1080P. 출력 화면 비율은 첫 프레임에 근사integer
기본값:"5"
길이(초), 범위 3~15
boolean
기본값:"true"
워터마크 추가
curl -X POST "https://api.gravitex.ai/v1/video/generations" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse-1.0-i2v",
"prompt": "A cat running across the grass",
"duration": 5,
"metadata": {
"input": {
"prompt": "A cat running across the grass",
"media": [
{"type": "first_frame", "url": "https://example.com/first_frame.png"}
]
},
"parameters": {
"resolution": "720P",
"duration": 5,
"watermark": false
}
}
}'
1~9개의 참조 이미지를 전달하고 텍스트로 장면을 설명하여 주체를 부드러운 비디오로 융합합니다. 프롬프트에서 **
다중 참조 예제:
[Image 1], [Image 2]**로 media 항목을 참조합니다(순서 일치 필요).media 유형
| type | 설명 | 제한 |
|---|---|---|
reference_image | 참조 이미지 | 1~9 |
string
필수
[Image n] 참조를 사용하는 프롬프트; 각 참조의 구체적 객체 명시, 예: “[Image 1]의 빨간 치파오를 입은 여성”array
필수
참조 이미지 목록; 1번째 =
[Image 1], 2번째 = [Image 2] 등string
기본값:"1080P"
1.0:
720P 또는 1080P; 1.1: 480P, 720P 또는 1080Pstring
기본값:"16:9"
화면 비율:
16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9integer
기본값:"5"
길이(초), 범위 3~15
boolean
기본값:"true"
워터마크 추가
curl -X POST "https://api.gravitex.ai/v1/video/generations" \
-H "Authorization: Bearer sk-xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse-1.0-r2v",
"prompt": "The woman in a red cheongsam in [Image 1] opens the folding fan from [Image 2] while tassel earrings from [Image 3] sway gently.",
"duration": 5,
"metadata": {
"input": {
"prompt": "The woman in a red cheongsam in [Image 1] opens the folding fan from [Image 2] while tassel earrings from [Image 3] sway gently.",
"media": [
{"type": "reference_image", "url": "https://example.com/girl.jpg"},
{"type": "reference_image", "url": "https://example.com/fan.jpg"},
{"type": "reference_image", "url": "https://example.com/earrings.jpg"}
]
},
"parameters": {
"resolution": "720P",
"ratio": "16:9",
"duration": 5,
"watermark": false
}
}
}'
매개변수 참조
공통 매개변수
| 매개변수 | 타입 | 설명 |
|---|---|---|
duration | integer | 3~15초, 기본값 5 |
resolution | string | 1.0: 720P 또는 1080P; 1.1: 480P, 720P 또는 1080P, 기본값 1080P |
watermark | boolean | 워터마크 추가, 기본값 true |
seed | integer | 랜덤 시드, 범위 [0, 2147483647] |
텍스트-투-비디오 & 참조-투-비디오
| 매개변수 | 타입 | 설명 |
|---|---|---|
ratio | string | 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9, 기본값 16:9. I2V는 첫 프레임을 따름—ratio 생략 |
미디어 입력 제한
| 유형 | 형식 | 크기 | 기타 제한 |
|---|---|---|---|
첫 프레임 (first_frame) | JPEG, JPG, PNG, WEBP | ≤ 20MB | 너비·높이 ≥ 300px |
참조 이미지 (reference_image) | JPEG, JPG, PNG, WEBP | ≤ 20MB | 짧은 변 ≥ 400px; 720P+ 선명도 권장; 1~9개 이미지 |
오류 처리
| HTTP 상태 | 의미 | 권장 조치 |
|---|---|---|
| 400 | 잘못된 요청 | metadata 구조 및 미디어 제한 확인 |
| 401 | 인증 실패 | API Key 확인 |
| 429 | 요청 한도 초과 | 더 낮은 빈도로 재시도 |
| 502 | 업스트림 오류 | 나중에 재시도 |
status는 failed이며 error.message에 원인이 포함됩니다.
FAQ
비디오 URL은 얼마나 유효한가요?
비디오 URL은 얼마나 유효한가요?
비디오
url과 task_id는 보통 24시간 유효합니다. 즉시 다운로드하여 저장하세요.R2V에서 이미지는 어떻게 참조하나요?
R2V에서 이미지는 어떻게 참조하나요?
프롬프트에서 **
[Image 1], [Image 2]**를 사용하세요. 순서는 media의 reference_image 항목과 일치합니다. 각 참조의 구체적 객체를 설명하세요.I2V 모드는 무엇을 지원하나요?
I2V 모드는 무엇을 지원하나요?
HappyHorse I2V는 첫 프레임(
first_frame)만 지원합니다—첫+마지막 프레임, 연속 생성, 오디오 드라이빙은 없습니다.Wan 2.7과의 차이는?
Wan 2.7과의 차이는?
동일한
metadata.input / metadata.parameters 구조. HappyHorse R2V는 [Image n]과 이미지만 사용(최대 9개); Wan 2.7은 图n/视频n과 비디오 참조 및 보이스 클론을 사용합니다. HappyHorse는 기본 1080P 및 워터마크 켜짐; 길이는 3~15초입니다.관련 엔드포인트
비디오 작업 제출
통합 비디오 제출 및 다중 모델 매개변수
비디오 작업 조회
작업 상태 폴링 및 비디오 URL 확인
