import React, { useCallback } from 'react' import ReactFlow, { Background, Controls, MiniMap, useNodesState, useEdgesState, addEdge, } from 'react-flow-renderer' const nodeTypes = { checkpoint: ({ data }) => (
{data.label}
{data.ckpt_name}
), textEncode: ({ data }) => (
{data.label}
{data.text}
), sampler: ({ data }) => (
{data.label}
Steps: {data.steps}, CFG: {data.cfg}
), vae: ({ data }) => (
{data.label}
), save: ({ data }) => (
{data.label}
), } export default function NodeEditor({ workflow }) { const initialNodes = workflow.nodes.map(node => { const baseNode = { id: node.id.toString(), position: { x: node.pos[0], y: node.pos[1] }, data: { ...node.inputs, label: node.type }, } switch(node.type) { case 'CheckpointLoaderSimple': return { ...baseNode, type: 'checkpoint' } case 'CLIPTextEncode': return { ...baseNode, type: 'textEncode' } case 'KSampler': return { ...baseNode, type: 'sampler' } case 'VAEDecode': return { ...baseNode, type: 'vae' } case 'SaveImage': return { ...baseNode, type: 'save' } default: return baseNode } }) const initialEdges = workflow.links.map(link => ({ id: `e${link[0]}-${link[1]}-${link[2]}-${link[3]}`, source: link[0].toString(), sourceHandle: link[1].toString(), target: link[2].toString(), targetHandle: link[3].toString(), })) const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes) const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges) const onConnect = useCallback( params => setEdges(eds => addEdge(params, eds)), [setEdges] ) return (
) }