diff --git a/web/src/pages/canvas/canvas-generation-executor-types.ts b/web/src/pages/canvas/canvas-generation-executor-types.ts index a70d31b62..4f077a464 100644 --- a/web/src/pages/canvas/canvas-generation-executor-types.ts +++ b/web/src/pages/canvas/canvas-generation-executor-types.ts @@ -22,6 +22,7 @@ export type CanvasGenerationExecution = CanvasGenerationExecutorDependencies & { nodeId: string; sourceNode: CanvasNodeData | undefined; canvasNodes: CanvasNodeData[]; + canvasConnections: CanvasConnection[]; prompt: string; effectivePrompt: string; generationConfig: AiConfig; diff --git a/web/src/pages/canvas/canvas-media-generation-executors.ts b/web/src/pages/canvas/canvas-media-generation-executors.ts index c39bcad36..1ebd73a33 100644 --- a/web/src/pages/canvas/canvas-media-generation-executors.ts +++ b/web/src/pages/canvas/canvas-media-generation-executors.ts @@ -22,6 +22,7 @@ export async function executeVideoGeneration({ generationContext, controller, projectId, + canvasConnections, setNodes, setConnections, startGenerationRequest, @@ -73,7 +74,13 @@ export async function executeVideoGeneration({ { ...videoNode, metadata: { ...videoNode.metadata, versionOfNodeId: rootId, versionLabel: nextLabel, versionPrimary: true } }, ]; }); - if (!isEmptyVideoNode) setConnections((current) => [...current, { id: nanoid(), fromNodeId: nodeId, toNodeId: videoId }]); + // 重新生成已有视频时,新节点继承源视频的上游连接,与源视频保持并行关系,而不是作为其下游子节点。 + if (!isEmptyVideoNode) { + setConnections((current) => { + if (!isExistingVideoNode) return [...current, { id: nanoid(), fromNodeId: nodeId, toNodeId: videoId }]; + return [...current, ...canvasConnections.filter((connection) => connection.toNodeId === nodeId).map((connection) => ({ ...connection, id: nanoid(), toNodeId: videoId }))]; + }); + } startGenerationRequest(videoId, nodeId, nodeId, controller); try { diff --git a/web/src/pages/canvas/use-canvas-generation-executor.ts b/web/src/pages/canvas/use-canvas-generation-executor.ts index 3f2381ad1..733910a63 100644 --- a/web/src/pages/canvas/use-canvas-generation-executor.ts +++ b/web/src/pages/canvas/use-canvas-generation-executor.ts @@ -183,6 +183,7 @@ export function useCanvasGenerationExecutor({ nodeId, sourceNode, canvasNodes: nodesRef.current, + canvasConnections: connectionsRef.current, prompt, effectivePrompt, generationConfig,