Files
yingqing/docs/todo/模特库与资产模型-设计稿-2026-06-20.md
seaislee1209andClaude Opus 4.8 44e90233ff feat(models): 期1 模特库地基 — Model 顶级实体 + 模特库页 + 审核范围扩展
后端:
- 新增 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>
2026-06-20 22:53:46 +08:00

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、不进下一块。

  1. 写(开发) — 实现这一块;后端先于前端;独立子项可派 sub-agent 并行(worktree 隔离防冲突)。
  2. 审(自审) — 回头批判性读自己刚写的 diff(或派 sub-agent 当审查者):逻辑 / 边界(空值·0·越权·并发)/ 安全(密钥不回传·权限不漏)/ 回归风险 / 有没有跑题。发现问题 → 修 → 再审,审干净才往下
  3. 改(修) — 上面审出来的、下面测出来的,全修掉。
  4. 测(三层全绿,缺一不可):
    • 后端单测:DB_ENGINE=sqlite python manage.py test apps.<相关app>;每个新端点 ≥ 正常 + 权限拒绝 + 边界。
    • 无头浏览器 e2e:Playwright 真点击走完整流程 + locator 断言 + 抓 console/pageerror 必须为 0;按需起 worker 真跑异步(出图/审核)。
    • 类型/构建:npx tsc --noEmit && npm run build 全绿。
  5. 无头 + 截图核对 — 关键画面截图,逐张对照设计稿 / 预期,视觉达标才算过;不达标 → 回第 3 步继续迭代。
  6. 直到完美验收 — 三层全绿 + 截图达标 + 该块业务链路走通,才算这块完成。
  7. 全绿才本地 commit(消息规范);写进度;进下一块
  8. 回归红线:开工前记下进场既有失败基线,只保证不新增 fail;既有链路零回归。
  9. 全程本地、绝不 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 再逐稿对)。
  • 声线打包方式(挂在模特实体下)。
  • 这些页用户还要逐页再过一遍。