Browse Source

feat: register generate3d node type across codebase

Register in execution index, workflowStore (executeWorkflow,
regenerateNode, executeSelectedNodes), nodes index, WorkflowCanvas
(nodeTypes, getNodeHandles, minimap color, findCompatibleHandle).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
handoff-20260429-1057
shrimbly 5 months ago
parent
commit
fea2b6d3d0
  1. 9
      src/components/WorkflowCanvas.tsx
  2. 1
      src/components/nodes/index.ts
  3. 3
      src/store/execution/index.ts
  4. 9
      src/store/workflowStore.ts

9
src/components/WorkflowCanvas.tsx

@ -28,6 +28,7 @@ import {
PromptConstructorNode,
GenerateImageNode,
GenerateVideoNode,
Generate3DNode,
LLMGenerateNode,
SplitGridNode,
OutputNode,
@ -63,6 +64,7 @@ const nodeTypes: NodeTypes = {
promptConstructor: PromptConstructorNode,
nanoBanana: GenerateImageNode,
generateVideo: GenerateVideoNode,
generate3d: Generate3DNode,
llmGenerate: LLMGenerateNode,
splitGrid: SplitGridNode,
output: OutputNode,
@ -118,6 +120,8 @@ const getNodeHandles = (nodeType: string): { inputs: string[]; outputs: string[]
return { inputs: ["image", "text"], outputs: ["image"] };
case "generateVideo":
return { inputs: ["image", "text"], outputs: ["video"] };
case "generate3d":
return { inputs: ["image", "text"], outputs: ["3d"] };
case "llmGenerate":
return { inputs: ["text", "image"], outputs: ["text"] };
case "splitGrid":
@ -488,8 +492,9 @@ export function WorkflowCanvas() {
return null;
}
}
// Output handle - check for video or image type
// Output handle - check for video, 3d, or image type
if (handleType === "video") return "video";
if (handleType === "3d") return "3d";
return handleType === "image" ? "image" : null;
}
@ -1663,6 +1668,8 @@ export function WorkflowCanvas() {
return "#22c55e";
case "generateVideo":
return "#9333ea";
case "generate3d":
return "#fb923c";
case "llmGenerate":
return "#06b6d4";
case "splitGrid":

1
src/components/nodes/index.ts

@ -5,6 +5,7 @@ export { PromptNode } from "./PromptNode";
export { PromptConstructorNode } from "./PromptConstructorNode";
export { GenerateImageNode, NanoBananaNode } from "./GenerateImageNode";
export { GenerateVideoNode } from "./GenerateVideoNode";
export { Generate3DNode } from "./Generate3DNode";
export { LLMGenerateNode } from "./LLMGenerateNode";
export { SplitGridNode } from "./SplitGridNode";
export { OutputNode } from "./OutputNode";

3
src/store/execution/index.ts

@ -24,6 +24,9 @@ export type { NanoBananaOptions } from "./nanoBananaExecutor";
export { executeGenerateVideo } from "./generateVideoExecutor";
export type { GenerateVideoOptions } from "./generateVideoExecutor";
export { executeGenerate3D } from "./generate3dExecutor";
export type { Generate3DOptions } from "./generate3dExecutor";
export { executeLlmGenerate } from "./llmGenerateExecutor";
export type { LlmGenerateOptions } from "./llmGenerateExecutor";

9
src/store/workflowStore.ts

@ -67,6 +67,7 @@ import {
executeImageCompare,
executeNanoBanana,
executeGenerateVideo,
executeGenerate3D,
executeLlmGenerate,
executeSplitGrid,
executeVideoStitch,
@ -889,6 +890,9 @@ export const useWorkflowStore = create<WorkflowStore>((set, get) => ({
case "generateVideo":
await executeGenerateVideo(executionCtx);
break;
case "generate3d":
await executeGenerate3D(executionCtx);
break;
case "llmGenerate":
await executeLlmGenerate(executionCtx);
break;
@ -1042,6 +1046,8 @@ export const useWorkflowStore = create<WorkflowStore>((set, get) => ({
await executeLlmGenerate(executionCtx, regenOptions);
} else if (node.type === "generateVideo") {
await executeGenerateVideo(executionCtx, regenOptions);
} else if (node.type === "generate3d") {
await executeGenerate3D(executionCtx, regenOptions);
} else if (node.type === "splitGrid") {
await executeSplitGrid(executionCtx);
} else if (node.type === "videoStitch") {
@ -1171,6 +1177,9 @@ export const useWorkflowStore = create<WorkflowStore>((set, get) => ({
case "generateVideo":
await executeGenerateVideo(executionCtx, regenOptions);
break;
case "generate3d":
await executeGenerate3D(executionCtx, regenOptions);
break;
case "llmGenerate":
await executeLlmGenerate(executionCtx, regenOptions);
break;

Loading…
Cancel
Save