Files
yingxiangli-duanju/README.md
2026-08-05 17:59:38 +08:00

115 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 营响力 AI 视频与短剧生产 Demo
用于验证“数字人形象先进入快快网络素材库审核,再通过特别版 Seedance 2 生成短剧视频”的完整链路。
页面拆分为四个一级模块:
- **人物素材库**:负责素材入库、审核、历史素材查看与人物组合,是长期资产管理区。
- **通用素材库**:上传并审核公网图片或 MP4/MOV 视频,保留历史素材,并可作为当前片段的其他参考图片或参考视频。
- **通用视频生成**:不创建角色和短剧片段,直接输入提示词,选择通用素材或补充公网图片/视频生成单条视频;也支持纯文本生成。
- **短剧生产**:以一个短剧项目管理多个片段;每段独立配置出场人物、提示词、图片、视频、连续性和生成参数。
在人物素材库点击“用于短剧生产”,会把该人物绑定到当前场景角色并自动进入生产模块。
短剧项目支持新增、复制、删除和调整片段顺序。每个片段可以生成多个候选版本,选定的正式版本会作为后续片段的连续性来源,并最终进入拼接清单。连续性模式包括:独立生成、引用上一片段选定视频、引用上一片段尾帧和仅使用手动参考视频。当前接口已支持上一片段视频作为 `reference_video` 自动传入;尾帧抽取和最终 MP4 拼接属于下一步服务端能力,页面会明确显示是否已具备前置条件。
## 已串联的流程
1. 输入数字人正面、侧面、背面中任意 13 张公网图片 URL。
2. 逐张调用 `POST /v1/assets/upload`,以客户输入的统一令牌提交人物素材审核;无需凑齐三张。
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}`,直至 `succeeded``failed`
通用素材库同样调用 `POST /v1/assets/upload`:图片传入 `type: "image"`,视频传入 `type: "video"`。审核完成后的 `asset://mat_*` 引用可分别作为当前片段的其他参考图片或 `reference_video` 使用。通用图片用明确的素材用途标记与人物图片分开,避免进入人物组合区。
视频提交后页面每 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`、客户令牌的不可逆指纹与末四位、任务 ID、服务商 `trackId`、状态码和耗时;不保存完整令牌
## 1020 人试用的部署边界
单实例 Node 服务可用于 1020 人低频试用,但上线必须配置 HTTPS、限流、进程守护和持久日志目录。每位客户首次访问时输入自己的统一令牌素材与视频请求均使用该令牌视频生成费用也归属该令牌。`assetReviewTasks` 与视频任务令牌映射当前仍在单进程内存中,因此暂时应保持单实例部署;如果要多实例扩容,需先将任务状态迁入 Redis/数据库。
页面会分别展示正面、侧面、背面的审核状态与失败原因;未上传的视角保持“未上传”,不会被误判为失败。异步审核任务 ID 会保存在浏览器本地,刷新或重新打开页面后会继续查询;本场角色尚未选择人物素材时不会解锁视频生成。
人物库会读取全部历史素材,并把名称形如“人物名 · 正面/侧面/背面”的素材自动组合成人物;也可以手动选择 19 张历史素材创建人物组合。场景支持 13 个角色,每个角色可绑定一组人物素材,并在刷新后恢复本场角色。
生产页支持文本、图片和视频三类输入。人物图片与场景、道具等其他参考图片共同占用单次最多 9 张图片额度;参考视频单独计数,当前 Demo 最多 3 条。最终请求按“文本 → 人物图片 → 其他参考图片 → 参考视频”的顺序写入 v3 `content` 数组,页面会同步生成图号和角色映射。
客户统一令牌保存在客户当前浏览器的 `localStorage`,并随素材与视频请求提交给本 Demo 服务端;服务端只在内存中建立任务与令牌的临时映射,不写入日志或 Git。清理网站数据或更换浏览器后需重新输入。
## 本地运行
```bash
cp .env.example .env.local
npm start
```
打开 `http://localhost:4173`
请优先通过这个地址访问,不要把 `public/index.html` 当成普通文档直接打开。页面现已兼容直接打开时的样式加载,但接口交互仍依赖本地服务。
默认 `.env.example` 使用 Mock 模式,可以先完整评审交互。连接真实接口时设置:
```bash
DEMO_MOCK=0
```
Mock 模式下可将任一素材 URL 写成包含 `reject` 的地址,验证单张驳回、失败原因和视频生成锁定状态。
## 线上部署交接
本项目没有第三方 npm 运行依赖,服务器安装 Node.js 20 或更高版本后即可启动:
```bash
cp .env.example .env.local
npm start
```
上线前请完成以下配置:
1. 设置 `DEMO_MOCK=0`;客户令牌不配置在服务器,由客户首次访问页面时输入。
2. 设置 `HOST=0.0.0.0` 和实际监听端口,由 Nginx/网关反向代理并提供 HTTPS。
3.`AUDIT_LOG_DIR` 指向持久化磁盘,设置随机的 `AUDIT_HASH_SALT`,同时配置日志轮转与清理周期。
4. 使用 systemd、PM2 或容器编排守护 Node 进程,异常退出后自动重启。
5. 在入口层增加请求频率限制与并发生成限制。
6. 发布后访问页面输入客户令牌,检查素材与视频能力均为可用,再分别跑一条素材审核和视频生成链路。
当前素材审核任务状态保存在单进程内存中,首次客户交付建议只运行一个应用实例。若需要多实例扩容,应先把任务状态迁移到 Redis 或数据库。
## 当前还缺的真实联调材料
- **客户统一令牌**:形如 `sk-...`,由客户首次打开页面时输入,同时用于素材上传/查询与视频提交/查询。
- **数字人人物图片的公网 URL**:正面、侧面、背面任选 13 张;接口不支持直接上传本地文件或 Base64URL 需带 `.png``.jpg` 等扩展名。
- **客户希望验证的第一段分镜**人物动作、台词、场景、时长、横竖屏及是否需要同步声音。Demo 已提供一段可替换示例。
- **视频任务成功响应**:新版接口在 `content.video_url` 返回临时签名视频地址。
## 接口边界
- 素材审核与视频生成统一请求 `https://ai-api.kkidc.com`,并使用客户输入的同一个 Bearer 令牌。
- 新版素材库只在列表中返回 `ready` 素材;`pending` / `failed` 通过单素材接口查询。
- 视频生成应长期保存素材库返回的 `asset://...` 引用,不要依赖原始图片 URL。
- 参考图/参考视频/首帧/首尾帧属于不同互斥调用方式;本 Demo 采用“多模态参考图”方式。
- 默认视频 720p时长可选 514 秒整数;真人/数字人必须使用审核通过的 `mat_*` 素材 ID。
接口依据:[快快 AI Hub 最新文档](https://ai.kkidc.com/api-docs/8238027m0)。
## 验证
```bash
npm test
```