HappyHorse 1.0 is Alibaba's April 2026 video model. It generates 3-15 second clips at 720P or 1080P from text, from a first-frame image, or from 1-9 reference images. An edit mode restyles an existing video of 3-60 seconds (the first 15 seconds are processed) using up to 5 style images. The vendor also lets you choose between keeping the source audio and generating a new track, but Jantaris does not expose that switch yet, so the vendor default applies. The rate depends only on resolution and duration, not on the mode, which keeps costs easy to predict.
Best for
- Restyling live footage as anime, clay or painted looks
- Character clips built from several reference images
- Animating a single hero image
- Budget planning where every mode costs the same per second
Prompting tips
- In edit mode the output length follows the source, so trim the clip to the part you want first.
- Aspect ratio applies only to text and reference modes; image-to-video and edit follow the input.
- Keep prompts under 2,500 characters, because longer text gets cut off.
- Describe the target style concretely in edit prompts: palette, line quality, texture.
FAQ
How much does HappyHorse 1.0 cost?
The rate is from $0.322 per second, and only resolution and duration change it. Failed generations are not charged.
Can HappyHorse 1.0 edit my own video?
Yes. Send a 3-60 second clip; the first 15 seconds are restyled based on your prompt and up to 5 style images.
What is new in HappyHorse 1.1?
HappyHorse 1.1 adds nine aspect ratios, including 21:9 and 9:21, and lets you address references in the prompt as [Image 1], [Image 2]. It does not include the video edit mode.
How to call HappyHorse 1.0 via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse-1.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "1080P",
"duration": 5
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "happyhorse-1.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "1080P",
"duration": 5
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "happyhorse-1.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "16:9",
"resolution": "1080P",
"duration": 5
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt | string | ≤ 2500 chars | |
aspect_ratio | string | 16:9 9:16 1:1 4:3 3:4 4:5 5:4 | 16:9 |
resolution | string | 720P 1080P | 1080P |
duration | integer | 3-15 | 5 |
image_url | string | ||
image_urls | array | max 9 | |
video_url | string | ||
seed | integer |
The same schema is available from GET /v1/models/happyhorse-1.0.









