The easiest way to create new inputs and outputs for node groups is to press the plus button in the node group editing mode (tab) on the N-panel on the “Group” section. However, when creating node groups using the Blender Python API, this method is not available.
To create an input or output for a node group, we must remember that inputs and outputs are not created for a current node, but for the entire node tree, which is enclosed in a node group.
We can get a pointer to a node group node tree through its “node_tree” property
1 2 3 |
bpy.context.object.active_material.node_tree.nodes['NodeGroup'].node_tree # bpy.data.node_groups['NodeGroup'] |
For this node tree we need to create inputs and outputs.
To create an input, we can use the “new()” method of the “inputs” node tree property:
1 |
bpy.context.object.active_material.node_tree.nodes['NodeGroup'].node_tree.inputs.new(type='NodeSocketShader', name='New Intput') |
In the method parameters, we pass the type of input we are creating (NodeSocketShader) and the name we want to assign to it.
In total, the API provides 4 possible types of inputs and outputs:
- NodeSocketShader – for shaders
- NodeSocketVector – for vectors
- NodeSocketFloat – for floating point numbers
- NodeSocketColor – for colors
and another one, not available for common selection:
- NodeSocketInt – for integers
A new output is created in the same way as an input, through the “new()” method, but for the “outputs” property:
1 |
bpy.context.object.active_material.node_tree.nodes['NodeGroup'].node_tree.outputs.new(type='NodeSocketShader', name='New Intput') |
The inputs and outputs created in this way are immediately displayed on the Node Group node, and also appear on the Group Input and Group Output nodes.
Do you also have an article about the 4.0 changes. I bumped into it again today and kinds forgot my knowledge. We need to create an interface and use socket_type. But I can’t find info about how to set the subtype. So sick we use sockettypefloat, this works. But not subtype is set and this cases issues for specific subtypes
See here
https://b3d.interplanety.org/en/creating-inputs-and-outputs-for-node-groups-in-blender-4-0-using-the-python-api/