I'm having trouble applying vertex colors through Python to a mesh. The mesh is imported from a file which has vertex info, face info (vertex indices), and a list of colors that corresponds to each vertex.

Creating the Bmesh mesh is fine:

bm = bmesh.new()
[bm.verts.new(v) for v in verts]
[bm.faces.new([bm.verts[f[0]], bm.verts[f[1]], bm.verts[f[2]]]) for f in faces]

However, I can't seem to find a way to apply colors to each vertex. Doing

color_layer = bm.loops.layers.color.new("color")

just yields a Bmesh vertex with an index of -1...

Is there anyway to get back the correct vertex indices in this way?


Loop over face loops.

import bpy
import bmesh
from random import uniform
context = bpy.context
mesh = context.object.data
bm = bmesh.new()

color_layer = bm.loops.layers.color.new("color")
# make a random color dict for each vert
# vert_color = random_color_table[vert]

def random_color(alpha=1):
    return [uniform(0, 1) for c in "rgb"] + [alpha]
random_color_table = {v : random_color()
                      for v in bm.verts}
for face in bm.faces:
    for loop in face.loops:
        loop[color_layer] = random_color_table[loop.vert]

Should your table be indexed by vert index use something like


If you notice that you are getting -1 for index value run



How to get random color variation on a single mesh?

set a specified vertex color to black via python

  • $\begingroup$ This is great. Just to note that I received an error with the added bm.verts.index_update() at the end, but everything else worked fine. $\endgroup$
    – legel
    Dec 5 '19 at 17:42
  • $\begingroup$ This worked great ! Just one thing, I guess now the vertex colors expect an aplha value too, so one should replace "rgb" with "rgba" to add a 4th channel. Or just append the value 1 so the vertices stay opaque. $\endgroup$
    – Gorgious
    Mar 13 '20 at 22:34
  • $\begingroup$ Thanks, edited. $\endgroup$
    – batFINGER
    Mar 14 '20 at 10:03

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.