Files
yingqing/docs/todo/模特库与我的演员数据流说明.md
T

6.0 KiB
Raw Blame History

模特库与“我的演员”数据流说明

版本备注:本文对应 tag pre-model-actor-merge-20260708,记录该版本的当前现状,用于后续“模特与演员合并”方案讨论前留档;不是最终目标设计。

结论

/models 的模特库和“图片生成 -> 选择模特 -> 我的演员”不是完全同一张表。

  • /models 读的是顶级 Model 实体表。
  • “我的演员”读的是 Asset 表里 category=person 的人物资产。
  • 图片生成里的“演员库”弹窗会把两类数据合并展示。

一句话区分:

  • 演员 = Asset(category=person) 人物资产。
  • 模特库 = Model 顶级实体,通常由演员形象图 + 三视图收编而来。

Asset 与项目资产的关系

Asset 不是只属于视频项目的“项目资产表”,它更像团队级素材总仓。

Asset 里可以放:

  • 人物/演员图:person
  • 商品图:product_image
  • 场景图:scene
  • 模特上身图:model_tryon
  • 平台套图:platform_kit
  • 自由创作图:free_create

“添加演员”里的 AI 生成和本地上传,生成后都先落到:

  • 表:Asset
  • categoryperson

视频项目里的“项目资产”不是另一份图片数据,而是项目对 Asset 的引用关系。

  • 视频项目用 BaseAssetGroup 表示项目里的商品/人物/场景资产组。
  • BaseAssetGroup.adopted_asset 指向当前采用的 Asset
  • BaseAssetGroup.candidate_assets 指向候选版本的 Asset

所以:

  • Asset = 团队素材总仓。
  • 视频项目资产 = 项目对素材总仓的引用。
  • 演员可以先独立存在于 Asset 里,不一定属于某个视频项目。

演员的主要创建方式

当前“演员”主要有两个创建入口:

  1. “添加演员”工作台里 AI 生成 / 上传人物,保存后进入“我的演员”。
  2. 视频项目基础资产流程里生成“角色/人物”,也会生成演员资产。

这里生成的是 Asset(category=person),所以它首先是“演员”,不是顶级模特库里的 Model

三视图与模特库的关系

不是“有三视图才变成演员”,而是:

  • 人物立绘生成后,本来就是演员。
  • 演员生成三视图后,会被自动收编成模特库实体。
  • 收编后,原来的演员资产仍然存在,同时多一条 Model 记录。

所以可以理解为:

  • 无三视图:只在“我的演员”里出现。
  • 有三视图:仍是演员,同时进入顶级“模特库”。

目前三视图能力主要围绕“基础资产/角色人物”流程,演员库弹窗里也有生成三视图入口,本质也是给已有人物立绘补三视图。

演员删除与影响

“我的演员”没有独立表,删除时删的是 Asset(category=person)

当前删除是软删除:

  • 后端只是把 Asset.is_deleted 置为 true
  • 数据库行和文件不会立刻物理删除。
  • 软删后,“我的演员”和资产库正常列表不再显示。
  • 软删资产会进入垃圾桶,可恢复。

对视频项目的影响:

  • 视频项目基础资产组里保存的是对这个 Asset 的引用。
  • 软删后项目引用不一定马上断图,因为项目详情可能仍能通过引用拿到文件。
  • 但语义上它已经是“被删除资产仍被项目引用”,属于潜在不一致状态。

对模特库的影响:

  • 删除“我的演员”不会自动删除 Model 表里的模特记录。
  • 如果该演员已经生成三视图并收编成模特库,Model 记录仍然存在。
  • 但如果 Model.portrait_asset 指向的正是这个被软删演员,模特库底层会引用一个已软删资产。
  • 因此模特可能仍可见/可访问,但数据关系已经不干净。

待明确的产品规则:

  • 删除演员前,是否要检测它是否被视频项目或模特库引用。
  • 如果已被引用,是否阻止删除,或提示“删除会影响项目/模特库复用关系”。
  • 如果删除的是已收编模特的演员,是否同步软删对应 Model,还是只从“我的演员”隐藏。

当前展示规则

1. 顶级模特库

入口:/models

数据来源:

  • API/api/models/
  • 表:assets.Model
  • 含义:正式入库的团队级模特实体。
  • 一条模特通常关联:
    • portrait_asset:形象图资产
    • triview_asset:三视图资产
    • is_official:是否官方模板
    • sourceAI 生成 / 真人上传

2. 图片生成里的演员库

入口:/asset-factory -> 模特上身图 -> 选择模特

弹窗内有两个 tab

  • “模特库”:来自 /api/models/,把 Model 映射成可选演员卡。
  • “我的演员”:来自 /api/assets/?category=person,展示已入库的普通人物资产。

前端分组核心规则:

  • metadata.kind === "model":归到“模特库”。
  • 其他 category=person 且有图的资产:归到“我的演员”。

为什么会出现在“我的演员”

添加演员工作台生成或上传人物时,后端先创建的是:

  • 表:Asset
  • categoryperson
  • 默认不是 Model 实体

点“保存人物”后,只是把这个人物资产标记为进入资产库,所以它会显示在“我的演员”。

只有以下动作才会让它进入顶级模特库:

  • /models 页面真人上传
  • 图片创作结果点“加入模特库”
  • 人物生成三视图后自动收编为 Model

当前容易误解的点

“我的演员”里可能出现名字类似 AI 生成 · 模特上身图 · 1 的卡片,但它未必是正式模特库数据。

原因是后端 mode=model 有两种语义:

  • 有商品:生成“模特上身图”,归类为 model_tryon
  • 无商品:生成“演员/人物”,归类为 person

但部分命名仍沿用了“模特上身图”的文案,容易让人误以为它已经进了顶级模特库。

简单判断

  • 想看正式模特库:看 /models,对应 Model 表。
  • 想看保存过的临时/项目人物:看“我的演员”,对应 Asset(category=person)
  • 两边会互相引用,但不是同一层数据。