From 24eb234bcb810694534dd48ea46d94edb98c8ac4 Mon Sep 17 00:00:00 2001 From: Gunbir Singh Date: Sun, 8 Feb 2026 12:14:02 -0700 Subject: [PATCH 1/5] fixed naming error for batch norm block --- .../block_manager/services/nodes/pytorch/batchnorm2d.py | 8 ++++---- .../services/nodes/tensorflow/batchnorm2d.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/project/block_manager/services/nodes/pytorch/batchnorm2d.py b/project/block_manager/services/nodes/pytorch/batchnorm2d.py index 0ab1f9f..4458030 100644 --- a/project/block_manager/services/nodes/pytorch/batchnorm2d.py +++ b/project/block_manager/services/nodes/pytorch/batchnorm2d.py @@ -10,12 +10,12 @@ class BatchNorm2DNode(NodeDefinition): @property def metadata(self) -> NodeMetadata: return NodeMetadata( - type="batchnorm2d", - label="BatchNorm2D", + type="batchnorm", + label="Batch Normalization", category="basic", - color="var(--color-primary)", + color="var(--color-accent)", icon="ChartLineUp", - description="Batch normalization for 2D inputs", + description="Batch normalization layer", framework=Framework.PYTORCH ) diff --git a/project/block_manager/services/nodes/tensorflow/batchnorm2d.py b/project/block_manager/services/nodes/tensorflow/batchnorm2d.py index 5738056..17bea29 100644 --- a/project/block_manager/services/nodes/tensorflow/batchnorm2d.py +++ b/project/block_manager/services/nodes/tensorflow/batchnorm2d.py @@ -10,11 +10,11 @@ class BatchNorm2DNode(NodeDefinition): @property def metadata(self) -> NodeMetadata: return NodeMetadata( - type="batchnorm2d", - label="BatchNorm2D", + type="batchnorm", + label="Batch Normalization", category="basic", - color="var(--color-orange)", - icon="Zap", + color="var(--color-accent)", + icon="ChartLineUp", description="Batch normalization layer", framework=Framework.TENSORFLOW ) From 5fc8c83253fb6ce1511a24633cab026f0291494f Mon Sep 17 00:00:00 2001 From: Gunbir Singh Date: Sun, 8 Feb 2026 21:28:01 -0700 Subject: [PATCH 2/5] removed the background square --- project/frontend/src/index.css | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/project/frontend/src/index.css b/project/frontend/src/index.css index 80f6504..883eb83 100644 --- a/project/frontend/src/index.css +++ b/project/frontend/src/index.css @@ -120,6 +120,13 @@ body { font-family: var(--font-sans); } +.react-flow__node-group { + background: transparent !important; + border: none !important; + padding: 0 !important; + box-shadow: none !important; +} + code, pre { font-family: var(--font-mono); } \ No newline at end of file From e341440b8ec5ff6579bf5498e6e41c43bc8a20d0 Mon Sep 17 00:00:00 2001 From: Gunbir Singh Date: Sun, 8 Feb 2026 21:38:57 -0700 Subject: [PATCH 3/5] fixed custom block ui --- .../src/components/GroupBlockNode.tsx | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/project/frontend/src/components/GroupBlockNode.tsx b/project/frontend/src/components/GroupBlockNode.tsx index 2899d4d..b4af99b 100644 --- a/project/frontend/src/components/GroupBlockNode.tsx +++ b/project/frontend/src/components/GroupBlockNode.tsx @@ -154,8 +154,10 @@ const GroupBlockNode = memo(({ data, selected, id }: GroupBlockNodeProps) => { {/* Render input handles */} {inputPorts.map((port, index) => { - const spacing = 100 / (inputPorts.length + 1) - const topPercent = spacing * (index + 1) + const rangeStart = 70 + const rangeEnd = 90 + const spacing = (rangeEnd - rangeStart) / (inputPorts.length + 1) + const topPercent = rangeStart + spacing * (index + 1) const color = getPortColor(port.semantic) const isConnected = isHandleConnected(port.externalPortId, true) @@ -212,45 +214,46 @@ const GroupBlockNode = memo(({ data, selected, id }: GroupBlockNodeProps) => { ) })} -
+
- +
-
+
{groupDef.name}
-
- - {groupDef.category} - - - {groupDef.internalNodes.length} nodes - -
+
+ + {groupDef.category} + + + {groupDef.internalNodes.length} nodes + +
+ {groupDef.description && ( -
+
{groupDef.description}
)} -
+
{inputPorts.length} in @@ -261,8 +264,10 @@ const GroupBlockNode = memo(({ data, selected, id }: GroupBlockNodeProps) => { {/* Render output handles */} {outputPorts.map((port, index) => { - const spacing = 100 / (outputPorts.length + 1) - const topPercent = spacing * (index + 1) + const rangeStart = 70 + const rangeEnd = 90 + const spacing = (rangeEnd - rangeStart) / (outputPorts.length + 1) + const topPercent = rangeStart + spacing * (index + 1) const color = getPortColor(port.semantic) const isConnected = isHandleConnected(port.externalPortId, false) From 30009a4e98ffa88777894ae0201ae327439c7eb1 Mon Sep 17 00:00:00 2001 From: Aaditya Jindal <74290459+RETR0-OS@users.noreply.github.com> Date: Fri, 13 Feb 2026 18:46:48 -0700 Subject: [PATCH 4/5] Fix indentation in validation checks for node types --- project/block_manager/services/validation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/block_manager/services/validation.py b/project/block_manager/services/validation.py index da5079b..0dcd2db 100644 --- a/project/block_manager/services/validation.py +++ b/project/block_manager/services/validation.py @@ -324,7 +324,7 @@ def _validate_shape_compatibility(self): incoming = edge_map.get(node_id, []) # Check that nodes with required inputs have connections - if node_type in ('conv2d', 'linear', 'maxpool2d', 'maxpool', 'batchnorm', 'batchnorm2d', 'flatten'): + if node_type in ('conv2d', 'linear', 'maxpool2d', 'maxpool', 'batchnorm', 'batchnorm', 'flatten'): if not incoming: self.errors.append(ValidationError( message=f'{node_type} layer requires an input connection', From d834f29fe1da55af1a5ef305ccad4c833faa5fa5 Mon Sep 17 00:00:00 2001 From: Aaditya Jindal <74290459+RETR0-OS@users.noreply.github.com> Date: Fri, 13 Feb 2026 18:47:26 -0700 Subject: [PATCH 5/5] Fix validation check for node types --- project/block_manager/services/validation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/block_manager/services/validation.py b/project/block_manager/services/validation.py index 0dcd2db..6b955b4 100644 --- a/project/block_manager/services/validation.py +++ b/project/block_manager/services/validation.py @@ -324,7 +324,7 @@ def _validate_shape_compatibility(self): incoming = edge_map.get(node_id, []) # Check that nodes with required inputs have connections - if node_type in ('conv2d', 'linear', 'maxpool2d', 'maxpool', 'batchnorm', 'batchnorm', 'flatten'): + if node_type in ('conv2d', 'linear', 'maxpool2d', 'maxpool', 'batchnorm', 'flatten'): if not incoming: self.errors.append(ValidationError( message=f'{node_type} layer requires an input connection',