diff --git a/src/components/WorkflowCanvas.tsx b/src/components/WorkflowCanvas.tsx index 137bd3aa..94b479f3 100644 --- a/src/components/WorkflowCanvas.tsx +++ b/src/components/WorkflowCanvas.tsx @@ -1284,9 +1284,31 @@ export function WorkflowCanvas() { } } } else if (sourceNode.type === "nanoBanana") { - updateNodeData(sourceNode.id, { lighting: settings } as Partial); - if (!isRunning) { - targetNodeId = sourceNode.id; + // nanoBanana 打光:查找下游是否已有 nanoBanana 节点,没有则自动创建 + const downstreamImageNode = edges + .filter((edge) => edge.source === sourceNode.id && !edge.data?.isLoop) + .map((edge) => nodes.find((node) => node.id === edge.target)) + .find((node) => node?.type === "nanoBanana"); + + if (downstreamImageNode) { + updateNodeData(downstreamImageNode.id, { lighting: settings } as Partial); + if (!isRunning) { + targetNodeId = downstreamImageNode.id; + } + } else if (!isRunning) { + // 没有下游 nanoBanana,自动创建一个并连接 + const sourceW = sourceNode.measured?.width ?? 300; + const genX = sourceNode.position.x + sourceW + 160; + const genY = sourceNode.position.y; + const genNodeId = addNode("nanoBanana", { x: genX, y: genY }); + updateNodeData(genNodeId, { lighting: settings } as Partial); + onConnect({ + source: sourceNode.id, + sourceHandle: "image", + target: genNodeId, + targetHandle: "image", + }); + targetNodeId = genNodeId; } } diff --git a/src/store/execution/nanoBananaExecutor.ts b/src/store/execution/nanoBananaExecutor.ts index 130fa0f4..a9f2d26d 100644 --- a/src/store/execution/nanoBananaExecutor.ts +++ b/src/store/execution/nanoBananaExecutor.ts @@ -39,9 +39,18 @@ function findUpstreamLightingSettings( if (edge.target !== nodeId || edge.data?.isLoop) continue; const sourceNode = nodes.find((candidate) => candidate.id === edge.source); - if (sourceNode?.type !== "imageInput") continue; + if (!sourceNode) continue; + + // 从 imageInput 或 nanoBanana 节点读取打光设置 + let lighting: LightingSettings | undefined; + if (sourceNode.type === "imageInput") { + lighting = (sourceNode.data as ImageInputNodeData).lighting; + } else if (sourceNode.type === "nanoBanana") { + lighting = (sourceNode.data as NanoBananaNodeData).lighting; + } else { + continue; + } - const lighting = (sourceNode.data as ImageInputNodeData).lighting; if (lighting?.enabled) { return lighting; }