Tradução de apoio para consulta. Código e identificadores técnicos preservados. Consultar referência original ↗
HappyHorse - Gere um vídeo a partir de uma imagem
Enviar HappyHorse tarefa de imagem para vídeo (primeiro quadro)
Gere vídeos de até 15 segundos em 1080P a partir de uma imagem de primeiro quadro usando o HappyHorse modelo. A proporção do vídeo de saída segue automaticamente a imagem de entrada.
OpenAPI
openapi: 3.1.0
info:
title: HappyHorse Image-to-Video API
description: Generate videos from an image using the HappyHorse model. Submit a task asynchronously, then poll `GET /tasks/{task_id}` for the result.
version: 1.0.0
servers:
- url: https://maas.qwencloudapi.com/api/v1
description: Singapore
security:
- BearerAuth: []
paths:
/services/aigc/video-generation/video-synthesis:
post:
operationId: createHappyHorseImageToVideo
summary: Create image-to-video task
description: Submit an image-to-video task. Returns a `task_id` for polling.
parameters:
- name: X-DashScope-Async
in: header
required: true
description: Must be set to `enable` for asynchronous task submission.
schema:
type: string
enum:
- enable
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/HappyHorseImageToVideoRequest"
responses:
"200":
description: Task submitted successfully
content:
application/json:
schema:
$ref: "#/components/schemas/AsyncTaskSubmitResponse"
"400":
description: Invalid request parameters
content:
application/json:
schema:
$ref: "#/components/schemas/DashScopeErrorResponse"
x-codeSamples:
- lang: curl
label: cURL - Image-to-video (first frame)
source: |-
curl --location 'https://maas.qwencloudapi.com/api/v1/services/aigc/video-generation/video-synthesis' \
-H 'X-DashScope-Async: enable' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "happyhorse-1.1-i2v",
"input": {
"prompt": "A cat running on the grass",
"media": [
{
"type": "first_frame",
"url": "https://cdn.translate.alibaba.com/r/wanx-demo-1.png"
}
]
},
"parameters": {
"resolution": "720P",
"duration": 5
}
}'
- lang: python
label: Python - Synchronous call
source: |-
import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope
dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'
api_key = os.getenv("DASHSCOPE_API_KEY")
def sample_sync_call():
print('Please wait...')
rsp = VideoSynthesis.call(
api_key=api_key,
model='happyhorse-1.1-i2v',
prompt='A cat running on the grass',
media=[
{
"type": "first_frame",
"url": "https://cdn.translate.alibaba.com/r/wanx-demo-1.png"
}
],
resolution='720P',
duration=5)
print(rsp)
if rsp.status_code == HTTPStatus.OK:
print(rsp.output.video_url)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
if __name__ == '__main__':
sample_sync_call()
- lang: python
label: Python - Asynchronous call
source: |-
import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope
dashscope.base_http_api_url = 'https://maas.qwencloudapi.com/api/v1'
api_key = os.getenv("DASHSCOPE_API_KEY")
def sample_async_call():
rsp = VideoSynthesis.async_call(
api_key=api_key,
model='happyhorse-1.1-i2v',
prompt='A cat running on the grass',
media=[
{
"type": "first_frame",
"url": "https://cdn.translate.alibaba.com/r/wanx-demo-1.png"
}
],
resolution='720P',
duration=5)
print(rsp)
if rsp.status_code == HTTPStatus.OK:
print("task_id: %s" % rsp.output.task_id)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
rsp = VideoSynthesis.wait(task=rsp, api_key=api_key)
print(rsp)
if rsp.status_code == HTTPStatus.OK:
print(rsp.output.video_url)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
if __name__ == '__main__':
sample_async_call()
- lang: java
label: Java - Synchronous call
source: |-
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;
import java.util.*;
public class HappyHorseI2V {
static {
Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
}
public static void main(String[] args) {
try {
VideoSynthesis vs = new VideoSynthesis();
List<VideoSynthesisParam.Media> media = new ArrayList<VideoSynthesisParam.Media>() {{
add(VideoSynthesisParam.Media.builder()
.url("https://cdn.translate.alibaba.com/r/wanx-demo-1.png")
.type("first_frame").build());
}};
Map<String, Object> parameters = new HashMap<>();
parameters.put("resolution", "720P");
parameters.put("duration", 5);
VideoSynthesisParam param = VideoSynthesisParam.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("happyhorse-1.1-i2v")
.prompt("A cat running on the grass")
.media(media)
.parameters(parameters)
.build();
System.out.println("Please wait...");
VideoSynthesisResult result = vs.call(param);
System.out.println(JsonUtils.toJson(result));
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.println(e.getMessage());
}
}
}
- lang: java
label: Java - Asynchronous call
source: |-
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;
import java.util.*;
public class HappyHorseI2V {
static {
Constants.baseHttpApiUrl = "https://maas.qwencloudapi.com/api/v1";
}
public static void main(String[] args) {
try {
String apiKey = System.getenv("DASHSCOPE_API_KEY");
VideoSynthesis vs = new VideoSynthesis();
List<VideoSynthesisParam.Media> media = new ArrayList<VideoSynthesisParam.Media>() {{
add(VideoSynthesisParam.Media.builder()
.url("https://cdn.translate.alibaba.com/r/wanx-demo-1.png")
.type("first_frame").build());
}};
Map<String, Object> parameters = new HashMap<>();
parameters.put("resolution", "720P");
parameters.put("duration", 5);
VideoSynthesisParam param = VideoSynthesisParam.builder()
.apiKey(apiKey)
.model("happyhorse-1.1-i2v")
.prompt("A cat running on the grass")
.media(media)
.parameters(parameters)
.build();
VideoSynthesisResult task = vs.asyncCall(param);
System.out.println(JsonUtils.toJson(task));
System.out.println("Please wait...");
VideoSynthesisResult result = vs.wait(task, apiKey);
System.out.println(JsonUtils.toJson(result));
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.println(e.getMessage());
}
}
}
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: DashScope API Key. Get one from the [QwenCloud console](https://home.qwencloud.com/api-keys).
schemas:
HappyHorseImageToVideoRequest:
type: object
required:
- model
- input
properties:
model:
type: string
description: The model name. For available models, see the [QwenCloud console](https://home.qwencloud.com).
example: happyhorse-1.1-i2v
input:
type: object
required:
- media
description: Input content for video generation.
properties:
prompt:
type: string
description: Text description of the video to generate. Optional -- if omitted, the model infers motion from the image alone. Supports any language. Maximum 5,000 non-Chinese characters or 2,500 Chinese characters (auto-truncated if exceeded).
example: A cat running on the grass
media:
type: array
description: Input media list. Must contain exactly one `first_frame` image. The aspect ratio of the generated video automatically follows the input image.
items:
type: object
required:
- type
- url
properties:
type:
type: string
description: "Media asset type. Fixed value: `first_frame`."
enum:
- first_frame
url:
type: string
format: uri
description: |-
URL or Base64-encoded data of the first frame image.
**Public URL**: HTTP/HTTPS (e.g., `https://xxx/xxx.png`).
**Base64**: `data:{MIME_type};base64,{base64_data}` (supported MIME types: `image/jpeg`, `image/png`, `image/webp`).
Image constraints: Formats: JPEG, JPG, PNG, WEBP. Resolution: width and height at least 300 px. Aspect ratio: 1:2.5 to 2.5:1. File size: up to 20 MB.
parameters:
$ref: "#/components/schemas/HappyHorseImageToVideoParameters"
HappyHorseImageToVideoParameters:
type: object
description: Video generation parameters.
properties:
resolution:
type: string
description: Video clarity tier. The model automatically scales to approximate the total pixel count for the selected resolution. The aspect ratio of the output video closely matches the input first frame.
enum:
- 480P
- 720P
- 1080P
default: 1080P
duration:
type: integer
description: Video duration in seconds (integer, 3-15). Longer videos cost more -- billing is per second.
minimum: 3
maximum: 15
default: 5
watermark:
type: boolean
description: 'Whether to add a watermark to the generated video. `true` (default): adds a "HappyHorse" watermark in the lower-right corner. `false`: no watermark.'
default: true
seed:
type: integer
description: Seed for reproducible results. Same seed + same parameters produces similar (not identical) output.
minimum: 0
maximum: 2147483647
AsyncTaskSubmitResponse:
type: object
description: Response from an asynchronous task submission.
properties:
request_id:
type: string
description: Unique request identifier for tracing and troubleshooting.
example: 4909100c-7b5a-9f92-bfe5-xxxxxx
output:
type: object
properties:
task_id:
type: string
description: Task ID for polling status. Use with `GET /tasks/{task_id}`.
example: 0385dc79-5ff8-4d82-bcb6-xxxxxx
task_status:
type: string
description: Initial task status, typically `PENDING`.
enum:
- PENDING
- RUNNING
- SUCCEEDED
- FAILED
HappyHorseI2VTaskStatusResponse:
type: object
description: Task status response for HappyHorse image-to-video.
properties:
request_id:
type: string
description: Request ID for troubleshooting. Include this when contacting support.
example: 8ae698ba-df2d-966c-abcf-xxxxxx
output:
type: object
properties:
task_id:
type: string
description: Task ID. Queryable for 24 hours after submission.
example: e56d806f-76f9-4037-aefa-xxxxxx
task_status:
type: string
description: "Task lifecycle: `PENDING` -> `RUNNING` -> `SUCCEEDED` or `FAILED`. `CANCELED` if manually stopped. `UNKNOWN` if expired."
enum:
- PENDING
- RUNNING
- SUCCEEDED
- FAILED
- CANCELED
- UNKNOWN
submit_time:
type: string
description: When the task was submitted (UTC+8, `YYYY-MM-DD HH:mm:ss.SSS`).
scheduled_time:
type: string
description: When the task started executing (UTC+8, `YYYY-MM-DD HH:mm:ss.SSS`).
end_time:
type: string
description: When the task finished (UTC+8). Only present for `SUCCEEDED` or `FAILED` tasks.
orig_prompt:
type: string
description: Your original prompt text.
video_url:
type: string
format: uri
description: URL of the generated video (MP4, H.264, 24fps). Only present when `task_status` is `SUCCEEDED`. **Valid for 24 hours** -- download promptly.
code:
type: string
description: Error code. Only present when `task_status` is `FAILED`.
message:
type: string
description: Error message. Only present when `task_status` is `FAILED`.
usage:
type: object
description: Resource consumption. Only present when `task_status` is `SUCCEEDED`.
properties:
duration:
type: number
description: Billable video duration in seconds.
input_video_duration:
type: integer
description: Always `0` for image-to-video (no input video).
output_video_duration:
type: integer
description: Output video duration in seconds.
video_count:
type: integer
description: Number of videos generated. Always `1`.
SR:
type: integer
description: Resolution tier used (e.g., `720` for 720P, `1080` for 1080P).
DashScopeErrorResponse:
type: object
description: DashScope API error response.
properties:
request_id:
type: string
description: Unique request identifier for tracing and support.
code:
type: string
description: Machine-readable error code (e.g., `InvalidParameter`, `Throttling`, `Unauthorized`).
example: InvalidParameter
message:
type: string
description: Human-readable error message.
example: Invalid model name