hasanalrobasi commited on
Commit
dfea997
·
verified ·
1 Parent(s): 93d2a22

Upload components/NodeEditor.jsx with huggingface_hub

Browse files
Files changed (1) hide show
  1. components/NodeEditor.jsx +101 -0
components/NodeEditor.jsx ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useCallback } from 'react'
2
+ import ReactFlow, {
3
+ Background,
4
+ Controls,
5
+ MiniMap,
6
+ useNodesState,
7
+ useEdgesState,
8
+ addEdge,
9
+ } from 'react-flow-renderer'
10
+
11
+ const nodeTypes = {
12
+ checkpoint: ({ data }) => (
13
+ <div className="p-3 rounded-lg bg-dark-800 border border-primary-500 text-white">
14
+ <div className="font-bold text-primary-500">{data.label}</div>
15
+ <div className="text-sm mt-1">{data.ckpt_name}</div>
16
+ </div>
17
+ ),
18
+ textEncode: ({ data }) => (
19
+ <div className="p-3 rounded-lg bg-dark-800 border border-green-500 text-white max-w-xs">
20
+ <div className="font-bold text-green-500">{data.label}</div>
21
+ <div className="text-sm mt-1 truncate">{data.text}</div>
22
+ </div>
23
+ ),
24
+ sampler: ({ data }) => (
25
+ <div className="p-3 rounded-lg bg-dark-800 border border-purple-500 text-white">
26
+ <div className="font-bold text-purple-500">{data.label}</div>
27
+ <div className="text-xs mt-1">
28
+ Steps: {data.steps}, CFG: {data.cfg}
29
+ </div>
30
+ </div>
31
+ ),
32
+ vae: ({ data }) => (
33
+ <div className="p-3 rounded-lg bg-dark-800 border border-yellow-500 text-white">
34
+ <div className="font-bold text-yellow-500">{data.label}</div>
35
+ </div>
36
+ ),
37
+ save: ({ data }) => (
38
+ <div className="p-3 rounded-lg bg-dark-800 border border-red-500 text-white">
39
+ <div className="font-bold text-red-500">{data.label}</div>
40
+ </div>
41
+ ),
42
+ }
43
+
44
+ export default function NodeEditor({ workflow }) {
45
+ const initialNodes = workflow.nodes.map(node => {
46
+ const baseNode = {
47
+ id: node.id.toString(),
48
+ position: { x: node.pos[0], y: node.pos[1] },
49
+ data: { ...node.inputs, label: node.type },
50
+ }
51
+
52
+ switch(node.type) {
53
+ case 'CheckpointLoaderSimple':
54
+ return { ...baseNode, type: 'checkpoint' }
55
+ case 'CLIPTextEncode':
56
+ return { ...baseNode, type: 'textEncode' }
57
+ case 'KSampler':
58
+ return { ...baseNode, type: 'sampler' }
59
+ case 'VAEDecode':
60
+ return { ...baseNode, type: 'vae' }
61
+ case 'SaveImage':
62
+ return { ...baseNode, type: 'save' }
63
+ default:
64
+ return baseNode
65
+ }
66
+ })
67
+
68
+ const initialEdges = workflow.links.map(link => ({
69
+ id: `e${link[0]}-${link[1]}-${link[2]}-${link[3]}`,
70
+ source: link[0].toString(),
71
+ sourceHandle: link[1].toString(),
72
+ target: link[2].toString(),
73
+ targetHandle: link[3].toString(),
74
+ }))
75
+
76
+ const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes)
77
+ const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges)
78
+
79
+ const onConnect = useCallback(
80
+ params => setEdges(eds => addEdge(params, eds)),
81
+ [setEdges]
82
+ )
83
+
84
+ return (
85
+ <div className="h-[calc(100vh-64px)] bg-dark-900">
86
+ <ReactFlow
87
+ nodes={nodes}
88
+ edges={edges}
89
+ onNodesChange={onNodesChange}
90
+ onEdgesChange={onEdgesChange}
91
+ onConnect={onConnect}
92
+ nodeTypes={nodeTypes}
93
+ fitView
94
+ >
95
+ <Background />
96
+ <Controls />
97
+ <MiniMap />
98
+ </ReactFlow>
99
+ </div>
100
+ )
101
+ }