for mat in bpy.data.materials: if not mat.use_nodes: continue nodes = mat.node_tree.nodes mix = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeMixShader)), None) while mix is not None: nodes.remove(mix) mix = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeMixShader)), None) emission = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeEmission)), None) while emission is not None: nodes.remove(emission) emission = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeEmission)), None) transparent = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeBsdfTransparent)), None) while transparent is not None: nodes.remove(transparent) transparent = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeBsdfTransparent)), None) light_path = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeLightPath)), None) while light_path is not None: nodes.remove(light_path) light_path = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeLightPath)), None) output = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeOutputMaterial)), None) if output is None: continue principled = nodes.new("ShaderNodeBsdfPrincipled") principled.location = (output.location[0] - 400, output.location[1] + 100) mat.node_tree.links.new(principled.outputs[0], output.inputs[0]) texture = next((n for n in nodes if isinstance(n, bpy.types.ShaderNodeTexImage)), None) if texture is None: continue mat.node_tree.links.new(texture.outputs['Color'], principled.inputs['Base Color']) # Rename the material mat.name = "A_" + mat.name # Rename the image if the texture node exists if texture is not None and texture.image is not None: texture.image.name = "A_" + texture.image.name