6.0 KiB
6.0 KiB
模特库与“我的演员”数据流说明
版本备注:本文对应 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 - category:
person
视频项目里的“项目资产”不是另一份图片数据,而是项目对 Asset 的引用关系。
- 视频项目用
BaseAssetGroup表示项目里的商品/人物/场景资产组。 BaseAssetGroup.adopted_asset指向当前采用的Asset。BaseAssetGroup.candidate_assets指向候选版本的Asset。
所以:
Asset= 团队素材总仓。- 视频项目资产 = 项目对素材总仓的引用。
- 演员可以先独立存在于
Asset里,不一定属于某个视频项目。
演员的主要创建方式
当前“演员”主要有两个创建入口:
- “添加演员”工作台里 AI 生成 / 上传人物,保存后进入“我的演员”。
- 视频项目基础资产流程里生成“角色/人物”,也会生成演员资产。
这里生成的是 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:是否官方模板source:AI 生成 / 真人上传
2. 图片生成里的演员库
入口:/asset-factory -> 模特上身图 -> 选择模特
弹窗内有两个 tab:
- “模特库”:来自
/api/models/,把Model映射成可选演员卡。 - “我的演员”:来自
/api/assets/?category=person,展示已入库的普通人物资产。
前端分组核心规则:
metadata.kind === "model":归到“模特库”。- 其他
category=person且有图的资产:归到“我的演员”。
为什么会出现在“我的演员”
添加演员工作台生成或上传人物时,后端先创建的是:
- 表:
Asset - category:
person - 默认不是
Model实体
点“保存人物”后,只是把这个人物资产标记为进入资产库,所以它会显示在“我的演员”。
只有以下动作才会让它进入顶级模特库:
/models页面真人上传- 图片创作结果点“加入模特库”
- 人物生成三视图后自动收编为
Model
当前容易误解的点
“我的演员”里可能出现名字类似 AI 生成 · 模特上身图 · 1 的卡片,但它未必是正式模特库数据。
原因是后端 mode=model 有两种语义:
- 有商品:生成“模特上身图”,归类为
model_tryon - 无商品:生成“演员/人物”,归类为
person
但部分命名仍沿用了“模特上身图”的文案,容易让人误以为它已经进了顶级模特库。
简单判断
- 想看正式模特库:看
/models,对应Model表。 - 想看保存过的临时/项目人物:看“我的演员”,对应
Asset(category=person)。 - 两边会互相引用,但不是同一层数据。