后端:
- 新增 Model(模特)团队级实体:形象图+三视图+声线(声线尾期),官方模板标签,软删
- Asset.Category 枚举一次加全(model_portrait/tri_view/voice/model_tryon/platform_kit/free_create/storyboard),逐期接线
- 送审范围 person → REVIEW_CATEGORIES{person,tri_view,storyboard}(review.py + adminpanel 队列),图片趴不送审;当前行为不变(forward-compat)
- /api/models/ ModelLibraryViewSet:本团队∪官方模板、官方/我的 tab、真人上传、软删(官方不可删)、跨团队资产引用防越权
- backfill_models 命令把历史成套模特(kind=model + 项目流命名配对)归集成 Model,dry-run 默认
前端:
- 左菜单新增「模特库」顶级入口(person 图标)+ 路由 /models
- 模特库页:全部/官方模板/我的模特 tab + 真人上传 + 模特卡(形象图+三视图缩略+官方标签),仅用 design token
测试:assets 10/10 绿;tsc+build 全绿;无头走查 0 console error(全部5/官方3/我的2,官方标签达标)
基线既有 7 失败(ai/projects provider mock 漂移)零新增
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.3 KiB
6.3 KiB
模特库 + 资产模型重构 · 设计稿
2026-06-20 · 与用户对齐后产出 · 先拍这版图纸,再分 3 期施工。 现状全是测试数据、平台未上线 → 数据可随意动(归类 / 删错图)。
0. 一句话目标
把「模特」从"一张图"升级成团队级、可复用的实体(模特库);图片生成线 + 视频项目线都能调它;资产按"图片趴 / 视频趴"两大块清晰分类。
1. 资产模型(实体定义)
① 模特(顶级实体 = 模特库)
一个完整模特 = 形象图 + 三视图 + 声线(声线最后做)。
- 团队级、可复用,不绑某个项目;图片线 + 视频线都能引用。
- 来源:官方预制(打「官方模板」标签)/ 商家自建(AI 生成或上传真人)。
- 模特库 = 左侧顶级菜单(像商品库),不再埋在弹窗里。
② 图片趴(3 类,均为「组」)
| 类 | 说明 | 形态 |
|---|---|---|
| 模特上身图 | 模特 + 商品 宣传图(引用模特库的模特) | 一组多张 |
| 平台套图 | 电商头图/轮播主图,各平台尺寸不同 | 一组 N 张(平台规则后续加) |
| 自由创作 | 杂图都归这 | 单张/多张 |
③ 视频趴
| 类 | 说明 | 形态 |
|---|---|---|
| 角色(原「人物」改名) | 见下方"角色链路" | 项目内,引用模特库 |
| 分镜图 | 每个视频任务脚本 = 一组分镜图 + 一组视频素材 | 组 |
角色链路(视频趴):
- A 引用模特库:选库里某模特当参考图 + 叠加符合剧情的服装样貌描述 → 生成该模特的定妆照 → 再出三视图。
- B 直接新生成:不用库里的,新生成一个 → 自动入模特库(要删去模特库删)。
- → "角色"卡需小改以承载这两条来法。
2. 后端模型设计(提案,期 1 细化)
新增 Model(模特)实体 · 团队级:
Model: team, name, is_official(官方模板), source(ai/upload),
portrait_asset(形象图 FK), triview_asset(三视图 FK),
voice_asset(声线 FK, 可空·后做), metadata, created_by
Asset.Category 枚举一次加全(逐期接线):
- model_portrait(模特形象图)· tri_view(三视图)· voice(声线占位)
- model_tryon(模特上身图)· platform_kit(平台套图)· free_create(自由创作)
- storyboard(分镜图)
- 保留:product_image / scene / video_clip / final_video / upload / uncategorized
「组」落库: 复用/扩展现有 BaseAssetGroup 或加 group_id+task 关联(期 2/3 定);上身图组/套图组/分镜组/视频组同源思路。
审核范围(不变,已拍板): 送审 = 视频趴人脸 = {模特定妆照(person), tri_view(三视图), storyboard(分镜图)};图片趴(上身图/套图/创作)不送审。review.py + adminpanel 队列过滤 person → person+tri_view+storyboard。
3. 页面 / 导航
- 新增顶级「模特库」(左菜单):官方模板 tab / 我的模特 tab / 真人上传入口。
- 图片生成页:三类入口(上身图/套图/自由创作),上身图接模特库。
- 视频项目·资产趴:"人物"→"角色",角色卡承载 A/B 两条来法。
- 深埋的 actor-library 弹窗:本轮先不动(逻辑顺),做到对应页时再收编。
★ 施工纪律(每一块/每个 Phase 都严格走这一圈,缺一不可)
这是硬流程,不是口号。任何一块没走完整圈,不算完、不 commit、不进下一块。
- 写(开发) — 实现这一块;后端先于前端;独立子项可派 sub-agent 并行(worktree 隔离防冲突)。
- 审(自审) — 回头批判性读自己刚写的 diff(或派 sub-agent 当审查者):逻辑 / 边界(空值·0·越权·并发)/ 安全(密钥不回传·权限不漏)/ 回归风险 / 有没有跑题。发现问题 → 修 → 再审,审干净才往下。
- 改(修) — 上面审出来的、下面测出来的,全修掉。
- 测(三层全绿,缺一不可):
- 后端单测:
DB_ENGINE=sqlite python manage.py test apps.<相关app>;每个新端点 ≥ 正常 + 权限拒绝 + 边界。 - 无头浏览器 e2e:Playwright 真点击走完整流程 + locator 断言 + 抓 console/pageerror 必须为 0;按需起 worker 真跑异步(出图/审核)。
- 类型/构建:
npx tsc --noEmit && npm run build全绿。
- 后端单测:
- 无头 + 截图核对 — 关键画面截图,逐张对照设计稿 / 预期,视觉达标才算过;不达标 → 回第 3 步继续迭代。
- 直到完美验收 — 三层全绿 + 截图达标 + 该块业务链路走通,才算这块完成。
- 全绿才本地 commit(消息规范);写进度;进下一块。
- 回归红线:开工前记下进场既有失败基线,只保证不新增 fail;既有链路零回归。
- 全程本地、绝不 push;不碰 master/main、不
--no-verify、不绕 hook。
— 即「写 → 审 → 改 → 测 → 无头 → 截图 → 不达标继续迭代 → 完美验收 → commit」,一圈不少。
4. 分 3 期开发(每期都走上面这一圈;不 push)
期 1 · 模特库地基
- 后端:
Model实体 + 迁移;Asset.Category枚举加全;审核过滤改 person+tri_view+storyboard;后端单测。 - 数据:把历史已成套模特(形象图+三视图)归集成 Model 实体当测试数据;删早期错图理干净。
- 前端:左菜单 +「模特库」页(官方模板标签 / 我的模特 / 真人上传)。
- 验收:模特库页能看到归好的成套模特、官方标签;无头截图 + 0 console error。
期 2 · 图片趴三类
- 模特上身图(组,引用模特库)/ 平台套图(组)/ 自由创作 —— 落库 + 图片生成页接线。
- 前端标签表全对(上身图/套图/创作各归各类)。
- 验收:三类各生成→归类正确;截图核对。
期 3 · 视频趴(角色 + 分镜组)
- "人物"→"角色"改名 + 角色卡小改(承载 A 引用库 / B 新生成自动入库)。
- 分镜图成组(每脚本一组分镜 + 一组视频素材),理顺现有链路。
- 资产库"成片"→"素材";最终成片类隐藏。
- 验收:角色两条来法走通、分镜组正确;截图 + 链路零回归。
尾 · 声线(最后)
- 模特声线生成 + 模特实体挂声线 + 参考元素加"声音"选项。
5. 待定 / 后续
- 平台套图各平台尺寸规则(逐平台加)。
- 角色卡 UI 细节(做到期 3 再逐稿对)。
- 声线打包方式(挂在模特实体下)。
- 这些页用户还要逐页再过一遍。