Skip to content

Vidu 视频生成 API​

POST https://api.yu-yu.ai/v1/videos

本页说明 Vidu 家族(Q4 / Q3 / Q2 / Q1 / 2.0)在本网关的对外调用方式。接口是异步的:提交任务后立即拿到任务 ID,再用任务 ID 轮询状态,成功后取回视频。

本网关同时提供两条等价入口:

入口提交查询适合
OpenAI 兼容(推荐新接入)POST /v1/videos(别名 POST /v1/video/generations)GET /v1/videos/{task_id}已经按 OpenAI 视频协议写好的客户端
Vidu 原生POST /ent/v2/{text2video|img2video|start-end2video|reference2video}GET /ent/v2/tasks/{task_id}/creations已有 Vidu 官方 SDK / 开源工具,只改 base URL 即可接入

两条入口共用同一套模型能力与参数校验;任务 ID 也是同一套,用哪条入口创建、用另一条入口查询都可以。下文先讲 OpenAI 兼容入口,Vidu 原生入口的差异集中在Vidu 原生协议入口。

模型能力​

Vidu 家族共 15 个对外模型名。所有模型共用同一套请求字段,差别只在 model 取值,以及下表列出的可用输入组合、输出档位与时长范围。

model文生视频首帧图生首尾帧参考生视频(参考图上限)输出档位时长(秒)
viduq4-preview—✓—✓(15)540p / 720p / 1080p / 2K / 4K3–16
viduq3-pro✓✓✓—540p / 720p / 1080p1–16
viduq3-turbo✓✓✓✓(7)540p / 720p / 1080p1–16
viduq3-pro-fast—✓——720p / 1080p1–16
viduq3-mix———✓(7)540p / 720p / 1080p3–16
viduq3-drama———✓(7)720p / 1080p3–15
viduq3-ad———✓(7)720p / 1080p3–15
viduq3———✓(7)540p / 720p / 1080p3–16
viduq2-pro—✓✓✓(7)540p / 720p / 1080p1–10
viduq2✓——✓(7)540p / 720p / 1080p1–10
viduq2-turbo—✓✓—540p / 720p / 1080p1–10
viduq2-pro-fast—✓✓—720p / 1080p1–10
viduq1✓✓✓✓(7)1080p5
viduq1-classic—✓✓—1080p5
vidu2.0—✓✓—360p / 720p / 1080p4 或 8

说明

「文生 / 首帧图生 / 首尾帧 / 参考生」四列表示模型是否有这个专用动作:— 只说明没有该专用动作,只有参考生能力的模型收到 1–2 张图时会回落成参考生视频(见输入组合与动作);张数在任何动作下都不被该模型接受时才返回 400。输出档位 与 时长 是该模型可用的取值域:档位写成 WxH 时按像素面积折算到最近档位,折算不出合法档位或时长越界才返回 400。

音视频直出​

Q4 / Q3 / Q2 系列支持 audio=true(成片直接带配音)。viduq1 / viduq1-classic / vidu2.0 传 audio=true 会被拒绝。

错峰生成​

off_peak=true 表示允许把任务排到低峰时段执行,可用条件随模型不同:

模型off_peak 可用条件
viduq3、viduq3-pro-fast与 audio 取值无关
viduq3-pro、viduq3-turbo仅 audio=true 时可用
viduq2-pro、viduq2、viduq2-turbo、viduq2-pro-fast、viduq1、viduq1-classic、vidu2.0仅 audio=false(或不传)时可用
viduq4-preview、viduq3-drama、viduq3-ad官方未明示支持范围;传 true 会被接受
viduq3-mix不支持,传 true 返回 400

鉴权​

本接口仅支持 API Key 鉴权,请在 https://api.yu-yu.ai/console 获取 API Key:

http
Authorization: Bearer <API_KEY>
Content-Type: application/json

提交任务​

POST https://api.yu-yu.ai/v1/videos

同一入口还有一条别名:POST https://api.yu-yu.ai/v1/video/generations,行为完全一致。

Body 参数​


model string 必选

需要调用的模型名,取值见上文的模型能力。不在清单内的模型名返回 400 unsupported_vidu_model。


prompt string 必选

画面描述,不能为空。按字符计长度,上限随动作不同:文生视频(Q3 系列)20000 字符,参考生视频 5000 字符,其余场景 2000 字符。


images string[] 可选

输入图片列表,决定本次请求走哪种生成场景(见下文输入组合与动作)。每张图片可以是公网 http(s) URL,也可以是 data:image/<类型>;base64,<数据> 内联形式。


image string 可选

单张图片的简写,仅在 images 为空时生效,等价于只传一张图。


duration integer 可选

生成时长,单位秒,只接受整数。取值必须在模型的时长区间内;vidu2.0 只接受 4 或 8。不传时默认 5 秒,模型不接受 5 秒时取该模型的时长下限。


seconds string 可选

时长的字符串写法,如 "8",仅在 duration 缺省时生效。


size string 可选

输出档位,与 metadata.resolution 等价,两者同时给出时以 metadata.resolution 为准。大小写不敏感,也接受 1280x720 这类 WxH 写法(按像素面积折算到该模型允许的最近档位)。两者都不传时默认 720p;该模型没有 720p 档时取它档位表中的第一个(因此 viduq1 / viduq1-classic 缺省 1080p)。


metadata object | string 可选

模型专用参数。对象或 JSON 字符串都接受。只接受下表中的键,未知键返回 400(不会静默丢弃):

键类型说明
resolutionstring输出档位,取值同 size,优先级高于 size
aspect_ratiostring画面比例:1:1、16:9、9:16、3:4、4:3、auto
durationinteger时长,顶层 duration / seconds 都缺省时生效
seedinteger随机种子,范围 [0, 2147483648);不传由模型服务方随机
audioboolean是否音视频直出,见音视频直出
off_peakboolean是否错峰生成,见错峰生成
watermarkboolean是否叠加水印
wm_positioninteger水印位置,取 1 / 2 / 3 / 4
wm_urlstring水印图片地址
meta_datastring自定义元数据,原样透传给模型服务方
payloadstring业务载荷,模型服务方原样回传,便于关联自有业务数据
is_recboolean使用推荐提示词(模型侧不采用传入的 prompt);prompt 仍必须提供,不能为空
movement_amplitudestring运镜幅度:auto、small、medium、large
bgmboolean是否带背景音乐;仅 viduq2、viduq2-pro 的参考生视频支持,其它组合传 true 返回 400
actionstring显式指定生成动作,见输入组合与动作
images / imagestring | string[]图片的兜底位置:仅当顶层 images / image 都为空时采用,两处不合并

三类特殊键:

  • callback_url:任务终态回调地址,放在顶层或 metadata 下都会被识别,由网关在任务结束后回调,不会转发给模型服务方。
  • prompt / model:写在 metadata 下会被忽略,以顶层字段为准。
  • sounds / videos / subjects / auto_subjects / voice_id:本期未开放,传入返回 400。

callback_url string 可选

任务进入终态后由网关 POST 回调的地址(也可写在 metadata.callback_url)。回调前会做可达性校验,指向内网或非法协议的地址返回 400 invalid_callback_url。

输入组合与动作​

请求实际走哪种生成场景,由输入图片张数与模型能力共同决定;也可以用 metadata.action 显式指定。

输入图片默认动作metadata.action 取值
0 张文生视频textGenerate
1 张首帧图生视频(模型不支持图生、但支持参考生时走参考生)generate
2 张首尾帧生视频(模型不支持首尾帧时走参考生)firstTailGenerate
3 张及以上参考生视频referenceGenerate

注意

显式 action 优先于张数推断,但目标动作必须是该模型支持的能力,否则返回 400。例如 viduq3-pro 不支持参考生视频,传 3 张图或 metadata.action=referenceGenerate 都会被拒绝。

图片要求​

项限制
引用形式公网 http(s) URL,或 data:image/<类型>;base64,<数据>
内联图片体积单张解码后 ≤ 10 MB
multipart 上传字段 first_frame_image、last_frame_image、input_reference、images;单文件 ≤ 10 MB,只接受 PNG / JPEG / WebP
本网关素材库引用不支持 asset://,请改用公网 URL 或内联形式
张数图生 1 张、首尾帧 2 张、参考生 1–N 张(N 见模型能力)

请求示例​

文生视频:

bash
curl -X POST 'https://api.yu-yu.ai/v1/videos' \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "viduq3-pro",
    "prompt": "一只橘猫坐在窗边打哈欠,清晨自然光,镜头缓慢推进",
    "duration": 5,
    "size": "720p",
    "metadata": { "aspect_ratio": "16:9", "seed": 12345 }
  }'

图生视频(首帧):

bash
curl -X POST 'https://api.yu-yu.ai/v1/videos' \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "viduq2-pro",
    "prompt": "镜头缓慢环绕,发丝随风摆动",
    "image": "https://your-cdn.example.com/first-frame.png",
    "duration": 5,
    "metadata": { "resolution": "1080p", "movement_amplitude": "small" }
  }'

首尾帧生视频:

json
{
  "model": "viduq1",
  "prompt": "人物从静止到转身离开,镜头固定",
  "images": [
    "https://your-cdn.example.com/first.png",
    "https://your-cdn.example.com/last.png"
  ]
}

参考生视频(显式指定动作与音视频直出):

json
{
  "model": "viduq4-preview",
  "prompt": "三位角色依次登场,保持各自的服装与发型",
  "images": [
    "https://your-cdn.example.com/ref-1.png",
    "https://your-cdn.example.com/ref-2.png",
    "https://your-cdn.example.com/ref-3.png"
  ],
  "duration": 8,
  "metadata": {
    "action": "referenceGenerate",
    "resolution": "1080p",
    "audio": true
  }
}

提交响应​

提交成功后立即返回任务对象,此时视频还没生成:

json
{
  "id": "task_xxxxxxxxxxxxxxxx",
  "task_id": "task_xxxxxxxxxxxxxxxx",
  "object": "video",
  "model": "viduq3-pro",
  "status": "queued",
  "progress": 0,
  "created_at": 1767225600,
  "upstream_task_id": ""
}
字段类型说明
idstring任务 ID,后续查询与取回都用它
task_idstring与 id 同值,兼容早期接口(逐步废弃)
objectstring固定为 video
modelstring实际使用的模型名
statusstring提交阶段固定为 queued
progressinteger进度百分比,0~100
created_atinteger创建时间(Unix 秒)
upstream_task_idstring兼容字段;Vidu 任务固定为空串

查询任务​

GET https://api.yu-yu.ai/v1/videos/{task_id}

旧入口的兼容别名是 GET https://api.yu-yu.ai/v1/video/generations/{task_id}:它返回网关通用任务体 {"code":"success","data":{...}},字段与本页描述的视频对象不同;要下面这套字段请用 /v1/videos/{task_id}。

Path 参数​


task_id string 必选

提交任务时返回的任务 ID。

响应参数​

json
{
  "id": "task_xxxxxxxxxxxxxxxx",
  "task_id": "task_xxxxxxxxxxxxxxxx",
  "object": "video",
  "model": "viduq3-pro",
  "status": "completed",
  "progress": 100,
  "created_at": 1767225600,
  "completed_at": 1767225720,
  "upstream_task_id": "",
  "metadata": {
    "url": "https://your-cdn.example.com/result.mp4",
    "cover_url": "https://your-cdn.example.com/result-cover.jpg",
    "watermarked_url": "https://your-cdn.example.com/result-watermark.mp4"
  }
}
字段类型说明
id / task_idstring任务 ID
modelstring本次任务使用的对外模型名
statusstring任务状态,见下表
progressinteger进度百分比;模型服务方不回报进度时为 0
created_at / completed_atinteger创建时间与任务行最后一次更新时间(Unix 秒)。任务未完成时也可能带上 completed_at,判断是否完成只看 status
upstream_task_idstring兼容字段;Vidu 任务固定为空串
metadata.urlstring结果视频地址,任务成功后返回
metadata.cover_urlstring结果视频封面地址,模型服务方提供时返回
metadata.watermarked_urlstring带水印的结果视频地址,模型服务方提供时返回
errorobject失败时的 { code, message },见常见错误

状态取值​

status含义客户端处理
queued排队中,尚未开始继续轮询
in_progress生成中继续轮询
completed已完成从 metadata.url 取回结果,或直接下载文件本体
failed失败读取 error.code 与 error.message
cancelled已取消停止轮询
unknown状态无法识别停止轮询并记录任务 ID

说明

排队、准备素材、调度中等中间态统一显示为 queued;模型服务方回报的其它未知中间态统一按 in_progress 处理,不会被误判成失败。

取回视频文件​

GET https://api.yu-yu.ai/v1/videos/{task_id}/content 返回视频二进制流(不是 JSON),响应头带内容类型,适合直接交给播放器或下载:

bash
curl -L 'https://api.yu-yu.ai/v1/videos/task_xxxxxxxxxxxxxxxx/content' \
  -H 'Authorization: Bearer <API_KEY>' \
  -o result.mp4

任务未完成时该端点不会返回半成品,会按任务状态报错;也可以直接用查询结果里的 metadata.url。

注意

metadata.url 由模型服务方提供,存在有效期。需要长期保存时请及时下载或转存到自己的存储。

轮询建议​

  • 首次查询延迟 5 秒以上,之后每隔 5 秒查询一次;命中 completed / failed / cancelled 立即停止。
  • 1080p 以上档位、较长时长的任务耗时更久,请放宽轮询上限;也可以提交时传入 callback_url,由网关在终态回调。
  • 查询返回 5xx 属于网关或模型服务方临时故障,重试 2~3 次即可,不要无限重试。

常见错误​

错误响应分两种形状,取决于失败发生在哪一步。

请求本身失败(提交或查询返回 HTTP 4xx / 5xx):

json
{
  "code": "invalid_duration",
  "message": "viduq2 的时长必须在 1–10 秒之间(收到 12)",
  "data": null
}

任务失败(查询返回 HTTP 200、status 为 failed)——错误信息在 error 对象里:

json
{
  "id": "task_xxxxxxxxxxxxxxxx",
  "status": "failed",
  "error": {
    "code": "content_policy_violation",
    "message": "输入未通过内容审核"
  }
}

两种形状的 code 命名规则一致,但可出现的取值不同:

code含义处理方式
unsupported_vidu_modelmodel 不在本页清单内换成清单中的模型名
prompt_too_longprompt 超过该动作的字符上限缩短提示词
invalid_image_count图片张数与动作不匹配按输入组合与动作调整张数
invalid_actionmetadata.action 取值非法,或该模型不支持这个动作换一个该模型支持的动作
invalid_resolution档位不在该模型的档位表里换成该模型支持的档位
invalid_duration时长越界,或 vidu2.0 传了非 4 / 8 的值按模型的时长区间传值
invalid_metadatametadata 里出现未知键或类型不符按上表修正键名与类型
invalid_image图片既不是 http(s) URL,也不是合法的 data:image 内联串换成可公网访问的 URL 或内联形式
invalid_callback_urlcallback_url 不可达或协议非法换成公网可达的 http(s) 地址
invalid_request请求体不是合法 JSON,或 prompt 为空检查 JSON,并补上 prompt
invalid_secondsseconds 超过时长上限改小 seconds,或改用 duration
invalid_multipart_formmultipart 表单解析失败检查表单字段与上传文件
audio_not_supported该模型不支持 audio=true去掉 audio,或换成支持音视频直出的模型
off_peak_not_supported该模型在对应 audio 取值下不支持错峰按错峰生成调整
bgm_not_supported非 viduq2 / viduq2-pro 参考生视频传了 bgm=true去掉 bgm
unauthorized模型服务方鉴权失败联系管理员核对 API Key 配置
model_unavailable该模型在当前账号下不可用换模型,或联系管理员开通
content_policy_violation输入或结果未通过内容审核调整提示词或输入素材
invalid_parameter模型服务方判定参数非法按 message 修正参数
upstream_rate_limited模型服务方限流稍后重试
upstream_concurrency_exceeded模型服务方账号并发已满稍后重试,或降低并发
upstream_busy同一请求正在被处理稍后重试
insufficient_upstream_credit模型服务方账户资源不足联系管理员处理
task_not_found任务 ID 不存在,或已被清理核对任务 ID 是否来自当前 API Key 的提交
task_not_exist查询的任务 ID 不存在,或不属于当前 API Key用本 Key 自己的任务 ID 查询
cancelled任务已取消不再轮询
upstream_error模型服务方返回未归类的错误按 message 排查;持续失败请提交任务 ID
empty_creation模型服务方返回成功但没有结果地址重新提交;持续出现请联系管理员
timeout_queued排队超时,任务已被判失败重新提交;长期排队请联系管理员
timeout_submitting提交超时,任务已被判失败重新提交
internal_error网关内部错误(没有更具体的错误码)稍后重试;持续失败请提交任务 ID

Vidu 原生协议入口​

原生入口的路径与上游逐字一致,只需要把 base URL 换成 https://api.yu-yu.ai。请求体沿用上游字段,但只支持下面列出的白名单;白名单外的键与未开放能力会在提交校验阶段失败,见本节末尾的说明。

原生入口固定使用 Vidu 渠道。同一模型名如果还配置在其它渠道上,原生入口不会选到那些渠道;请确认要承接 /ent/v2/* 的模型挂在 Vidu 渠道下。

动作提交端点输入
文生视频POST https://api.yu-yu.ai/ent/v2/text2videoprompt,不接受图片
首帧图生视频POST https://api.yu-yu.ai/ent/v2/img2videoprompt + images(恰好 1 张)
首尾帧生视频POST https://api.yu-yu.ai/ent/v2/start-end2videoprompt + images(恰好 2 张)
参考生视频POST https://api.yu-yu.ai/ent/v2/reference2videoprompt + images(1 张到该模型上限)
查询GET https://api.yu-yu.ai/ent/v2/tasks/{task_id}/creations—
取消POST https://api.yu-yu.ai/ent/v2/tasks/{task_id}/cancel见取消

鉴权​

原生入口同时接受上游写法与网关写法:

http
Authorization: Token <API_KEY>
http
Authorization: Bearer <API_KEY>

请求体​

原生请求体按上游字段原样提交,支持的键:

model、prompt、images、duration、resolution、aspect_ratio、seed、audio、off_peak、watermark、wm_position、wm_url、meta_data、payload、is_rec、movement_amplitude、bgm、callback_url。

json
{
  "model": "viduq3-turbo",
  "images": ["https://example.com/first.jpg"],
  "prompt": "镜头缓慢推进,清晨自然光",
  "duration": 5,
  "resolution": "720p",
  "aspect_ratio": "16:9",
  "seed": 0,
  "audio": false,
  "off_peak": false,
  "watermark": false
}

与 OpenAI 入口的差异

  • 动作由端点决定:调用 /img2video 就是图生视频,不会因为少传/多传图片而自动换到别的端点。张数与端点不符不会换成别的端点:任务先入队,随后在提交校验阶段失败,查询时表现为 state=failed + err_code=invalid_image_count。
  • prompt 必填:与 OpenAI 入口一致。is_rec=true 且提示词为空的原生请求会被拒绝。
  • 未开放的字段:subjects、sounds、videos、voice_id、auto_subjects 本网关暂不支持。提交会先入队成功,随后校验失败:查询得到 state=failed + err_code=invalid_metadata(未知的 metadata 键同样是这个结果)。
  • metadata.action 是 OpenAI 入口的概念;原生入口即使传了也会被端点覆盖。

提交响应​

json
{
  "task_id": "cgt-20261022160000-abcde",
  "state": "created",
  "model": "viduq3-turbo"
}

这里的 task_id 是本网关的任务 ID,直接拿去 /ent/v2/tasks/{task_id}/creations 查询即可。提交阶段还没有调用上游,因此只回 state=created,不回 credits 等上游回显字段。

查询响应​

json
{
  "id": "cgt-20261022160000-abcde",
  "state": "success",
  "credits": 62.5,
  "off_peak": false,
  "bgm": false,
  "creations": [
    {
      "id": "creation-1",
      "url": "https://cdn.example.com/video.mp4",
      "cover_url": "https://cdn.example.com/cover.jpg",
      "watermarked_url": "https://cdn.example.com/video-wm.mp4"
    }
  ]
}

state 的取值与上游一致:

state含义是否终态
created已受理:排队中、提交中或素材准备中否
processing上游生成中否
success成功,creations 里是结果地址是
failed失败,看 err_code 与 message是
canceled已取消是

failed 时 err_code 优先回上游原始错误码(如 TaskPromptPolicyViolation);本地判死、上游没给码时回网关错误码(如 empty_creation)。message 是可读文案,可直接展示给用户。

错误响应​

鉴权、限流、分发等早于任务的失败,以及查询/取消失败,都使用上游同形的错误信封:

json
{
  "code": 400,
  "reason": "invalid_duration",
  "message": "vidu2.0 只接受 4 或 8 秒(收到 5)",
  "metadata": { "trace_id": "" }
}

reason 按 Vidu 的错误码命名(Unauthorized、CreditInsufficient、QuotaExceeded、TooManyRequests、TaskNotFound、BadRequest、TaskPromptPolicyViolation、UserCancelled …)。网关内部独有的错误码(如 invalid_duration)会原样出现在 reason 里,而不是被编造成上游码。

取消​

POST https://api.yu-yu.ai/ent/v2/tasks/{task_id}/cancel 已注册,但本网关暂未接上游取消能力:任务存在时返回 501 + reason=cancel_not_supported,任务不存在时返回 404 + reason=TaskNotFound。任务会继续执行到终态并正常结算,如需提前终止请联系管理员。

常见问题​

  • 提交返回 unsupported_vidu_model:model 必须是本页清单里的名字,其它写法(含自定义别名)都会被拒绝。
  • 只想文生视频却收到 400:viduq4-preview、viduq3-pro-fast、viduq3-mix、viduq3-drama、viduq3-ad、viduq3、viduq2-pro、viduq2-turbo、viduq2-pro-fast、viduq1-classic、vidu2.0 都不支持纯文本输入,至少要给一张图。
  • vidu2.0 传 5 秒报错:该模型只接受 4 或 8 秒。
  • 参考图较多时报错:除 viduq4-preview(15 张)外,参考生视频最多 7 张。
  • 查询一直 in_progress:模型正在生成或任务在排队;错峰任务排队时间可能明显更长。
  • 结果地址打不开:metadata.url 有有效期,请及时下载;也可以调用 GET /v1/videos/{task_id}/content 由网关转发。

在线调试​