优化画布任务计时与去背景占位

移除画布任务列表的百分比展示

生成中任务显示阶段和已用时,排队任务不计时

去除背景在项目画布中创建生成占位并通过后端快照完成

补充客户端、工作流和后端契约测试

同步图片画布技术文档和项目记忆
This commit is contained in:
2026-06-30 19:24:08 +08:00
parent cf585b6316
commit 3530e9251e
9 changed files with 239 additions and 27 deletions
@@ -22,6 +22,7 @@ import {
loadEditorAssetLibrary,
loadEditorProject,
loadOrCreateRecentEditorProject,
removeEditorImageBackground,
renameEditorProject,
saveEditorProjectLayout,
updateEditorAsset,
@@ -1389,4 +1390,66 @@ describe('editorProjectClient', () => {
}),
);
});
it('passes canvas completion context to background removal', async () => {
requestJsonMock.mockResolvedValueOnce({
imageSrc: 'data:image/png;base64,cutout',
width: 512,
height: 512,
objectKey: 'generated-character-drafts/editor-cutouts/cutout.png',
assetObjectId: 'asset-object-cutout',
taskId: 'background-removal-1',
elapsedMs: 1200,
provider: 'BiRefNet',
project: null,
});
await removeEditorImageBackground({
sourceImageSrc: 'data:image/png;base64,source',
projectId: 'editor-project-1',
targetLayerId: 'layer-source',
canvasCompletion: {
dialogId: 'generation-dialog-1',
title: '源图 去背景',
placeholder: {
x: 120,
y: 140,
width: 320,
height: 240,
originalWidth: 320,
originalHeight: 240,
},
},
});
expect(requestJsonMock).toHaveBeenCalledWith(
'/api/editor/images/background-removals',
expect.objectContaining({
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sourceImageSrc: 'data:image/png;base64,source',
projectId: 'editor-project-1',
targetLayerId: 'layer-source',
canvasCompletion: {
dialogId: 'generation-dialog-1',
title: '源图 去背景',
placeholder: {
x: 120,
y: 140,
width: 320,
height: 240,
originalWidth: 320,
originalHeight: 240,
},
},
}),
}),
'去除背景失败',
expect.objectContaining({
timeoutMs: 1_200_000,
retry: editorRetryOptionsExpectation,
}),
);
});
});
@@ -209,6 +209,7 @@ export type EditorBackgroundRemovalInput = {
assetLabel?: string | null;
sourceResourceId?: string | null;
taskId?: string | null;
canvasCompletion?: EditorCanvasGenerationCompletionInput | null;
};
export type EditorImageGenerationResult = {
@@ -914,6 +915,9 @@ export async function removeEditorImageBackground(
? { sourceResourceId: input.sourceResourceId }
: {}),
...(input.taskId ? { taskId: input.taskId } : {}),
...(input.canvasCompletion
? { canvasCompletion: input.canvasCompletion }
: {}),
}),
'去除背景失败',
{