万相 2.7 文生 / 图生视频(DashScope 原生协议)
| 模型 | 能力 | 必填字段 |
|---|---|---|
wan2.7-t2v | 文生视频 | input.prompt |
wan2.7-i2v | 图生视频(首帧驱动,可选尾帧) | input.prompt、input.img_url |
万相 2.7 的官方协议是阿里百炼 DashScope 的 视频合成异步接口,ModelGo 网关按官方路径与请求/响应格式原样接收:创建 → 轮询 → 取内容。请求体与阿里百炼文档一致,具体由哪家供应商渲染由网关路由决定,对调用方不可见。
使用阿里官方 DashScope SDK 时,只需把
base_url(DASHSCOPE_HTTP_BASE_URL)指向https://api.modelgo.com、api_key换成 ModelGo API Key。
1. 创建任务
POST https://api.modelgo.com/api/v1/services/aigc/video-generation/video-synthesis
请求头:Authorization: Bearer $MODELGO_API_KEY、X-DashScope-Async: enable、Content-Type: application/json。
文生视频
bash
curl https://api.modelgo.com/api/v1/services/aigc/video-generation/video-synthesis \
-H "Authorization: Bearer $MODELGO_API_KEY" \
-H "X-DashScope-Async: enable" \
-H "Content-Type: application/json" \
-d '{
"model": "wan2.7-t2v",
"input": {"prompt": "一只毛茸茸的橘猫在阳光下的窗台上玩毛线球"},
"parameters": {"resolution": "1080P", "duration": 5, "prompt_extend": true}
}'图生视频
bash
curl https://api.modelgo.com/api/v1/services/aigc/video-generation/video-synthesis \
-H "Authorization: Bearer $MODELGO_API_KEY" \
-H "X-DashScope-Async: enable" \
-H "Content-Type: application/json" \
-d '{
"model": "wan2.7-i2v",
"input": {"prompt": "猫缓缓转头并眨眼", "img_url": "https://example-cdn.com/cat.jpg"},
"parameters": {"resolution": "720P", "duration": 5}
}'响应
json
{
"output": {"task_id": "gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5", "task_status": "PENDING", "submit_time": "2026-09-07 17:05:59.000"},
"request_id": "gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5"
}output.task_id 是网关任务 ID,轮询与取内容都用它。
2. 参数说明
| 字段 | 类型 | 适用 | 说明 |
|---|---|---|---|
model | string | 全部 | wan2.7-t2v 或 wan2.7-i2v |
input.prompt | string | 全部 | 必填。画面内容与动作描述 |
input.img_url | string | i2v | 必填。首帧图片的公网可直接下载的 URL。wan2.7-t2v 请求不得携带 img_url / last_frame_url(会被拒绝,不会静默按文生视频处理) |
input.last_frame_url | string | i2v | 尾帧图片 URL,与首帧配合生成首尾帧视频 |
input.audio_url | string | 全部 | 驱动音频 URL(wav/mp3) |
input.negative_prompt | string | 全部 | 反向提示词 |
parameters.resolution | string | 全部 | 分辨率档位 720P / 1080P,缺省 1080P |
parameters.size | string | t2v | 与 resolution 等价的像素写法,如 1280*720、1920*1080 |
parameters.duration | int | 全部 | 时长(秒),缺省 5 |
parameters.prompt_extend | boolean | 全部 | 是否让上游智能改写提示词 |
parameters.watermark | boolean | 全部 | 是否加水印 |
parameters.seed | int | 全部 | 随机种子 |
parameters.audio | boolean | 全部 | 是否生成音频 |
分辨率档位
| 档位 | 16:9 | 9:16 | 1:1 | 4:3 | 3:4 |
|---|---|---|---|---|---|
| 720P | 1280*720 | 720*1280 | 960*960 | 1088*832 | 832*1088 |
| 1080P | 1920*1080 | 1080*1920 | 1440*1440 | 1632*1248 | 1248*1632 |
- 只提供 720P / 1080P。 传
4K或表外size会在创建时被拒(HTTP400),不会静默降档生成,也不产生费用。 - 按可交付档位选路。 网关只把请求交给能按所声明档位交付的供应商(如
wan2.7-t2v的 720P 目前仅由官方百炼通道渲染),不会由其他供应商按 1080P 代出再按 720P 计费;若当前没有能出该档位的供应商,创建返回400,不产生费用。 input中除上表字段外的键(如first_clip_url、ref_images_url)不被本接口支持,会被拒绝而不是忽略。
首帧图片的要求(i2v)
- 必须是上游服务器能直接
GET到的直链:无鉴权、无跳转、不依赖 Referer / Cookie。 - 部分站点直链对非浏览器抓取返回 403,会导致任务在生成阶段失败(
task_status=FAILED),不计费。建议使用自有对象存储或 CDN 地址。
3. 轮询任务
GET https://api.modelgo.com/api/v1/tasks/{task_id}
bash
curl https://api.modelgo.com/api/v1/tasks/gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5 \
-H "Authorization: Bearer $MODELGO_API_KEY"完成时:
json
{
"output": {
"task_id": "gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5",
"task_status": "SUCCEEDED",
"submit_time": "2026-09-07 17:05:59.000",
"end_time": "2026-09-07 17:09:06.000",
"video_url": "https://api.modelgo.com/v1/videos/gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5/content"
},
"usage": {"video_duration": 6, "video_count": 1},
"request_id": "gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5"
}task_status:PENDING→RUNNING→SUCCEEDED/FAILED。失败时output.code/output.message给出原因,任务不计费。- 生成耗时通常 1–3 分钟,请按 5–10 秒间隔轮询并带退避。
output.video_url指向网关内容接口,需带 API Key 下载;不要持久化,产物有保留期。
4. 下载视频
GET https://api.modelgo.com/v1/videos/{task_id}/content
bash
curl https://api.modelgo.com/v1/videos/gw_e99647a0-692d-4fdd-ae46-e1d777e72bf5/content \
-H "Authorization: Bearer $MODELGO_API_KEY" -o cat.mp4返回 video/mp4 字节流,支持 Range。只有任务所属 API Key(或同租户控制台登录态)能访问;未完成返回 409,过期或不存在返回 404。
5. 完整示例(Python,官方 SDK 风格)
python
import os, time, requests
BASE = "https://api.modelgo.com"
H = {"Authorization": f"Bearer {os.environ['MODELGO_API_KEY']}", "X-DashScope-Async": "enable"}
def synthesize(model: str, inp: dict, params: dict, out: str, timeout: int = 600) -> None:
r = requests.post(f"{BASE}/api/v1/services/aigc/video-generation/video-synthesis",
json={"model": model, "input": inp, "parameters": params}, headers=H, timeout=30)
r.raise_for_status()
task_id = r.json()["output"]["task_id"]
deadline = time.time() + timeout
while True:
if time.time() > deadline:
raise TimeoutError(task_id)
o = requests.get(f"{BASE}/api/v1/tasks/{task_id}", headers=H, timeout=30).json()["output"]
if o["task_status"] == "SUCCEEDED":
break
if o["task_status"] == "FAILED":
raise RuntimeError(o.get("message") or o.get("code"))
time.sleep(8)
with requests.get(o["video_url"], headers=H, stream=True, timeout=120) as c:
c.raise_for_status()
with open(out, "wb") as f:
for chunk in c.iter_content(1 << 20):
f.write(chunk)
synthesize("wan2.7-t2v", {"prompt": "一只毛茸茸的橘猫在阳光下玩毛线球"}, {"resolution": "1080P", "duration": 5}, "t2v.mp4")
synthesize("wan2.7-i2v", {"prompt": "猫缓缓转头并眨眼", "img_url": "https://example-cdn.com/cat.jpg"}, {"resolution": "720P", "duration": 5}, "i2v.mp4")6. 计费口径
- 按视频秒数 × 分辨率档位单价计费;创建时按请求的
duration预授权冻结,任务完成后按实际交付秒数结算(usage.video_duration)。上游可能多交付 1 秒(请求 5 秒、交付 6 秒),按 6 秒结算。 - 未传时长按缺省值预授权(万相 / 可灵 5 秒,Veo 8 秒),缺省值同时发给供应商;结算取供应商回报的实际交付秒数,四舍五入到整秒(如 5.041 → 5,5.5 → 6),可能与请求时长相差 ±1 秒。
- 创建被拒(
400)或生成失败(FAILED)不计费,预授权自动释放。 - 各模型单价以控制台「模型列表」中的价格为准。
常见错误
| 现象 | 原因 | 处理 |
|---|---|---|
创建返回 400 | resolution / size 不在 720P / 1080P 内;缺 input.prompt;i2v 缺 input.img_url;t2v 带了 input.img_url / input.last_frame_url(图生视频请用 wan2.7-i2v);input 含不支持的键;当前无供应商能出所请求档位 | 按参数表修正或换模型/档位 |
task_status=FAILED | 上游无法下载 img_url 或生成失败 | 换成公网可直接下载的直链 |
轮询返回 task_not_found | task_id 不是本 Key 创建的任务 | 核对 task_id 与 Key |
/content 返回 409 / 404 | 任务未完成 / 产物过期 | 先轮询到 SUCCEEDED;及时下载 |