Alibaba (Qwen) / happyhorse-1.1-r2v
HappyHorse 1.1 R2V stands out for HappyHorse reference-to-video for subject consistency and Up to 1080P for repeatable visual style. It is best suited to brand series video and consistent character clips.
Context
—
Not applicable
Unit rate
$0.175
/ second
Output
Included
Quality
#15
Elo 1404
Overview
HappyHorse 1.1 R2V stands out for HappyHorse reference-to-video for subject consistency and Up to 1080P for repeatable visual style. It is best suited to brand series video and consistent character clips.
Video output
Can produce video output for generation or editing workflows.
Model maker
Alibaba (Qwen)
Called through SeaLink's unified account, balance, and OpenAI-compatible API.
Protocol
Video generation API
Base URL: https://api.sealink.io/v1
Pricing
The final charge follows generated usage and the applicable selector, such as resolution, duration, input type, or provider unit.
API
model
happyhorse-1.1-r2vbase_url
https://api.sealink.io/v1Auth
Bearer $SEALINK_API_KEY# Step 1: Submit video generationcurl https://api.sealink.io/v1/video/generations \-H "Authorization: Bearer $SEALINK_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "happyhorse-1.1-r2v","prompt": "Animate the reference image with a slow cinematic camera move and natural lighting","image_url": "https://wanx.alicdn.com/material/20250318/first_frame.png","size": "1280x720","duration": 5}'# Step 2: Poll for result (use task id from submit response)curl https://api.sealink.io/v1/tasks/TASK_ID \-H "Authorization: Bearer $SEALINK_API_KEY"
import requests, timeapi_key = "<your-sealink-key>"base = "https://api.sealink.io"# Submitresp = requests.post(f"{base}/v1/video/generations", json={"model": "happyhorse-1.1-r2v","prompt": "Animate the reference image with a slow cinematic camera move and natural lighting","image_url": "https://wanx.alicdn.com/material/20250318/first_frame.png","size": "1280x720","duration": 5}, headers={"Authorization": f"Bearer {api_key}"})task = resp.json()task_id = task["id"]# Poll until completewhile True:time.sleep(5)r = requests.get(f"{base}/v1/tasks/{task_id}",headers={"Authorization": f"Bearer {api_key}"})v = r.json()if v["status"] == "completed":print(v.get("data") or v.get("upstream_response") or v)break
const base = "https://api.sealink.io";const headers = { Authorization: `Bearer ${process.env.SEALINK_API_KEY}` };// Submitconst resp = await fetch(`${base}/v1/video/generations`, {method: "POST",headers: { ...headers, "Content-Type": "application/json" },body: JSON.stringify({model: "happyhorse-1.1-r2v",prompt: "Animate the reference image with a slow cinematic camera move and natural lighting",image_url: "https://wanx.alicdn.com/material/20250318/first_frame.png",size: "1280x720",duration: 5}),});const task = await resp.json();const taskId = task.id;// Poll until completelet video;do {await new Promise(r => setTimeout(r, 5000));const r = await fetch(`${base}/v1/tasks/${taskId}`, { headers });video = await r.json();} while (video.status !== "completed");console.log(video.data || video.upstream_response || video);