营响力 AI 短剧数字人 Demo

用于验证“数字人形象先进入快快网络素材库审核,再通过特别版 Seedance 2 生成短剧视频”的完整链路。

页面拆分为两个一级模块:

  • 人物素材库:负责素材入库、审核、历史素材查看与人物组合,是长期资产管理区。
  • 短剧生产:以一个短剧项目管理多个片段;每段独立配置出场人物、提示词、图片、视频、连续性和生成参数。

在人物素材库点击“用于短剧生产”,会把该人物绑定到当前场景角色并自动进入生产模块。

短剧项目支持新增、复制、删除和调整片段顺序。每个片段可以生成多个候选版本,选定的正式版本会作为后续片段的连续性来源,并最终进入拼接清单。连续性模式包括:独立生成、引用上一片段选定视频、引用上一片段尾帧和仅使用手动参考视频。当前接口已支持上一片段视频作为 reference_video 自动传入;尾帧抽取和最终 MP4 拼接属于下一步服务端能力,页面会明确显示是否已具备前置条件。

已串联的流程

  1. 输入数字人正面、侧面、背面三张公网图片 URL。
  2. 逐张调用 POST /v1/assets/upload,以服务端素材库 Token 提交三张素材审核。
  3. 对仍在审核的 mat_* 素材调用 GET /v1/assets/{asset_id},直至三张全部 ready 或出现 failed
  4. 从全部历史素材中选择多张图片,绑定成可复用的人物/形象;三视图只是常见组合,不再是固定的数据结构。
  5. 为本场角色选择人物素材,并补充场景、道具等非人物图片及参考视频,组织成官方 content 数组后调用 POST /sd/api/v3/contents/generations/tasks
  6. 用返回的 id 调用 GET /sd/api/v3/contents/generations/tasks/{task_id},直至 succeededfailed

视频提交后页面每 2.5 秒自动查询一次,最长持续 30 分钟。只有上游明确返回 failed 才显示生成失败30 分钟仍为 running 时会保留“仍在生成”状态,不把等待超时误判为失败。任务 ID 会保存在浏览器本地,刷新或重新打开页面后会自动恢复查询。

已完成的候选视频支持“下载视频”和“复制视频链接”。下载直接使用服务商返回的临时签名地址,不占用本 Demo 服务器的视频下载带宽;如果服务商没有返回附件响应头,浏览器可能先打开播放页,用户仍可保存。复制的是本 Demo 域名下以 .mp4 结尾的代理链接,可直接作为后续片段的公网参考视频;服务端会根据任务 ID 重新获取服务商的有效地址。

短剧、片段、候选版本、任务 ID 和视频地址保存在当前域名的浏览器 localStorage 中。普通刷新不会丢失;清理网站数据、使用无痕模式、更换浏览器/设备/域名会丢失本地项目记录。在没有数据库和对象存储的当前版本中,仍建议用户及时下载成品。

不可见审计日志

客户页面不展示请求诊断。页面点击、参数修改、表单提交、视频播放/下载/复制链接、模块与片段切换、前端异常,以及服务端 HTTP 请求、上游调用、任务状态、耗时和错误都会写入 JSONL 日志。

  • 默认目录:./logs/audit-YYYY-MM-DD-PID.jsonl
  • 生产环境:用 AUDIT_LOG_DIR 指向持久化磁盘,并由技术配置日志保留/清理周期
  • 脱敏:不记录 API Key、Authorization、Cookie 和签名查询参数提示词仅记录长度和哈希URL 仅记录域名、路径与查询字段名
  • 关联排查:日志保留 requestId、浏览器 clientId/sessionId、客户视频 Key 的不可逆指纹与末四位、任务 ID、服务商 trackId、状态码和耗时;不保存完整 Key

1020 人试用的部署边界

单实例 Node 服务可用于 1020 人低频试用,但上线必须配置 HTTPS、限流、进程守护和持久日志目录。素材库 Token 由服务端统一配置;每位客户首次访问时输入自己的视频 Key视频生成费用归属该 Key。assetReviewTasks 与视频任务 Key 映射当前仍在单进程内存中,因此暂时应保持单实例部署;如果要多实例扩容,需先将任务状态迁入 Redis/数据库。

页面会分别展示正面、侧面、背面的审核状态与失败原因。异步审核任务 ID 会保存在浏览器本地,刷新或重新打开页面后会继续查询;本场角色尚未选齐人物素材时不会解锁视频生成。

人物库会读取全部历史素材,并把名称形如“人物名 · 正面/侧面/背面”的素材自动组合成人物;也可以手动选择 19 张历史素材创建人物组合。场景支持 13 个角色,每个角色可绑定一组人物素材,并在刷新后恢复本场角色。

生产页支持文本、图片和视频三类输入。人物图片与场景、道具等其他参考图片共同占用单次最多 9 张图片额度;参考视频单独计数,当前 Demo 最多 3 条。最终请求按“文本 → 人物图片 → 其他参考图片 → 参考视频”的顺序写入 v3 content 数组,页面会同步生成图号和角色映射。

素材库 Token 只放在服务端环境变量中,不进入浏览器,也不会写入 Git。客户视频 Key 保存在客户当前浏览器的 localStorage,并随视频请求提交给本 Demo 服务端;服务端只在内存中建立任务与 Key 的临时映射,不写入日志或 Git。清理网站数据或更换浏览器后需重新输入。

本地运行

cp .env.example .env.local
npm start

打开 http://localhost:4173

请优先通过这个地址访问,不要把 public/index.html 当成普通文档直接打开。页面现已兼容直接打开时的样式加载,但接口交互仍依赖本地服务。

默认 .env.example 使用 Mock 模式,可以先完整评审交互。连接真实接口时设置服务端素材库 Token视频 Key 由客户在页面首次访问时输入:

KK_ASSET_TOKEN=素材库Token
DEMO_MOCK=0

Mock 模式下可将任一素材 URL 写成包含 reject 的地址,验证单张驳回、失败原因和视频生成锁定状态。

线上部署交接

本项目没有第三方 npm 运行依赖,服务器安装 Node.js 20 或更高版本后即可启动:

cp .env.example .env.local
npm start

上线前请完成以下配置:

  1. 在服务端填写 KK_ASSET_TOKEN,并设置 DEMO_MOCK=0;不要把 .env.local 提交到 Git。视频 Key 不配置在服务器,由客户在页面输入。
  2. 设置 HOST=0.0.0.0 和实际监听端口,由 Nginx/网关反向代理并提供 HTTPS。
  3. AUDIT_LOG_DIR 指向持久化磁盘,设置随机的 AUDIT_HASH_SALT,同时配置日志轮转与清理周期。
  4. 使用 systemd、PM2 或容器编排守护 Node 进程,异常退出后自动重启。
  5. 在入口层增加请求频率限制与并发生成限制;素材库 Token 仅保留在服务端。
  6. 发布后访问页面输入客户视频 Key检查素材与视频能力均为可用再分别跑一条素材审核和视频生成链路。

当前素材审核任务状态保存在单进程内存中,首次客户交付建议只运行一个应用实例。若需要多实例扩容,应先把任务状态迁移到 Redis 或数据库。

当前还缺的真实联调材料

  • 快快素材库 Token:由服务端统一配置,用于素材上传、审核与历史素材查询。
  • 客户视频 Key:形如 sk-...,由客户首次打开页面时输入,用于视频提交和结果查询。
  • 数字人三视图的公网 URL:正面、侧面、背面各一张;接口不支持直接上传本地文件或 Base64URL 需带 .png.jpg 等扩展名。
  • 客户希望验证的第一段分镜人物动作、台词、场景、时长、横竖屏及是否需要同步声音。Demo 已提供一段可替换示例。
  • 视频任务成功响应:新版接口在 content.video_url 返回临时签名视频地址。

接口边界

  • 素材审核与视频生成统一请求 https://ai-api.kkidc.com,但分别使用服务端素材库 Token 与客户视频 Key。
  • 新版素材库只在列表中返回 ready 素材;pending / failed 通过单素材接口查询。
  • 视频生成应长期保存素材库返回的 asset://... 引用,不要依赖原始图片 URL。
  • 参考图/参考视频/首帧/首尾帧属于不同互斥调用方式;本 Demo 采用“多模态参考图”方式。
  • 默认视频 720p时长 415 秒;真人/数字人必须使用审核通过的 mat_* 素材 ID。

接口依据:快快 AI Hub 最新文档

验证

npm test
Description
No description provided
Readme 574 KiB
Languages
JavaScript 73.9%
CSS 14.1%
HTML 12%