Appearance
下载原始 Skill 文件
bash
curl https://ai.ospreyai.cn/docs/raw/skills/happyhorse-text-to-video.md -o happyhorse-text-to-video.md对话式接入
本 Skill 文件可被 AI 助手(Claude Code、Cursor、ChatGPT 等)学习,通过自然语言对话完成文生视频。
在 AI 对话中发送以下指令即可:
学习:https://ai.ospreyai.cn/docs/raw/skills/happyhorse-text-to-video.md,保存为本地的技能 skills更多接入方式和使用示例详见 API 文档 — AI 助手对话式接入。
HappyHorse 1.0 文生视频 (Text-to-Video)
Overview
通过 Open.OspreyAI 网关 https://open.ospreyai.cn 使用 HappyHorse 1.0 模型将文字提示词生成高质量视频。
HappyHorse 是新一代文生视频大模型,支持中英文提示词,生成 720P/1080P 高清视频,最长 10 秒。采用异步任务模式:提交任务 → 轮询状态 → 下载视频。
核心特性:
- 高清输出:支持 720P、1080P 分辨率
- 多种比例:16:9(横屏)、9:16(竖屏)、1:1(方形)
- 灵活时长:1-10 秒可调
- 中英双语:提示词支持中文和英文
- 异步任务:提交后立即返回 task_id,后台生成完成后通过 OSS 临时链接下载
API 参考文档:阿里云 — HappyHorse 文生视频 API
与其他视频生成 Skill 的对比:
| Skill | 模型 | 输入 | 输出 | 适用场景 |
|---|---|---|---|---|
| ComfyUI 视频生成 | Wan 2.2 I2V | 1 张起始图 | ~5s 视频 | 图生视频 |
| ComfyUI 关键帧视频 | Wan 2.2 FLF2V | 6 张关键帧 | ~5s 视频 | 多关键帧过渡 |
| ComfyUI Fun Inpaint | Wan 2.2 Fun Inpaint | 首帧 + 尾帧 | ~5s 视频 | 首尾帧过渡 |
| 本 Skill | HappyHorse 1.0 | 文字提示词 | 1-10s 视频 | 纯文字驱动的视频生成 |
所有 API 均需 Bearer Token 鉴权(Authorization: Bearer sk-xxx)。
Quick Start
bash
export GW="https://open.ospreyai.cn"
export API_KEY="sk-your-api-key"
# 1. 提交文生视频任务
curl -s -X POST "$GW/v1/video/generations" \
-H "X-DashScope-Async: enable" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse-1.0-t2v",
"prompt": "一只猫咪在阳光下慵懒地打哈欠",
"resolution": "1080P",
"ratio": "16:9",
"duration": 5,
"watermark": false
}'
# 响应: {"task_id": "task_xxx", "status": "queued"}
# 2. 轮询任务状态
curl -s "$GW/v1/video/generations/{task_id}" \
-H "Authorization: Bearer $API_KEY"
# 3. 下载视频(从响应中的 video_url 字段获取)
curl -sL "{video_url}" -o output.mp4Task Routing
| 场景 | 动作 |
|---|---|
| 首次生成视频 | → Route A: Submit Task |
| 需要查看任务是否完成 | → Route B: Check Status |
| 需要获取或下载视频 | → Route C: Download |
| 需要调优参数(分辨率、比例、时长) | → Route D: Tune Parameters |
| 需要排查错误 | → Route E: Troubleshoot |
Route A: Submit Task
服务信息
- 网关地址:
https://open.ospreyai.cn - 提交接口:
POST /v1/video/generations - 查询接口:
GET /v1/video/generations/{task_id} - 鉴权方式:
Authorization: Bearer sk-xxx - 异步头:
X-DashScope-Async: enable
Step 1: 提交文生视频任务
bash
curl -s -X POST "$GW/v1/video/generations" \
-H "X-DashScope-Async: enable" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse-1.0-t2v",
"prompt": "一座由硬纸板和瓶盖搭建的微型城市,在夜晚焕发出生机。一列硬纸板火车缓缓驶过,小灯点缀其间,照亮前路。",
"resolution": "720P",
"ratio": "16:9",
"duration": 5,
"watermark": false
}'响应:
json
{
"id": "task_zrgrR7EdFzj5tHDj1LjAtyWumpdgx4Hg",
"task_id": "task_zrgrR7EdFzj5tHDj1LjAtyWumpdgx4Hg",
"object": "video",
"model": "happyhorse-1.0-t2v",
"status": "queued",
"progress": 0,
"created_at": 1779960674
}记住
task_id,用于后续查询任务状态和获取视频。
请求参数
| 字段 | 类型 | 必填 | 说明 | 示例值 |
|---|---|---|---|---|
| model | string | ✅ | 模型名称 | "happyhorse-1.0-t2v" |
| prompt | string | ✅ | 视频描述(中英文均可) | "一只猫咪在草地上奔跑" |
| resolution | string | ❌ | 分辨率:720P / 1080P | "1080P" |
| ratio | string | ❌ | 画面比例:16:9 / 9:16 / 1:1 | "16:9" |
| duration | integer | ❌ | 视频时长(秒),1-10 | 5 |
| watermark | boolean | ❌ | 是否添加水印,默认 true | false |
请求头
| Header | 说明 |
|---|---|
X-DashScope-Async: enable | 启用异步任务模式(必传) |
Authorization: Bearer sk-xxx | API 鉴权 |
Content-Type: application/json | JSON 请求体 |
Route B: Check Status
查询任务状态
bash
curl -s "$GW/v1/video/generations/{task_id}" \
-H "Authorization: Bearer $API_KEY"进行中:
json
{
"code": "success",
"data": {
"task_id": "task_zrgrR7EdFzj5tHDj1LjAtyWumpdgx4Hg",
"status": "IN_PROGRESS",
"progress": "50%",
"submit_time": 1779960674,
"start_time": 1779960675,
"finish_time": 0,
"data": {
"output": {
"task_id": "979013d8-a376-4f95-940c-4eef1d71ca34",
"task_status": "RUNNING"
}
}
}
}已完成:
json
{
"code": "success",
"data": {
"task_id": "task_zrgrR7EdFzj5tHDj1LjAtyWumpdgx4Hg",
"status": "SUCCESS",
"progress": "100%",
"result_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/...",
"submit_time": 1779960674,
"start_time": 1779960675,
"finish_time": 1779960819,
"data": {
"usage": {
"SR": 1080,
"ratio": "16:9",
"duration": 5,
"video_count": 1,
"input_video_duration": 0,
"output_video_duration": 5
},
"output": {
"task_id": "979013d8-a376-4f95-940c-4eef1d71ca34",
"video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/...",
"orig_prompt": "一座由硬纸板和瓶盖搭建的微型城市...",
"task_status": "SUCCEEDED"
}
}
}
}任务状态流转
queued → IN_PROGRESS (50%) → SUCCESS (100%) / FAILED| 状态 | 说明 |
|---|---|
queued | 任务已提交,排队等待 |
IN_PROGRESS | 正在生成中 |
SUCCESS | 生成成功,可下载视频 |
FAILED | 生成失败,查看 fail_reason |
1080P 5秒视频生成通常需要 1-3 分钟。
Route C: Download
任务成功后,从响应中获取视频下载链接:
data.result_url:顶层字段,直接的下载 URLdata.data.output.video_url:嵌套字段,同上
两个 URL 相同,均为阿里云 OSS 临时链接(有效期约 24 小时)。
bash
# 直接下载(URL 从任务状态响应中获取)
curl -sL "{result_url}" -o output.mp4⚠️ 视频 URL 带签名参数,有效期约 24 小时(
Expires参数控制),过期后需重新查询任务获取新链接。
Python 调用示例
python
import requests
import time
GW = "https://open.ospreyai.cn"
API_KEY = "sk-your-api-key"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable"
}
# 1. 提交文生视频任务
resp = requests.post(f"{GW}/v1/video/generations", headers=headers, json={
"model": "happyhorse-1.0-t2v",
"prompt": "一座由硬纸板和瓶盖搭建的微型城市,在夜晚焕发出生机。一列硬纸板火车缓缓驶过,小灯点缀其间,照亮前路。",
"resolution": "720P",
"ratio": "16:9",
"duration": 5,
"watermark": false
})
task = resp.json()
task_id = task["task_id"]
print(f"Task submitted: {task_id}")
# 2. 轮询任务状态
headers_query = {"Authorization": f"Bearer {API_KEY}"}
while True:
resp = requests.get(f"{GW}/v1/video/generations/{task_id}", headers=headers_query)
data = resp.json().get("data", {})
status = data.get("status", "")
progress = data.get("progress", "")
if status == "SUCCESS":
video_url = data.get("result_url") or data.get("data", {}).get("output", {}).get("video_url")
print(f"Video ready: {video_url}")
break
elif status == "FAILED":
print(f"Failed: {data.get('fail_reason')}")
break
print(f"Status: {status} ({progress})")
time.sleep(5)
# 3. 下载视频
if status == "SUCCESS":
resp = requests.get(video_url)
with open("happyhorse_output.mp4", "wb") as f:
f.write(resp.content)
print(f"Downloaded: happyhorse_output.mp4 ({len(resp.content)} bytes)")Route D: Tune Parameters
分辨率
| 值 | 说明 | 生成时间 |
|---|---|---|
720P | 720p 标清 | 较快(~1-2 分钟) |
1080P | 1080p 高清 | 较慢(~2-3 分钟) |
画面比例
| 值 | 适用场景 |
|---|---|
16:9 | 横屏视频(默认,适合 PC/电视) |
9:16 | 竖屏视频(适合手机/短视频) |
1:1 | 方形视频(适合社交媒体) |
时长
| 值 | 说明 |
|---|---|
1 - 10 | 视频时长(秒),整数 |
5 | 默认值,平衡质量和生成时间 |
时长越长,生成时间越久,消耗配额越多。
水印
| 值 | 说明 |
|---|---|
false | 不添加水印(推荐,示例中默认使用) |
true | 添加水印,右下角显示 "Happy Horse"(API 默认值) |
提示词技巧
- 中文:自然语言描述即可,支持成语和文学化表达
"一座由硬纸板和瓶盖搭建的微型城市,在夜晚焕发出生机。" - 英文:细节描述效果更好
"A miniature city made of cardboard and bottle caps comes alive at night, with a tiny train slowly passing by." - 建议:描述场景 + 主体 + 动作 + 光影 + 氛围
可用模型
| 模型 | 类型 | 说明 |
|---|---|---|
happyhorse-1.0-t2v | 文生视频 | 本 Skill 使用的模型 |
happyhorse-1.0-i2v | 图生视频 | 以图片为起始帧生成视频 |
happyhorse-1.0-r2v | 参考视频生成 | 以参考视频风格生成新视频 |
happyhorse-1.0-video-edit | 视频编辑 | 对已有视频进行编辑 |
输出视频参数
- 分辨率: 720P 或 1080P(按请求参数)
- 比例: 16:9 / 9:16 / 1:1
- 时长: 1-10 秒
- 格式: MP4
- 文件大小: 约 5-10 MB(5 秒视频)
Route E: Troubleshoot
| 问题 | 排查方法 |
|---|---|
Invalid URL | 检查 URL 是否为 /v1/video/generations(不是 /v1/services/aigc/...) |
prompt is required | prompt 必须在顶层,不能嵌套在 input 对象中 |
happyhorse supports video task relay only | 不能走 /v1/chat/completions 或 /v1/images/generations,必须走 /v1/video/generations |
| 401 鉴权失败 | 检查 Bearer Token 是否有效 |
| 任务长时间 IN_PROGRESS | 1080P 视频生成可能需要 2-3 分钟,耐心等待 |
| 任务 FAILED | 检查 fail_reason 字段,可能是提示词违规或模型过载 |
| 视频 URL 过期 | 重新查询任务状态获取新的 result_url |
| 分辨率/比例不生效 | 检查参数值是否正确:720P/1080P、16:9/9:16/1:1 |
请求格式对比(常见错误)
| 项目 | ❌ 错误(DashScope 原始格式) | ✅ 正确(网关适配格式) |
|---|---|---|
| URL | /v1/services/aigc/video-generation/video-synthesis | /v1/video/generations |
| prompt | {"input": {"prompt": "..."}} | {"prompt": "..."} |
| 参数 | {"parameters": {"resolution": "720P"}} | {"resolution": "720P"} |
与 ComfyUI 视频生成的对比
| 特性 | HappyHorse T2V | ComfyUI I2V / FLF2V |
|---|---|---|
| 输入 | 纯文字 | 图片 |
| 分辨率 | 720P / 1080P | 640×640 / 720×720 |
| 时长 | 1-10 秒 | ~5 秒(固定) |
| 生成时间 | 1-3 分钟 | 30 秒-2 分钟 |
| 输出格式 | MP4(OSS 临时链接) | MP4(ComfyUI 文件) |
| 模型 | 闭源大模型 | 开源 Wan 2.2 |
| 适合场景 | 创意视频、营销素材 | 精确控制、图驱动动画 |
Verification Checklist
- [ ] 请求 URL 为
POST /v1/video/generations(不是 DashScope 原始路径) - [ ] 请求头包含
X-DashScope-Async: enable - [ ]
prompt在顶层(不嵌套在input中) - [ ] 提交成功,返回
task_id和status: "queued" - [ ] 轮询
GET /v1/video/generations/{task_id}直到status: "SUCCESS" - [ ] 从
result_url获取视频下载链接 - [ ] 下载 MP4 文件并可正常播放
- [ ] 视频分辨率、比例、时长与请求参数一致