Unified Models · byte-omnihuman-1-5
一张人像图 + 一段音频(<60 秒),出一条对口型说话视频。走火山 visual API(V4 签名),由 bytedance-proxy 代理,unified 里当普通 image2video 模型调。TEST 环境端到端已跑通。
关键差异:火山这个接口不会主动回调,所以 proxy 用自己的 Cloudflare Queue 每 15 秒发一条延迟消息去查任务,查到终态才把结果 webhook 回 unified consumer。对 unified 来说它和其它 async 模型没有区别。
{
"model_id": "byte-omnihuman-1-5",
"name": "byte-omnihuman-1-5",
"display_name": "OmniHuman 1.5 (Volcengine)",
"enabled": true,
"supported_types": ["image2video"],
"config": {
"image2video": {
"async": true,
"timeout": 1500000, // 25 分钟:proxy 轮询上限 80 次 × 15s ≈ 20 分钟,留余量
"provider": "bytedance",
"worker_binding": "BYTEDANCE_PROXY",
"supports_n": false,
"parameterMapping": {}, // 字段名与 proxy 完全一致,直传
"defaults": {},
"provider_headers": {
"X-Model": "video/omnihuman-1.5"
},
"outputMapping": {
"status": "status",
"results": "videos" // proxy 的 results[] → unified 的 videos[]
}
}
}
}
照 byte-seedance-1-pro-i2v 同款形状写的。没有 fallback_model_id —— 数字人对口型没有可替补的等价模型,失败就该原样报给 caller。
curl -X POST "https://model-config-dashboard.pages.dev/api/models" \
-H "Content-Type: application/json" \
-d '{"model_id":"byte-omnihuman-1-5","name":"byte-omnihuman-1-5","display_name":"OmniHuman 1.5 (Volcengine)","enabled":true,"supported_types":["image2video"],"config":{"image2video":{"async":true,"timeout":1500000,"provider":"bytedance","worker_binding":"BYTEDANCE_PROXY","supports_n":false,"parameterMapping":{},"defaults":{},"provider_headers":{"X-Model":"video/omnihuman-1.5"},"outputMapping":{"status":"status","results":"videos"}}}}'
prod 除这条 curl 外什么都不用动:bytedance-proxy 是单 worker,prod/test consumer 早就都绑了 BYTEDANCE_PROXY,火山 secrets 也已设在 proxy 上。
POST https://unified-generation-api.adtech-videogen.workers.dev/generate
Authorization: Bearer <你的 unified key>
{
"type": "image2video",
"models": ["byte-omnihuman-1-5"],
"input": {
"image_url": "https://.../portrait.jpeg", // 必填,人像图
"audio_url": "https://.../speech.mp3", // 必填,音频 <60s(15s 内效果最好)
"prompt": "自然微笑,轻微点头", // 可选,≤300 字符
"output_resolution": 1080, // 可选,720 或 1080(默认 1080)
"pe_fast_mode": false, // 可选,720 配 true / 1080 配 false 最接近即梦
"mask_url": ["https://.../mask.png"], // 可选,指定谁说话(多主体图才需要)
"seed": -1, // 可选
"skip_subject_check": false // 可选,true 跳过主体识别省 ~20s
}
}
| 字段 | 必填 | 说明 |
|---|---|---|
| image_url | 是 | task-type 要求的字段,也是 proxy 的原生字段名,直传不映射 |
| audio_url | 是 | 60 秒硬上限(超了提交成功但查询报 50215);建议 15 秒内 |
| output_resolution / pe_fast_mode | 否 | 720+fast 实测约 3 分钟出片;1080+非 fast 更慢但质量高 |
| skip_subject_check | 否 | 默认先跑主体识别(约 20 秒),图里没人/类人主体直接快速失败,不花生成钱 |
| 项 | 值 |
|---|---|
| task_id | 1df3529b-376d-4d81-b4e1-5fbef3d62d05 |
| 输入 | Seedream 生成人像 + 8 秒合成音频,720p + fast mode |
| 提交 → 完成 | 07:30:39 → 07:38:08(7 分 28 秒,含主体识别 + 排队) |
| 最终 status | success(subtask completed,无 fallback) |
| 产出 | 07eb78ed…mp4(1.9 MB,HTTP 200 已验证下载) |
另有 proxy 直连一单(绕过 unified):960×960 H.264+AAC、8 秒、1.86 MB,中间帧人像口型正常。两条路径都验过。
VOLCENGINE_ACCESS_KEY / VOLCENGINE_SECRET_KEY(wrangler secret,不进 toml)。byte-omnihuman-1-5;prod 未动,上面那条 curl 随时可发。