修复序列帧去背景队列与幂等发布

序列帧去背景改用本地绿幕算法并在 durable 父任务内并行处理。

将去背景操作加入生成结果白名单,并按 operation_id 隔离帧对象路径。

去背景结果发布为新的序列资源、素材和画布图层,同时保留原始序列。

同步前端生成占位、相关测试及队列与资源契约文档。
This commit is contained in:
2026-08-15 11:59:50 +08:00
parent 05f0e2db06
commit 13afdd7a3b
11 changed files with 404 additions and 125 deletions
@@ -14,6 +14,7 @@ import {
closeGenerateComposerDialog,
createAudioRedrawGenerationDialogDraft,
createBackgroundMusicGenerationDialogDraft,
createCharacterAnimationBackgroundRemovalDialogDraft,
createCharacterAnimationGenerationDialogDraft,
createCharacterAnimationPanelDraft,
createCharacterGenerationDialogDraft,
@@ -559,6 +560,33 @@ describe('ImageCanvasGenerationDialogModel', () => {
});
});
it('creates a separate character animation placement for background removal', () => {
expect(
createCharacterAnimationBackgroundRemovalDialogDraft({
sourceLayer: createLayer({
id: 'layer-animation',
assetKind: 'character-animation',
}),
assetLabel: '源动画 去背景',
}),
).toMatchObject({
mode: 'character-animation',
prompt: '去除背景',
assetLabel: '源动画 去背景',
status: 'generating',
composerOpen: false,
sourceLayerId: 'layer-animation',
placeholder: {
x: 472,
y: 140,
width: 320,
height: 240,
originalWidth: 1024,
originalHeight: 768,
},
});
});
it('restores remodel prompts from user-visible generation input snapshots only', () => {
const cases: Array<{
fields: NonNullable<CanvasLayer['generationInputs']>['fields'];