feat: 角色重跑参考当前立绘+提示词,保持人物一致 (row42)

原「重跑」立绘是纯文生图,每次重抽成另一个随机人。改为:角色已有当前立绘时,
重跑传该立绘作参考图 → 后端走 image_edit(参考立绘+提示词),保持同一人物相貌/发型/身份一致。

- generate_base_asset 新增 reference_asset_id;person 有参考图则 image_edit + build_person_portrait_prompt_refs
- run_base_asset_task image_edit size 按 kind 区分(person 立绘竖 1024x1536,商品三视图横)
- 全链路透传 reference_asset_id:pipeline.regenPortrait(传 viewPortraitAsset)→ genBaseAsset →
  onGenerateBaseAsset → api.generateBaseAsset → generate-base-asset 端点
场景重跑不受影响(仍文生图);需部署生效(后端)。

构建: tsc=0/build=0; py_compile OK; projects+assets 测试无新增回归(基线 4 fail 2 err)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
zyc
2026-06-30 13:20:47 +08:00
co-authored by Claude Opus 4.8
parent 535e557728
commit 4d2b9343b3
5 changed files with 44 additions and 15 deletions
+3 -2
View File
@@ -965,9 +965,10 @@ export function App() {
}
onAdoptVideoVersion={(segmentId, versionId) => action(() => api.adoptVideoVersion(pipelineProject.id, { video_segment_id: segmentId, version_id: versionId }), "已采用该版本")}
onGenerateVoiceover={(payload) => action(() => api.generateVoiceover(pipelineProject.id, payload), "配音已生成")}
onGenerateBaseAsset={async (kind, prompt, label) => {
onGenerateBaseAsset={async (kind, prompt, label, referenceAssetId) => {
// 异步:提交→轮询出图→刷新;返回新资产 id 供「立绘→三视图」链式生成
const assetId = await submitAndPollAsset(() => api.generateBaseAsset(pipelineProject.id, { kind, prompt, label }), "基础资产已生成");
// referenceAssetId:角色重跑时传当前立绘 → 后端走 image_edit 参考它,保持人物一致
const assetId = await submitAndPollAsset(() => api.generateBaseAsset(pipelineProject.id, { kind, prompt, label, reference_asset_id: referenceAssetId }), "基础资产已生成");
return assetId ? { adopted_asset: assetId } : null;
}}
onGenerateStoryboard={(prompt) =>