Lets assume you have 1 object with 4 modifiers added to it. I am curious how one would approach the task to apply all or to delete all modifiers of a just selected object that has many modifiers already added.

The console reads out the modifier delete as

bpy.ops.object.modifier_remove(modifier="Box Right ")

So "Box Right " I might have to replace with something like active.object.modifier.name and then work each modifier off?

This would be very helpful when you want to generate a static mesh for animation or 3D printing.

  • $\begingroup$ related, very: blender.stackexchange.com/questions/7196/… $\endgroup$
    – zeffii
    Jan 7, 2016 at 23:37
  • $\begingroup$ Ok let me try to figure this own. thank you! $\endgroup$ Jan 7, 2016 at 23:45
  • 1
    $\begingroup$ A short way to apply and remove all modifiers on the active objects is bpy.ops.object.convert(target='MESH') this is the operator called when using Alt-C -> Mesh from curve $\endgroup$
    – sambler
    Jan 8, 2016 at 15:06

1 Answer 1


Modifier removal

To remove a modifier from an object.

obj below is a reference to an object either obtained via

obj = bpy.context.active_object
obj = bpy.context.object
# or
obj = bpy.data.objects[name]

If you want to remove a modifier it is done by name, not by type. You could have multiple array modifiers, but only want to remove a specific one.

modifier_to_remove = obj.modifiers.get("Bevel")

# or as a one-liner

# or remove all modifiers from an object

Modifier Apply

Using an operator

As sambler pointed out

# operates on all selected objects (not just the scene's _active_object_)

lower level

If you want to apply all modifiers it's covered here: How to get a new mesh with modifiers applied using Blender Python API? - This involves using obj.to_mesh and there are a few things to consider, it:

  • generates a new mesh from your current obj (leaves current obj.data intact)
  • does not remove the modifiers automatically from the object. (unlike the Apply button on the Modifiers panel, or Convert to Mesh).

This snippet will:

- make a reference to the current obj.data ( i call it old_mesh)
- make a new Mesh ( new_mesh) using the effect of the combined modifiers on `obj`
- remove all modifiers from `obj`
- assign the new Mesh to obj.data 
- remove old_mesh from the blend

in code:

import bpy

context = bpy.context
scene = context.scene
obj = context.object

# get a reference to the current obj.data
old_mesh = obj.data

# settings for to_mesh
apply_modifiers = True
settings = 'PREVIEW'
new_mesh = obj.to_mesh(scene, apply_modifiers, settings)

# object will still have modifiers, remove them

# assign the new mesh to obj.data 
obj.data = new_mesh

# remove the old mesh from the .blend
  • $\begingroup$ modifiers.clear() is really great. i used to remove modifiers sequentially, but if you have many modifiers it can cause the whole stack to update per removal. $\endgroup$
    – patmo141
    Mar 24, 2018 at 15:11
  • $\begingroup$ Is there a way to make this work with the SURFACE_DEFORM mod? Also related to this, is there are way to bind a surface deform mod without bpy.ops.object.surfacedeform_bind()? $\endgroup$
    – MACHIN3
    Jun 10, 2018 at 13:20

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.