# Add material and apply Diffuse color via Python

This may be another simple question but I can't seem to find a straight answer.

I am procedurally generating figures and as part of the last step I want to color the figure red.

If I manually add a new material to the figure I can change the color with bpy.context.object.active_material.diffuse_color = (1, 0, 0)

But I need to automate this step such that the program automatically add a new material and then changes the color. I've tried the following but it doesn't seem to work:

bpy.ops.material.new()
bpy.context.object.active_material.diffuse_color = (1, 0, 0)


It seems the problematic step is adding a new material. Any help would be greatly appreciated.

Actually, I figured it out shortly after posting the question.

bpy.ops.material.new()


I needed to use:

bpy.data.materials.new(name="MaterialName")


So the final solution was:

activeObject = bpy.context.active_object #Set active object to variable
mat = bpy.data.materials.new(name="MaterialName") #set new material to variable
activeObject.data.materials.append(mat) #add the material to the object
bpy.context.object.active_material.diffuse_color = (1, 0, 0) #change color

• Won't always work as obj.active_material will not necessarily be mat – batFINGER Jun 28 '16 at 20:33
• Just use mat.diffuse_color (or bpy.data.materials['Materialname'].diffuse_color) instead. – Chris Arndt Nov 21 '16 at 11:48
• You're a real hero! – Felix Crazzolara Oct 27 '19 at 9:30