豆包 Seedance 2.0 支持把素材(图片/视频/音频)入库,生成视频时用
asset://<asset_id> 引用,无需每次传公网 URL。网关 1:1 镜像火山官方素材库接口(/doubao/?Action=...)。概述
Seedance 2.0 的素材库分两类:- 虚拟人像 / 普通素材:你拥有可商用的素材,直接创建素材组 → 上传 → 轮询 → 使用。
- 真人人像素材:需先完成真人认证(H5 活体认证),认证通过后再上传该真人的素材。官方禁止直接上传含真人人脸的参考图,真人素材必须走此流程。
账号绑定(重要):
asset_id 与火山账号强绑定。素材在哪个账号下创建,就只能被同一账号生成视频时引用。网关会自动记录”素材 → 渠道”映射,生成请求引用 asset:// 时会被锁定路由回创建它的渠道,无需你手动指定。前置条件(管理员配置)
- 在该 VolcEngine(豆包)渠道的”高级设置”中填写 素材库 Access Key (AK) 与 Secret Key (SK)。
- 视频生成仍使用渠道的
ark-API Key(Bearer),二者独立。 - AK/SK 必须与该
ark-Key 属于同一火山账号,否则生成时引用asset://会报”素材不存在”。 - 若渠道 Key 本身就是
ak\|sk格式,可不单独填 AK/SK,网关会自动复用。
- 视频生成仍使用渠道的
- (推荐)在渠道高级设置填写 素材库项目 (ProjectName)。
ProjectName是火山 IAM 的项目(资源范围),必须是该 AK/SK 有权限的项目。配置后网关会强制覆盖用户请求体里的ProjectName,由渠道统一控制——这样终端用户无需也不要自己传ProjectName,避免传错导致AccessDenied,也保证”建组 / 传素材 / 查询”用同一项目。留空则透传用户传的值(火山默认default)。 - 把哨兵模型
doubao-asset加入该渠道的模型列表(用于把素材管理请求路由到此渠道)。 - 素材管理调用本身免费,不计费。
常见报错
AccessDenied: User is not authorized to perform: ark:CreateAsset on resource: trn:iam::<账号>:project/<项目> —— 这是火山 IAM 权限问题(不是网关问题):该 AK/SK(多为子账号)在对应项目下没有 ark:CreateAsset 等权限。解决:用主账号 AK/SK,或在火山访问控制里给该子账号授予 Ark 素材相关权限并覆盖对应项目范围;同时建议用渠道的”素材库项目”统一指定 ProjectName。鉴权
所有请求使用网关令牌:POST /doubao/?Action=<Action>&Version=2024-01-01
简化接口(推荐)
除了镜像官方的/doubao/?Action=...,网关还提供一套统一的简化接口:复用平台通用的 POST /v1/task/submit 入口和 {model, input} 风格,隐藏火山的 Action / GroupId / ProjectName / 签名等复杂度——大多数场景推荐使用。
- 入口固定
POST /v1/task/submit,model固定为doubao-asset,用input.action区分操作。 - 同步返回:素材操作很快,提交即返回结果(
asset_id等),无需轮询。 - 自动托管素材组:
upload不传group_id时,网关自动为你创建并复用一个用户专属素材组;与原生/doubao接口落到同一个组,两种方式上传的素材互通。 - 统一响应:
{ "code": 0, "message": "ok", "data": {...} }(code != 0表示错误)。
支持的 action
action 取值:upload(上传,需 url+asset_type,可选 name/group_id)、query(查询,需 asset_id)、list(列出本人素材)、delete(删除,需 asset_id)、create_validate_session / get_validate_result(真人认证,见下)。
上传成功返回:
query 返回 Status: "Active")即可在视频生成里用 asset://<asset_id> 引用。
资源隔离 + 互通:每个用户的素材进各自专属素材组,彼此隔离;同一用户无论用简化接口还是原生
/doubao 接口创建的素材,都在同一组、可互相引用。真人认证(简化)
真人认证需要演员在手机上完成扫脸活体认证,这一步发生在”演员浏览器 ↔ 火山”之间,网关无法代办——你仍需准备一个callback_url 接收火山扫脸完成后的回跳。简化接口只统一了入口与字段:
group_id 后,用 upload 并显式传 group_id 把该真人素材传入对应组。
在 Playground 使用
管理员给doubao-asset 模型配置 playground_mode=task 和如下 task_input_schema(JSON Schema),即可在 Playground 生成动态表单:
原生镜像接口
以下是 1:1 镜像火山官方的底层接口(/doubao/?Action=...)。如果你已使用上面的简化接口,通常无需直接调用这些;它们用于需要精确控制 GroupId、或直接对接火山官方 SDK 的场景。
虚拟人像 / 普通素材流程
第一步:创建素材组
第二步:上传素材
每次上传一个素材,AssetType 可为 Image / Video / Audio,URL 必须是公网可访问地址。
第三步:轮询素材状态
上传是异步处理,需轮询直到Status 变为 Active 才能用于生成(Failed 表示处理失败)。
其它管理接口
ListAssetGroups / ListAssets / GetAssetGroup / UpdateAssetGroup / UpdateAsset / DeleteAsset / DeleteAssetGroup,用法相同:POST /doubao/?Action=<Action>&Version=2024-01-01 + 对应 JSON body。
真人人像素材流程
真人素材需先完成真人认证(H5 活体认证)。第一步:创建真人认证会话
H5Link(演员打开完成认证)和 BytedToken(有效期 120 秒,仅一次性使用):
H5Link 完成活体认证后,火山会重定向回你的 CallbackURL,并带上 resultCode(10000 表示成功)等参数。
第二步:用 BytedToken 换 GroupId
认证未完成时可能返回 ValidatePending,稍后重试即可。
第三、四步:上传素材 + 轮询
拿到GroupId 后,调用 CreateAsset(同虚拟人像第二步)上传该真人的素材,再用 GetAsset 轮询到 Active。同一真人的不同妆造可放在同一 GroupId 下。
在视频生成中引用素材
素材Status=Active 后,把它写成 asset://<asset_id> 即可在生成请求中引用。
方式一:统一异步任务接口 /v1/task/submit
把 asset://... 放进 reference_images / first_frame / reference_videos / reference_audio:
方式二:原生 /doubao 接口
把 asset://... 放进 content 数组的 image_url / video_url / audio_url:
注意事项
- 上传成功不等于可立即使用,必须等到
Status=Active。 - 素材 URL 需保持公网可访问,否则处理会失败。
- 一个素材组建议只放同一角色 / 同一真人的素材。
asset_id账号级绑定:跨账号无法引用。网关在素材创建时记录”素材 → 渠道”映射,生成时自动锁定回该渠道。- 用户级隔离:每个令牌(用户)只能查询 / 修改 / 删除自己经网关创建的素材;
ListAssets/ListAssetGroups只返回本人素材;用他人的asset_id调GetAsset/DeleteAsset等会被网关以403 AssetNotOwned拒绝;生成视频时引用他人的asset://同样会被 403 拒绝(防止盗用他人的真人/虚拟素材)。多个用户共用同一渠道(同一火山账号)时也互不可见。 - 若你在火山控制台 / 体验中心(而非经本网关)创建素材,网关没有该映射;这些素材对普通用户不可见 / 不可操作(隔离的预期行为)。多渠道(多账号)场景下请使用绑定到对应渠道的令牌(令牌固定渠道)来保证路由正确。