万相 3.0 与快乐马视频 API
Essevin 上的阿里百炼视频生成 —— 万相 3.0 全能参考最长 30 秒,快乐马 1.1 文生 / 图生 / 参考生视频,只在成片时计费。
Essevin 以阿里自家的 DashScope 契约暴露阿里云百炼视频生成,并且保持原始路径。用阿里官方 SDK 或 HTTP 写好的代码迁过来只需改 base URL 和密钥——请求体、响应结构、路径都不用动。
两个模型系列都是异步的:提交任务,然后轮询 Essevin 任务 ID。请使用已开通阿里分组的密钥,并在正式付费调用前用 GET /v1/models 确认可用性。
端点
| 方法 | 路径 | 用途 |
|---|---|---|
| POST | /api/v1/services/aigc/video-generation/video-synthesis | 提交万相 3.0 或快乐马视频任务 |
| GET | /api/v1/tasks/{task_id} | 查询单个任务 |
所有请求使用 Authorization: Bearer sk-your-key 与 Content-Type: application/json。你不需要发送 X-DashScope-Async——网关向上游一律以异步方式请求。
请求体严格解码:未知字段与第二个 JSON 值会在调用上游前就被拒绝。这是刻意的。上游在提交阶段几乎不校验参数,只在执行期才失败——一个非法的 resolution 照样会返回任务 ID,大约十分钟后才报错。Essevin 会直接以 400 当场拒绝。
模型
| 模型 ID | 时长 | 分辨率 | 输入 |
|---|---|---|---|
wan3.0-video | 2-30 秒整数(默认 5),或 -1 表示自动 | 480P / 720P / 1080P | 首帧 / 尾帧,或最多 10 张参考图、5 段参考视频、5 段参考音频、1 个文档、1 个网页链接 |
happyhorse-1.1-t2v | 3-15 秒整数(默认 5) | 480P / 720P / 1080P | 仅提示词 |
happyhorse-1.1-i2v | 3-15 秒整数(默认 5) | 480P / 720P / 1080P | 恰好 1 张 first_frame 图片 |
happyhorse-1.1-r2v | 3-15 秒整数(默认 5) | 480P / 720P / 1080P | 1-9 张 reference_image 图片 |
请使用上表中的精确 ID。未登记任何别名,未知模型名会被拒绝。wan3.0-video-prime、happyhorse-1.1-video-edit 以及快乐马 1.0 系列均未上架。
请求契约
{
"model": "wan3.0-video",
"input": { "prompt": "...", "media": [{ "type": "first_frame", "url": "..." }] },
"parameters": { "resolution": "1080P", "duration": 5 }
}input
prompt 是否必填逐模型不同,与阿里自身契约一致:
| 模型 | prompt |
|---|---|
wan3.0-video | 条件必选 —— prompt 与 media 必填其一 |
happyhorse-1.1-t2v | 必选 |
happyhorse-1.1-i2v | 可选 —— 纯首帧图即可驱动 |
happyhorse-1.1-r2v | 必选 |
长度:万相 3.0 最多 20,000 字符;快乐马最多 5,000 个非中文字符(中文实际被上游限到 2,500)。阿里对超长是静默截断;Essevin 对超过该模型官方上限的 prompt 直接返回 400,而不是放行一个会被悄悄改写的请求。
media 每一项都带 type 与 url:
type | 万相 3.0 | 快乐马 |
|---|---|---|
first_frame | 1 | 仅 -i2v,必填 |
last_frame | 1 | 不接受 |
reference_image | 最多 10 | 仅 -r2v,必填 1-9 |
reference_video | 最多 5,合计 ≤15 秒 | 不接受 |
reference_audio | 最多 5,合计 ≤15 秒 | 不接受 |
file | 1 个文档(docx / doc / xlsx / xls / pptx / ppt / pdf / txt / key / pages / numbers / md;≤100 MB、≤50 页) | 不接受 |
link | 1 个公开网页 | 不接受 |
对万相 3.0,首尾帧输入与参考组(reference_*、file、link)在同一次请求中互斥,且 file 与 link 彼此也互斥。有参考视频时,阿里还要求输入视频总时长 + 输出时长 ≤ 30 秒;网关量不到你的输入片长,这条由上游判定。
url 接受绝对的公网 http(s) 地址或 data: 内嵌(base64)。oss:// 会被拒绝——该对象归属你自己的阿里云账号,网关无法代取。link 必须是真实网页地址,不能是 data: 内嵌。
parameters
| 字段 | 万相 3.0 | 快乐马 1.1 |
|---|---|---|
resolution | 480P / 720P / 1080P(默认 1080P) | 同左 |
duration | 可选;2-30,默认 5,或 -1 表示自动 | 可选;3-15,默认 5 |
ratio | adaptive / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 | 16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 4:5 / 5:4 / 9:21 / 21:9;-i2v 不接受,成片比例随输入图 |
audio | 布尔,上游默认 true(开关声音价格相同) | 不接受 |
prompt_extend | 布尔,上游默认 true | 不接受 |
watermark | 布尔,上游默认 false | 布尔,上游默认 true |
seed | 整数 0-2147483647 | 同左 |
模型不支持的参数会被拒绝而不是静默丢弃,避免出现「以为生效了其实没有」的情况。你没传的字段完全不会发往上游——阿里自己的默认值原样生效。
快乐马默认带水印
阿里对快乐马 watermark 的默认值是 true,会在成片上打「Happy Horse」标记。Essevin 不覆盖上游默认值。需要干净输出请显式传 "watermark": false。
示例 —— 文生视频
curl https://api.essevin.com/api/v1/services/aigc/video-generation/video-synthesis \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"input": { "prompt": "日出时分航拍云海之上的雪山" },
"parameters": { "resolution": "1080P", "duration": 5, "ratio": "16:9" }
}'提交返回阿里响应结构中的 Essevin 任务 ID:
{ "output": { "task_id": "blt60x4115010d-d361-4bfc-b131-a382f1c400a5", "task_status": "PENDING" }, "request_id": "..." }示例 —— 图生视频
{
"model": "happyhorse-1.1-i2v",
"input": {
"prompt": "镜头缓缓推进,光影在场景中流动",
"media": [{ "type": "first_frame", "url": "data:image/jpeg;base64,..." }]
},
"parameters": { "resolution": "720P", "duration": 5, "watermark": false }
}用稳定的图床或 data: 内嵌
参考素材由上游下载,而不是 Essevin 下载。屏蔽机房 IP 的图床(很多免费图床都会)会让任务在提交几分钟后失败。建议用 data: 内嵌或你自己的 OSS / CDN。
任务生命周期
轮询 GET /api/v1/tasks/{task_id}。output.task_status 走 PENDING → RUNNING → SUCCEEDED | FAILED。一条片子通常 1-5 分钟完成,万相 3.0 的长片更久。建议约 15 秒轮询一次。
成功时响应携带稳定的 Essevin 中继地址(上游下载链接 24 小时过期,中继会透明刷新):
{
"output": {
"task_id": "blt60x4115010d-d361-4bfc-b131-a382f1c400a5",
"task_status": "SUCCEEDED",
"video_url": "https://api.essevin.com/relay/...",
"orig_prompt": "..."
},
"usage": { "video_count": 1, "duration": 5, "SR": 1080, "output_video_duration": 5, "input_video_duration": 0, "ratio": "16:9", "billed_seconds": 5, "billing_bucket": "1080p" }
}usage.SR 是输出短边像素,决定计费档;usage.ratio 回报的是成片实际比例,可能是原始尺寸(如 1632:937)而不是请求里的枚举值。
失败任务在 output.message 里给出原因:
{ "output": { "task_id": "blt60x...", "task_status": "FAILED", "code": "TaskFailed", "message": "..." } }计费
只有任务成功才计费,依据上游回报的用量:
- 输出秒数按上游实际产出的档位(
usage.SR)计价,而不是按你请求的档位。 - 万相 3.0 还会计参考视频的输入秒数,与输出同档价——阿里价目表把它列为「输入和输出单价」。快乐马只计输出秒数。
- 生成失败或命中安全审核不计费,也不会产生用量记录。
官方牌价见价格页;你的实际费率以登录后的模型目录为准。