I want to set texture for faces. I put together a quick example using the "Cube" and an existing BMP as the texture file on disk. I am in Object Mode. I set the Viewport Shading to Texture.

The code is:

import bpy
import bmesh

texturak = bpy.data.textures
o = bpy.data.objects["Cube"]
me = o.data
ol = me.materials

img = bpy.data.images.load('d:\\canwall1.bmp')
texturak.new('ColorTex', type = 'IMAGE')
texturak[-1].image = img

mat = bpy.data.materials.new('TexMat')
mtex = mat.texture_slots.add()
mtex.texture = texturak[-1]
mtex.texture_coords = 'UV'
mtex.use_map_color_diffuse = True 
mtex.use_map_color_emission = True 
mtex.emission_color_factor = 0.5
mtex.use_map_density = True 
mtex.mapping = 'FLAT' 

if (len(me.uv_textures) == 0):
while (ol):
    ol.pop(0,update_data = True)

for texlay in me.uv_textures:
    for tf in texlay.data:
        tf.image = img

I get the cube, then the texture, I add it as a material. From there, I found no good examples on internet. The only working stuff was for Blender 2.5 and some guesses from the answer of my previous question here.

So for this time I tried to set all face-images to the image I load. But all I get is a purple cube. Now my guess is that "something happened" (woohoo), but as well as "something is missing" (no woohoo this time).

My question would be to those more experienced, that what is missed here actually, or is there a better way to set material / texture to a face / faces?

Edit: To extend my question: I want to have more textures per mesh; this is why I want to set the texture per face.

  • $\begingroup$ Do you need to do it with a python script or a manual solution is enough? $\endgroup$
    – Beothorn
    Aug 13, 2013 at 13:56
  • $\begingroup$ I need it from Python, because I want to make an importer script. $\endgroup$
    – Zéiksz
    Aug 13, 2013 at 14:01

1 Answer 1


The following sets the face texture of face 0 for the active object:

import bpy

obj = bpy.context.object
img = bpy.data.images.load("//example.png")
obj.data.uv_textures.active.data[0].image = img

# To make renderable:
mat = bpy.data.materials.new("Example")
mat.use_face_texture = True

For cycles see: Different image textures for one material (Cycles).

  • $\begingroup$ Last line is "(mat)" and not "(material)", but works cool. First I checked the stuff was purple too (see question's problem), then I realised it may be the texture: I converted that to PNG from BMP, and it worked pretty cool. $\endgroup$
    – Zéiksz
    Aug 13, 2013 at 16:43
  • $\begingroup$ Corrected — glad you got is sorted. :) $\endgroup$
    – Aldrik
    Aug 13, 2013 at 16:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .