# Why does 'diffuse_color' expect four values and not three with Python in 2.8?

I am attempting to create a plane and set the color; the following code throws an error at this line:

bpy.data.materials['RSgreen'].diffuse_color=(0,0,0)


the error is: ValueError: bpy_struct: item.attr = val: sequences of dimension 0 should contain 4 items, not 3

which makes no sense to me; diffuse_color calls for 3 parameters in the documentation.

bpy.ops.mesh.primitive_plane_add(size=4,enter_editmode=False,location=(-2,-2,0.01))
bpy.context.active_object.name='Plane2'
bpy.ops.material.new()
bpy.data.materials[1].name='RSgreen'
bpy.data.materials['RSgreen'].diffuse_color=(0,0,0)
bpy.context.object.data.materials.append(bpy.data.materials['RSgreen'])


You saw the wrong version of document, 2.80 change a lot. Ones should always use new document page for 2.80 version:

Material(ID) - Blender 2.80 API (latest)

# diffuse_color

Diffuse color of the material

Type: float array of 4 items in [0, inf], default (0.8, 0.8, 0.8, 0.8)

last update: 2020-08-04 Blender 2.91 Alpha

The four values are represented as: [Red, Green, Blue, Alpha] by default rendering pipeline. These values may stay from 0.0 to 1.0 if the color is interpreted as diffuse. Other wise, it doesn't need to less than 1. eg. a light color node might contain a value more than 1 unit.

• What do the parameters mean? R,G,B,? ?? Jul 12, 2019 at 23:53
• @vndep RGB and Alpha Jul 13, 2019 at 0:30
• I am trying to get a green color (RGB=0,113,57; hex=#007139). When I pass the array (0,113,57,1) to .diffuse_color I get a light blue color instead. Same result when I convert the 0-255 values to percentiles. Any suggestions as to how to get that green? Maybe diffusion_color isn't the right property? Jul 13, 2019 at 1:17
• @vndep The description say it is an float number, and you should always consider the color value is in 0 to 1 rather 0 to 255. Divide your color value by 255 to fix it Jul 13, 2019 at 1:40
• Thanks! That solves it. Jul 13, 2019 at 9:17