Animate this first frame as one continuous five-second intimate documentary shot. Preserve this adult ceramic artist, face, clay vessel, hands, clothing and sunlit pottery studio. The wheel rotates gently while both wet hands steadily guide the rim without changing the vessel into another object. The artist glances up and calmly says exactly in Mandarin Chinese, "慢一点,形就稳了。" Clearly synchronized lips, natural small hand movements, soft wheel hum and wet-clay rubbing sounds. Very slow camera push-in, no cuts, no music. No logos, brands, advertising, captions, subtitles or watermarks.
Happy Horse 1.1 Image to Video API
alibaba/happyhorse-1.1/image-to-videoHappy Horse 1.1 Image to Video animates a single still photo into a 3–15 second cinematic video clip at 720p or 1080p, with native synchronized audio, natural physical motion, and rich textural detail. It preserves the original subject identity, lighting, and composition while introducing realistic camera moves, character performance, and environment sounds.
Image-to-video requires exactly one first-frame image.
Your generated video will appear here
Add your prompt and required media, review the settings, then click Run.
Examples
REST API
Quick Start
Authenticate via API Key, submit a first-frame image with optional motion prompt, and retrieve video via task ID.
Connect to Vidgo API
Create an API Key, store it securely on your server, and set Authorization: Bearer VIDGO_API_KEY.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer VIDGO_API_KEY
Submit an Image to Video Task
Configure inputs with 1 image URL in image_urls, and set model to alibaba/happyhorse-1.1/image-to-video.
REQUEST_BODY=$(cat <<'JSON'
{
"model": "alibaba/happyhorse-1.1/image-to-video",
"input": {
"prompt": "Animate this first frame as one continuous five-second intimate documentary shot. Preserve this adult ceramic artist, face, clay vessel, hands, clothing and sunlit pottery studio. The wheel rotates gently while both wet hands steadily guide the rim without changing the vessel into another object. The artist glances up and calmly says exactly in Mandarin Chinese, \"慢一点,形就稳了。\" Clearly synchronized lips, natural small hand movements, soft wheel hum and wet-clay rubbing sounds. Very slow camera push-in, no cuts, no music. No logos, brands, advertising, captions, subtitles or watermarks.",
"duration": 5,
"resolution": "1080p",
"seed": 11101,
"image_urls": [
"https://cdn.vidgo.ai/apis/models/alibaba/happyhorse-1.1/image-to-video/v1/01/input-01.png"
]
}
}
JSON
)
RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"Await Results
Poll with task_id while status is not_started or running. Stop at finished or failed; read data.files[].file_url on success or data.error_message on failure.
Track Status
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll every 2 seconds, backing off for extended jobs. Continue only while not_started or running. Alternatively provide callback_url.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "8JNIJZHJGDA8ALKR",
"status": "running",
"created_time": "2026-09-21T17:18:07"
}
}{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "finished",
"files": [
{
"file_url": "https://storage.vidgo.ai/generated/video.mp4",
"file_type": "video"
}
],
"created_time": "2026-08-22T10:00:00Z",
"progress": 100,
"error_message": null
}
}Complete Runnable Example
Expand to inspect complete code including status checks, task_id validation, polling, and timeout boundaries.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "alibaba/happyhorse-1.1/image-to-video",
"input": {
"prompt": "Animate this first frame as one continuous five-second intimate documentary shot. Preserve this adult ceramic artist, face, clay vessel, hands, clothing and sunlit pottery studio. The wheel rotates gently while both wet hands steadily guide the rim without changing the vessel into another object. The artist glances up and calmly says exactly in Mandarin Chinese, \"慢一点,形就稳了。\" Clearly synchronized lips, natural small hand movements, soft wheel hum and wet-clay rubbing sounds. Very slow camera push-in, no cuts, no music. No logos, brands, advertising, captions, subtitles or watermarks.",
"duration": 5,
"resolution": "1080p",
"seed": 11101,
"image_urls": [
"https://cdn.vidgo.ai/apis/models/alibaba/happyhorse-1.1/image-to-video/v1/01/input-01.png"
]
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneInput Parameters
Available request parameters, data types, and default values. The top-level model field is also required.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | null | No | — | Up to 2500 Unicode characters after trimming surrounding whitespace. Optional; null, empty, and whitespace-only prompts are omitted. |
| image_urls | string[] | Yes | — | Exactly one first-frame image: public HTTP(S) URL, image Data URI, or raw Base64. |
| resolution | string | No | 1080p | 720p or 1080p. Default: 1080p. |
| duration | integer | No | 5 | Integer from 3 to 15 seconds. Default: 5. |
| seed | integer | No | — | Optional integer from 0 to 2147483647. Omitted when not specified. |
| enable_safety_checker | boolean | No | — | Optional boolean. Omitted when not specified. |
Response Fields
Task submission returns a task_id; status queries yield lifecycle progress and video assets.
| Field | Type | Description |
|---|---|---|
| code | integer | Business response code, 200 on success. |
| data.task_id | string | Unique task identifier used to track and poll progress. |
| data.status | string | Lifecycle state: not_started, running, finished, or failed. |
| data.progress | integer | Generation completion percentage (0–100). |
| data.files[].file_url | string | Public URL of the generated video asset. |
| data.files[].file_type | string | File type string, e.g., video. |
| data.error_message | string | null | Failure details when status equals failed. |
Task Lifecycle
Continue polling while in not_started or running. Conclude when finished or failed is reached.
not_startedTask is accepted in the queue and awaiting execution.
runningGeneration is actively in progress. Continue polling.
finishedTask completed successfully. Read video from data.files[].file_url.
failedGeneration failed. Read data.error_message and stop polling.
Polling & Error Handling
- AuthenticationIf HTTP 401 is returned, verify the Bearer API key in the Authorization header.
- ValidationIf HTTP 400 is returned, verify required parameters, valid value ranges, and available credits.
- Network & TimeoutIf status polling encounters a network timeout, retain the task_id and retry the query.
- Polling FrequencyPoll every 2 seconds initially, gradually backing off for longer generations.
- Terminal StatesOnly continue polling on not_started or running. Halt on finished or failed.
- Callback SupportProvide callback_url in the request payload to receive final task payloads via webhook.
Endpoint Specifications
| Specification | Value | Details |
|---|---|---|
| prompt | 2500 | Up to 2500 Unicode characters after trimming surrounding whitespace. Optional; null, empty, and whitespace-only prompts are omitted. |
| image_urls | 1 | Exactly one first-frame image: public HTTP(S) URL, image Data URI, or raw Base64. |
| resolution | 1080p | 720p or 1080p. Default: 1080p. |
| duration | 5 | Integer from 3 to 15 seconds. Default: 5. |
Happy Horse 1.1 Image to Video
Happy Horse 1.1 Image to Video brings still images to life as fully voiced, dynamic video clips. Provide exactly one initial frame image via public URL, Data URI, or Base64, then optionally add up to 2,500 characters of natural-language direction for action, camera travel, or spoken dialogue. The model maintains subject identity and original lighting from the starting image while synthesizing fluid motion and matching environmental audio in a single pass.
Key Capabilities & Advantages
Starting-frame identity preservationLocks character features, clothing textures, and product silhouettes from the input image throughout the animated take.
Automatic image aspect ratio inheritanceAdopts the natural width and height proportions of your source image, avoiding unwanted border letterboxing or forced stretching.
Joint acoustic synthesis from still artCreates fitting acoustic ambiance, Foley effects, and musical elements that correspond directly with visual dynamics.
Zero-prompt autonomous animationIntelligently analyzes visual cues to generate plausible physical motion and atmosphere even when no text prompt is supplied.
Director-grade camera movementAccepts instructions for steady push-ins, tracking pans, and rotational perspective shifts without distorting foreground subjects.
Seamless 7-language dialogue animationAnimate portraits into speaking avatars with mouth shapes and spoken lines matching English, Chinese, Japanese, Korean, German, or French.
Parameters
| Parameter | Requirement | Description |
|---|---|---|
| prompt | Optional | Up to 2500 Unicode characters after trimming surrounding whitespace. Optional; null, empty, and whitespace-only prompts are omitted. |
| image_urls | Required | Exactly one first-frame image: public HTTP(S) URL, image Data URI, or raw Base64. |
| resolution | Optional | 720p or 1080p. Default: 1080p. Default 1080p |
| duration | Optional | Integer from 3 to 15 seconds. Default: 5. Default 5 |
| seed | Optional | Optional integer from 0 to 2147483647. Omitted when not specified. |
| enable_safety_checker | Optional | Optional boolean. Omitted when not specified. |
How to Call Happy Horse 1.1 Image to Video API
Select a high-quality source imageChoose a still photo with sharp focus, balanced illumination, and distinct subject boundaries.
Provide image inputUpload your image or specify a public image URL in the image_urls array parameter.
Add optional motion and audio guidanceOptionally write a prompt specifying camera trajectory, character gesture, or spoken dialogue lines.
Configure clip length and resolutionSelect an output duration between 3 and 15 seconds and pick 720p or 1080p resolution.
Dispatch the generation requestSubmit via the API endpoint or press generate in the online console.
Download the animated videoPoll the status endpoint with task_id until marked finished, then retrieve the MP4 file.
Pricing
Cost = output seconds × resolution rate. 1 credit = $0.005; all three modes use the same rates. Failed tasks are refunded automatically.
| Usage | Rate | Details |
|---|---|---|
| 720p | 22 credits/s ($0.11/s) | 5 seconds: 110 credits ($0.55) |
| 1080p | 28 credits/s ($0.14/s) | 5 seconds: 140 credits ($0.70) |
Best Use Cases
E-commerce product animationTurn static product photography into rotating, dynamic video advertisements with studio lighting gleams and gentle ambient audio.
Portrait and avatar animationTransform character stills or corporate headshots into talking spokesperson clips complete with multilingual lip-sync.
Historical photo restorationBring vintage photographs and historical portraits to life with authentic ambient soundscapes and gentle natural motion.
Concept art and matte painting motionAnimate static landscape illustrations into breathing cinematic vistas with wind rustle, flowing water, and camera sweeps.
Pro Tips
- When animating people, describe micro-expressions (such as a subtle smile, blinking, or nodding) alongside main camera movement to keep facial acting lifelike.
- If you desire speech, include quoted dialogue lines and specify the language in your prompt (e.g. 'Character looks toward lens and says warmly in Japanese: Konnichiwa').
- Leave prompt empty when you want the AI to naturally interpret outdoor landscapes, flowing rivers, or atmospheric clouds based purely on visual clues.
- For product showcase animations, prescribe slow orbit or push-in camera tracks ('slow camera push-in highlighting product reflections on metallic rim') for commercial appeal.
Usage Notes
- Pass exactly one image URL or data string in image_urls; multi-image reference workflows belong to Reference to Video.
- Do not submit aspect_ratio; the output video automatically conforms to the aspect ratio of your uploaded image.
- Audio is synthesized jointly with animation; silent generation can be requested by specifying ambient room tone in your prompt.
- Prompts are optional (up to 2,500 characters); omit or provide natural-language motion direction as desired.
Related Models
Happy Horse 1.1 Image to Video API frequently asked questions
What is the Happy Horse 1.1 Image to Video API?
Happy Horse 1.1 Image to Video is an Alibaba model for video generation from single still images. It animates a starting image into 3–15 second cinematic video clips at 720p or 1080p with native synchronized audio, natural physical motion, and rich textural detail. Built on Alibaba's unified single-stream self-attention Transformer architecture, it preserves the source image's character identity, lighting, and composition while introducing realistic camera moves and sound. You can call it programmatically or try it from the playground above.
How does Happy Horse 1.1 Image to Video preserve character identity from a photo?
The model anchors visual feature representations directly to the input frame, ensuring that facial geometry, hairstyles, distinctive attire, and ambient lighting remain consistent throughout dynamic camera movements and gestures.
Can Happy Horse 1.1 Image to Video generate video without a text prompt?
Yes. When no prompt is provided or when the prompt is empty, the model autonomously analyzes scene elements, predicting realistic natural motion such as wind blowing, flowing water, or organic character breathing alongside matching environmental sound.
Does Happy Horse 1.1 Image to Video generate synchronized sound for animated photos?
Yes. Audio synthesis is integrated into the model's single forward pass. Whether synthesizing ambient sound from image context or generating spoken dialogue from prompt instructions, sound is generated natively in sync with video frames.
How is the video aspect ratio determined in Happy Horse 1.1 Image to Video?
The resulting video automatically inherits the aspect ratio and frame orientation of the submitted input image. You do not need to pass an aspect_ratio parameter.
What image formats and resolutions work best with Happy Horse 1.1 Image to Video?
Provide clear JPG, PNG, or WEBP images with balanced lighting and sharp focus. Standard portrait or landscape images with clean subject separation yield the most stable motion and detail retention.
How do I direct camera motion in Happy Horse 1.1 Image to Video?
Specify camera techniques in your text prompt using standard cinematography terminology, such as slow zoom-in, pan right following subject, or handheld tracking shot. Keep camera instructions in a distinct sentence from subject action descriptions.
How are credits billed for Happy Horse 1.1 Image to Video?
Charges equal requested duration in seconds multiplied by the resolution rate: 22 credits per second for 720p, or 28 credits per second for 1080p. Failed generation tasks are fully refunded.















