模特库标签分页与全能创作收口:藏长视频、选择器分页
角色库导入打标签并支持筛选;模特库与全能创作角色/商品选择改为每页 20 条分页。临时限制成片 ≤60 秒,过滤对话里的超长时长选项,并收拢本地全能创作与后台用户相关修复。
This commit is contained in:
@@ -337,6 +337,25 @@ def _character_triview_asset(team, portrait_id):
|
||||
)
|
||||
|
||||
|
||||
def _newest_asset(*assets):
|
||||
"""多张可用图里取最新一张。已删/空值直接跳过。"""
|
||||
living = [
|
||||
asset for asset in assets
|
||||
if asset is not None and not getattr(asset, "is_deleted", False)
|
||||
]
|
||||
if not living:
|
||||
return None
|
||||
return max(living, key=lambda asset: (asset.created_at, str(asset.id)))
|
||||
|
||||
|
||||
def _single_entity_asset(cover, *triviews):
|
||||
"""一个角色/商品只喂一张参考图:有三视图用最新三视图,没有才用封面/立绘。
|
||||
|
||||
封面和三视图衣服经常不一致;两张一起送,出片模型会当成多出来的角色或 SKU。
|
||||
"""
|
||||
return _newest_asset(*triviews) or cover
|
||||
|
||||
|
||||
def _append_ref(resolved: ResolvedRefs, asset, type_: str, label: str) -> bool:
|
||||
entry = _asset_reference(asset, type_, label)
|
||||
if not entry:
|
||||
@@ -386,12 +405,17 @@ def resolve_refs(team, refs: list[dict]) -> ResolvedRefs:
|
||||
resolved.missing.append(ref)
|
||||
continue
|
||||
resolved.facts.append(product_facts_text(product))
|
||||
chosen = _single_entity_asset(
|
||||
product.cover_asset,
|
||||
_product_triview_asset(product),
|
||||
)
|
||||
if chosen is not None and _append_ref(resolved, chosen, "product", product.title):
|
||||
continue
|
||||
entry = _product_reference(product)
|
||||
if entry:
|
||||
resolved.references.append(entry)
|
||||
triview = _product_triview_asset(product)
|
||||
if triview is not None:
|
||||
_append_ref(resolved, triview, "product", f"{product.title}三视图")
|
||||
elif chosen is None:
|
||||
resolved.missing.append(ref)
|
||||
continue
|
||||
if type_ == "model":
|
||||
model = Model.objects.filter(
|
||||
@@ -413,13 +437,14 @@ def resolve_refs(team, refs: list[dict]) -> ResolvedRefs:
|
||||
person_lines.extend(meta_lines)
|
||||
if desc or meta_lines:
|
||||
resolved.facts.append("\n".join(person_lines))
|
||||
# 形象图和三视图都带上(有就带,没有不加、不报错)。三视图锁脸更稳。
|
||||
added = False
|
||||
if _append_ref(resolved, model.portrait_asset, "model", model.name):
|
||||
added = True
|
||||
if _append_ref(resolved, model.triview_asset, "model", f"{model.name}三视图"):
|
||||
added = True
|
||||
if not added:
|
||||
# 一人一张图:有三视图只用最新三视图。形象图和三视图衣服经常不一致,
|
||||
# 两张一起送会被当成多出来的角色。
|
||||
chosen = _single_entity_asset(
|
||||
model.portrait_asset,
|
||||
model.triview_asset,
|
||||
_character_triview_asset(team, getattr(model.portrait_asset, "id", None)),
|
||||
)
|
||||
if not _append_ref(resolved, chosen, "model", model.name):
|
||||
resolved.missing.append(ref)
|
||||
continue
|
||||
asset = Asset.objects.filter(
|
||||
@@ -435,15 +460,14 @@ def resolve_refs(team, refs: list[dict]) -> ResolvedRefs:
|
||||
person_lines.extend(meta_lines)
|
||||
if desc or meta_lines:
|
||||
resolved.facts.append("\n".join(person_lines))
|
||||
added = _append_ref(resolved, asset, type_, asset.name)
|
||||
# 角色/模特立绘若有配对三视图,一并带给出片;没有就跳过,不要当成引用失败。
|
||||
if type_ in {"character", "model", "asset"}:
|
||||
portrait_id = asset.id
|
||||
# 用户 @ 的就是三视图本身时,不再反查。
|
||||
if asset.category != Asset.Category.TRI_VIEW:
|
||||
paired = _character_triview_asset(team, portrait_id)
|
||||
if paired is not None:
|
||||
_append_ref(resolved, paired, type_, f"{asset.name}三视图")
|
||||
if type_ in {"character", "model", "asset"} and asset.category != Asset.Category.TRI_VIEW:
|
||||
chosen = _single_entity_asset(
|
||||
asset,
|
||||
_character_triview_asset(team, asset.id),
|
||||
)
|
||||
else:
|
||||
chosen = asset
|
||||
added = _append_ref(resolved, chosen, type_, asset.name)
|
||||
if not added:
|
||||
resolved.missing.append(ref)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user