From 351f41fd12809de8e38634b6cf5ffc0c8ace3b6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 4 Aug 2026 11:42:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E6=99=AE=E9=80=9A=E5=AA=92?= =?UTF-8?q?=E4=BD=93=E7=94=BB=E5=B8=83=E6=97=B6=E9=95=BF=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 非角色动作图层继续从画布布局恢复音频和视频运行时秒数。 账号素材转图层时保留前端临时媒体时长,不写入角色动作正式字段。 补充音频图层时长恢复回归测试。 --- src/components/image-editor/ImageCanvasEditorModel.test.ts | 2 ++ src/components/image-editor/ImageCanvasEditorModel.ts | 4 ++++ src/components/image-editor/ImageCanvasEditorTypes.ts | 1 + 3 files changed, 7 insertions(+) diff --git a/src/components/image-editor/ImageCanvasEditorModel.test.ts b/src/components/image-editor/ImageCanvasEditorModel.test.ts index 3e0eb519f..47941dd7e 100644 --- a/src/components/image-editor/ImageCanvasEditorModel.test.ts +++ b/src/components/image-editor/ImageCanvasEditorModel.test.ts @@ -589,6 +589,7 @@ describe('ImageCanvasEditorModel', () => { sourceType: 'generated', mediaType: 'audio', assetKind: 'sound-effect', + durationSeconds: 3.5, }, new Map([ [ @@ -605,6 +606,7 @@ describe('ImageCanvasEditorModel', () => { src: '/generated-character-drafts/editor-audios/sfx.mp3', mediaType: 'audio', assetKind: 'sound-effect', + durationSeconds: 3.5, }); }); diff --git a/src/components/image-editor/ImageCanvasEditorModel.ts b/src/components/image-editor/ImageCanvasEditorModel.ts index 91595b6de..ee3ab0b83 100644 --- a/src/components/image-editor/ImageCanvasEditorModel.ts +++ b/src/components/image-editor/ImageCanvasEditorModel.ts @@ -186,6 +186,7 @@ export function createLayerFromAsset( objectKey: asset.objectKey, assetObjectId: asset.assetObjectId, sourceResourceId: asset.sourceResourceId, + durationSeconds: asset.durationSeconds, sourceAssetId: asset.id, assetKind, generationInputs: asset.generationInputs, @@ -781,6 +782,9 @@ export function hydrateLayer( ? stringOrNull(resource?.assetObjectId) : stringOrNull(snapshot.assetObjectId) ?? stringOrNull(resource?.assetObjectId), + durationSeconds: isCharacterAnimation + ? undefined + : audioDurationOrNull(snapshot.durationSeconds), imageSequenceDurationMs: isCharacterAnimation ? audioDurationOrNull(resource?.imageSequenceDurationMs) : undefined, diff --git a/src/components/image-editor/ImageCanvasEditorTypes.ts b/src/components/image-editor/ImageCanvasEditorTypes.ts index ff6795de0..a426d7afe 100644 --- a/src/components/image-editor/ImageCanvasEditorTypes.ts +++ b/src/components/image-editor/ImageCanvasEditorTypes.ts @@ -60,6 +60,7 @@ export type EditorAsset = { showcaseSubmitError?: string | null; assetKind?: CanvasAssetKind | null; generationInputs?: CanvasGenerationInputs | null; + durationSeconds?: number; imageSequenceFrames?: EditorImageSequenceFrameResult[]; imageSequenceDurationMs?: number; uploadStatus?: 'uploading' | 'failed';