GuidesHow to Use Happy Horse 1.1 in Claude Code and Cursor?
Makernice Team · ·
Prices as of November 12, 2026 (price list v15).
Key takeaways
- Happy Horse 1.1, Alibaba's video model, can be driven from Claude Code and Cursor through the Makernice MCP server.
- Happy Horse 1.1 has three modes on Makernice: text-to-video, image-to-video and reference-to-video with up to 9 images; there is no first-and-last-frame mode.
- Clips run 3 to 15 seconds at 720p or 1080p, and prompts are capped at 2,500 characters.
- Reference images for Happy Horse 1.1 need a shorter side of at least 400 px, and every image must be a public https link.
Happy Horse 1.1 from Alibaba runs inside Claude Code and Cursor through the Makernice MCP server, so the agent can animate a product photo or build a scene around reference images without leaving the editor. It asks estimate_cost for the price, waits for your approval and only then calls generate. The default clip (720p, 5 seconds) costs $0.84 at price list v15 (November 12, 2026).
How do I connect Happy Horse 1.1 to Claude Code and Cursor?
Happy Horse 1.1 is reached through the Makernice MCP server, which Claude Code and Cursor each add once and authorize through a browser sign-in. No API key or Alibaba account is involved.
- Claude Code: copy the
claude mcp add --transport http --scope user makernicecommand from the Claude Code guide, run it in a terminal, then open Claude Code, enter/mcpand choose makernice to sign in through the browser. - Cursor: on the Cursor guide, click Add to Cursor or paste the server entry into
~/.cursor/mcp.json; then sign in beside makernice under Cursor's MCP settings. - Both: have the agent run
get_balanceonce. It returnsavailable_usd, today's spend and the connection's per-job limit, which is the largest single job the agent may start.
Using Happy Horse 1.1 from Claude or ChatGPT chat
The same server also works outside coding agents. In Claude, add it under Customize → Connectors → Add custom connector and sign in to Makernice; on Team and Enterprise plans an owner adds the connector first in Organization settings → Connectors. The Claude connect page has the URL to paste. In ChatGPT on the web, add it from Plugins as a custom MCP server with OAuth, using the separate ChatGPT address on the ChatGPT connect page; your plan or workspace has to allow custom MCP servers. From there a Happy Horse 1.1 request runs the way it does in Claude Code and Cursor: estimate_cost prices it without holding that price, generate refuses a quote above your max_cost_usd, and check_job hands back the clip.
How do I turn a still photo into a Happy Horse 1.1 video?
Happy Horse 1.1 animates a still in image-to-video mode: the agent sets mode i2v, passes the photo in image_url and writes what should move in the prompt. The clip follows the photo's shape, so no aspect_ratio goes in the request. Here the agent turns a backpack product shot into a 5-second clip.
You: Use https://example.com/shop/backpack-bench.jpg and make a 5-second clip where the backpack slowly turns in the afternoon light. How much would that be?
Claude Code picks image-to-video and calls:
{
"name": "estimate_cost",
"arguments": {
"input": {
"model": "happy-horse-1.1",
"mode": "i2v",
"prompt": "The leather backpack on the bench slowly turns as afternoon light moves across it, a breeze lifts the strap, shallow depth of field",
"image_url": "https://example.com/shop/backpack-bench.jpg",
"duration": 5,
"resolution": "720p"
}
}
}Claude Code: Happy Horse 1.1 quotes $0.84 for 5 seconds at 720p (price list v15). Nothing is charged by the estimate. OK to start?
You: OK.
{
"name": "generate",
"arguments": {
"input": {
"model": "happy-horse-1.1",
"mode": "i2v",
"prompt": "The leather backpack on the bench slowly turns as afternoon light moves across it, a breeze lifts the strap, shallow depth of field",
"image_url": "https://example.com/shop/backpack-bench.jpg",
"duration": 5,
"resolution": "720p"
},
"max_cost_usd": "0.84",
"request_id": "backpack-turn-i2v-720p"
}
}Here max_cost_usd is the figure you agreed to. generate prices the request again on arrival and refuses it, creating nothing, if the new price is above that figure or above the connection's per-job limit. When it goes through, the charge is that fresh quote and the reply includes a job_id. Should the reply get lost, a second call with the same request_id and the same input hands back the same job.
{
"name": "check_job",
"arguments": {
"job_id": "gen_...",
"wait_s": 30
}
}check_job with wait_s returns as soon as the clip is done, or after the wait (55 seconds is the most it holds). A succeeded job lists the video under outputs[0].url, a signed link that expires after 24 hours; ask for check_job again whenever you need a new one, or open console_url to find the run in your console. Jobs started over MCP also trigger your account webhook.
What goes into a Happy Horse 1.1 text-to-video request?
A Happy Horse 1.1 text-to-video request needs model, mode t2v and a prompt of up to 2,500 characters. The settings that change the clip are duration, resolution (720p or 1080p) and aspect_ratio, which text-to-video alone accepts from 16:9, 9:16, 1:1, 4:3, 3:4. The table compares the three modes.
| Mode | Inputs | Aspect ratio |
|---|---|---|
Text-to-video (mode t2v) | prompt only | 16:9, 9:16, 1:1, 4:3, 3:4 |
Image-to-video (mode i2v) | prompt and one image_url | Not set in the request |
Reference-to-video (mode r2v) | prompt and 1 to 9 reference_images | Not set in the request |
All three modes take 3 to 15 seconds (5 by default) and 720p or 1080p (720p by default), and Makernice bills each output second at the same rate whichever mode you use: $0.168 per second at 720p, $0.216 at 1080p. Happy Horse 1.1 has no first-and-last-frame mode, so for a start-to-end transition pick a model that offers one. The Happy Horse 1.1 model page lists the related models.
For image-to-video, the still must be at least 300 px on its shorter side, with a width-to-height ratio from 0.4 to 2.5. Like every image sent over MCP, it has to be a public https link to a JPEG, PNG or WebP file of 10 MB or less; a path inside your repository won't resolve.
How do I keep a character consistent with Happy Horse 1.1 reference images?
Happy Horse 1.1 uses reference images in reference-to-video mode, the one to pick when a person or product must look the same from shot to shot. Give the agent up to 9 links, each with a shorter side of at least 400 px, and describe the new scene in the prompt. Below, the agent prices a 10-second 1080p scene with the hiker and the backpack from earlier; the estimate reports the total so you can approve it before anything runs.
{
"name": "estimate_cost",
"arguments": {
"input": {
"model": "happy-horse-1.1",
"mode": "r2v",
"prompt": "The hiker from the references unzips the same backpack at a mountain hut and pulls out a thermos",
"reference_images": [
"https://example.com/refs/hiker-face.jpg",
"https://example.com/refs/hiker-full.jpg",
"https://example.com/shop/backpack-bench.jpg"
],
"duration": 10,
"resolution": "1080p"
}
}
}Troubleshooting a refused Happy Horse 1.1 job
Refusals come back over MCP as text, with no job created and nothing charged. The first column below is the server-side name for each refusal, the second is how the returned message starts.
| Refusal | What the tool returns | What to do |
|---|---|---|
invalid_request | "Invalid parameters" | Check the field the text names: a prompt past the character cap, too many references, or an image below the size minimum |
price_unavailable | "This model, mode and resolution combination is not available right now." | That model, mode and resolution can't be ordered at the moment; call list_models with the model id and pick an offered combination |
price_exceeds_max_cost | "which exceeds max_cost_usd" | The request changed after you approved it; quote the new version and approve that amount |
daily_spend_limit_reached | "This connection has reached its daily spend limit." | It resets at 00:00 UTC, or raise the daily limit for this connection |
insufficient_balance | "Insufficient balance for this job. Nothing was charged." | Top up and retry with the same request_id |
A job that starts and then fails, for example on an input image moderation rejects, shows status failed in check_job with an error object; billing switches to released and the held amount is returned. See failed generations for the full charging rules.
