1
$\begingroup$

I wan't to create a node group "testgroup1" inside "testgroup0" using python script can anybody explain me how to do that?

$\endgroup$
2
$\begingroup$

Here is some Python functions to manipulate groups and group instances.

Principally, there is two aspects:

  • Groups are stored in Blender's data in bpy.data.node_groups
  • Inside a material or another group, a group needs to be instantiated so that it is link to this material or other group

The code is commented below:

import bpy

def create_material( name, use_nodes = True, clear = True ):
    """ 
    Create a material of the given name. 

    Parameters: 
    name (string): the name of the material to create 
    use_nodes (bool, default True): if True the material is ready to have nodes  
    clear (bool, default True): if True clear default nodes

    Returns: 
    material: The created material 
    """
    material = bpy.data.materials.new( name )
    material.use_nodes = use_nodes
    # Materials are created with two default nodes, so we may want to clear them
    if clear:
        clear_material( material )
    return material

def clear_material( material ):
    """
    Remove all node of the given material

    Parameters: 
    material (material): the material to clear 
    """
    if material.node_tree:
        material.node_tree.links.clear()
        material.node_tree.nodes.clear()

def create_group( name ):
    """
    Create a group in Blender's data

    Parameters:
    name (string): the name of the material

    Returns:
    group (group): the created group
    """
    group = bpy.data.node_groups.new( name, 'ShaderNodeTree' )
    return group

def instanciate_group( nodes, group ):
    """
    Instanciate a group inside a node tree

    Parameters
    nodes: the nodes of the node tree in which the group is to instantiate
    group: the group to instanciate

    Returns:
    instance: the created group instance
    """
    instance = nodes.new( type = 'ShaderNodeGroup' )
    instance.node_tree = group
    return instance

# Example:

# Create a material
material = create_material( "mat" )
# Create group0
group0 = create_group( "group0" )
# Create group1
group1 = create_group( "group1" )

# Instantiate the group0 into the material
group0_instance = instanciate_group( material.node_tree.nodes, group0 )
# Instantiate the group1 into group0
group1_instance = instanciate_group( group0.nodes, group1 )
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.