# How to remove extra materials from a mesh if the mesh has more than 1 material?

I am trying to write a little script that checks if mesh has more than one material, and if it does, remove materials until there is only one left on the item. Here is what I have so far:

import bpy
for ob in bpy.data.objects:
number_of_mats = len(ob.material_slots.items())
if number_of_mats > 1:
for i in range(number_of_mats-1):
# remove material here?


I cannot seem to figure out the method to remove a mat at this point. Any suggestions?

You can set the index of the list to 1, iterate through the upcoming slots, call and override the context of material_slot_remove(). Demo on how to remove all slots > 0:

for obj in bpy.context.selected_editable_objects:
obj.active_material_index = 1
for i in range(1, len(obj.material_slots)):
bpy.ops.object.material_slot_remove({'object': obj})


When I remove a material in the ui, this is echo'd:

bpy.context.object.active_material_index = 2
bpy.ops.object.material_slot_remove()


Looks like the documentation live here.

Hope that helps, Koen

You can also do it without operators

import bpy
for ob in bpy.data.objects:
# Skip things without materials (armatures, etc.)
if not hasattr(ob.data, 'materials'):
continue

while len(ob.data.materials) > 1:
ob.data.materials.pop()