万相 2.7

模型能力必填字段
wan2.7-t2v文生视频input.prompt
wan2.7-i2v图生视频(首帧驱动,可选尾帧)input.prompt、input.media[] 中的 first_frame(兼容旧写法 input.img_url)

万相 2.7 的官方协议是阿里百炼 DashScope 的 视频合成异步接口,ModelGo 网关按官方路径与请求/响应格式原样接收:创建 → 轮询 → 取内容。请求体与阿里百炼文档一致,具体由哪家供应商渲染由网关路由决定,对调用方不可见;请求落到官方百炼通道时,请求体按你写的内容原样转发,网关只替换 model(兼容旧写法的字段会改写成官方写法)。

使用阿里官方 DashScope SDK 时,只需把 base_url(DASHSCOPE_HTTP_BASE_URL)指向 https://api.modelgo.ai、api_key 换成 ModelGo API Key。

1. 创建任务

POST https://api.modelgo.ai/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.ai/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.ai/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": "猫缓缓转头并眨眼",
      "media": [{"type": "first_frame", "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. 参数说明

字段类型适用说明
modelstring全部wan2.7-t2v 或 wan2.7-i2v
input.promptstring全部必填。画面内容与动作描述
input.media[]object[]全部百炼 wan2.7 官方写法,元素为 {"type": ..., "url": ...}:first_frame(首帧)、last_frame(尾帧)、driving_audio(驱动音频)、first_clip(视频续写,仅 i2v,见下)。first_frame / last_frame / first_clip 仅 i2v,t2v 带上会被拒绝(不会静默按文生视频处理);driving_audio 两个模型都可用;同一 type 不能重复;其他 type 会被拒绝。首帧 URL 须公网可直接下载
input.img_urlstringi2v兼容旧写法,等同 media 的 first_frame,新接入请用 media[]
input.last_frame_urlstringi2v兼容旧写法,等同 media 的 last_frame
input.audio_urlstring全部驱动音频 URL(wav/mp3),t2v 的官方写法;i2v 请用 media 的 driving_audio(audio_url 作为兼容写法也接受)。同一项不能用两种写法重复给出
input.negative_promptstring全部反向提示词
parameters.resolutionstring全部分辨率档位 720P / 1080P,缺省 1080P
parameters.ratiostring全部宽高比,例如 16:9(缺省)/ 9:16 / 1:1;与 resolution 共同决定输出尺寸(见下表)。也接受 aspect_ratio 写法,两者同时给出时必须一致,完整取值以官方文档为准
parameters.sizestringt2v与 resolution 等价的像素写法,如 1280*720、1920*1080;与 ratio 同时给出时比例必须一致
parameters.durationint全部时长(秒),缺省 5
parameters.prompt_extendboolean全部是否让上游智能改写提示词
parameters.watermarkboolean全部是否加水印
parameters.seedint全部随机种子

未在上表列出的 parameters 键(例如 wan2.7 已弃用的 shot_type)不被网关解析,也不会报错:和官方行为一致,上游会忽略它们,不影响计费。

音频

  • 万相 2.7 官方接口没有音频开关,ModelGo 与官方保持一致:不传 input.media[] 的 driving_audio(t2v 为 input.audio_url)时,由模型根据画面自动生成匹配的背景音乐或音效;传了就以你的音频为驱动音轨。
  • 因此 万相 2.7 只有一档价格(有声档),不再提供「无声档」。parameters.audio 不是 wan2.7 的参数,网关不会把它发给上游。
  • 明确要求无声的请求会被拒绝:parameters.audio=false、顶层 generate_audio=false 或 "false" 创建时返回 400,不产生费用,不会被静默改成有声再计费。传 true 等同于不传,不报错。

分辨率档位

档位16:99:161:14:33:4
720P1280*720720*1280960*9601088*832832*1088
1080P1920*10801080*19201440*14401632*12481248*1632
  • 4:3 / 3:4 的 size 同时接受百炼写法:720P 1104*832 / 832*1104,1080P 1648*1248 / 1248*1648,与表中写法为同一档位、同价。
  • 只提供 720P / 1080P。 传 4K 或表外 size 会在创建时被拒(HTTP 400),不会静默降档生成,也不产生费用。
  • 按可交付档位选路。 网关只把请求交给能按所声明档位交付的供应商(如 wan2.7-t2v 的 720P 目前仅由官方百炼通道渲染),不会由其他供应商按 1080P 代出再按 720P 计费;若当前没有能出该档位的供应商,创建返回 400,不产生费用。
  • input 中除上表字段外的键(如 ref_images_url)不被本接口支持,会被拒绝而不是忽略。

视频续写(first_clip,仅 i2v)

  • 用 input.media[] 的 {"type": "first_clip", "url": "<视频直链>"}(或平铺的 input.first_clip_url)从一段已有视频接着往下生成;片段须为 2–10 秒的 mp4 / mov,URL 须公网可直接下载(不能是需要鉴权的地址,例如本网关的 /v1/videos/{id}/content)。
  • 只能用于 wan2.7-i2v,不能与 first_frame(img_url)或 driving_audio(audio_url)同时给出,可与 last_frame 搭配;违反上述任一条件创建时返回 400,不产生费用。
  • 按 i2v 计费,档位与不带续写的 i2v 相同。
  • 并非所有供应商通道都能承载续写:网关只把续写请求交给确认支持的通道,当前没有可用通道时创建返回 400,不产生费用。

首帧图片的要求(i2v)

  • 必须是上游服务器能直接 GET 到的直链:无鉴权、无跳转、不依赖 Referer / Cookie。
  • 部分站点直链对非浏览器抓取返回 403,会导致任务在生成阶段失败(task_status=FAILED),不计费。建议使用自有对象存储或 CDN 地址。

3. 轮询任务

GET https://api.modelgo.ai/api/v1/tasks/{task_id}

bash
curl https://api.modelgo.ai/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.ai/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.ai/v1/videos/{task_id}/content

bash
curl https://api.modelgo.ai/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.ai"
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": "猫缓缓转头并眨眼", "media": [{"type": "first_frame", "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)不计费,预授权自动释放。
  • 万相 2.7 没有「无声档」,所有请求按有声档单价计费(见上文「音频」)。
  • 各模型单价以控制台「模型列表」中的价格为准。

常见错误

现象原因处理
创建返回 400resolution / size 不在 720P / 1080P 内;缺 input.prompt;i2v 缺 input.img_url(或 media 的 first_frame);t2v 带了 input.img_url / input.last_frame_url(图生视频请用 wan2.7-i2v);input 含不支持的键,或 input.media[] 的 type 不支持、与旧字段重复;ratio 不在可选值内,或与 aspect_ratio / size 的比例不一致;当前无供应商能出所请求档位按参数表修正或换模型/档位
创建返回 400,提示 has no audio switch带了 parameters.audio=false 或 generate_audio=false;万相 2.7 没有静音能力去掉该字段(官方接口无此参数),需要无声请在下载后自行去除音轨
task_status=FAILED上游无法下载 img_url 或生成失败换成公网可直接下载的直链
轮询返回 task_not_foundtask_id 不是本 Key 创建的任务核对 task_id 与 Key
/content 返回 409 / 404任务未完成 / 产物过期先轮询到 SUCCEEDED;及时下载