import bpy common_modifier_props = ['__doc__', '__module__', '__slots__', 'bl_rna', 'execution_time', 'is_active', 'is_override_data', 'name', 'rna_type', 'show_expanded', 'show_in_editmode', 'show_on_cage', 'show_render', 'show_viewport', 'type', 'use_apply_on_spline'] current_modifiers = {} current_modifier_values = {} def modifier_update_handler(scene): for obj in scene.objects: if obj.modifiers: ### Check if new modifiers have been added or removed, if so re-read all modifier values new_modifiers = [mod.name for mod in obj.modifiers] if obj.name not in current_modifiers or current_modifiers[obj.name] != new_modifiers: print(f"Modifier added/removed for object: {obj.name}") current_modifiers[obj.name] = new_modifiers for i, mod in enumerate(obj.modifiers): current_modifier_values[f"{obj.name}_modifier_{i}"] = [getattr(mod, x) for x in [property for property in dir(mod) if property not in common_modifier_props]] ### Check if any modifier values have changed for i, mod in enumerate(obj.modifiers): new_modifier_values = [getattr(mod, x) for x in [property for property in dir(mod) if property not in common_modifier_props]] #print(new_modifier_values) if f"{obj.name}_modifier_{i}" not in current_modifier_values or current_modifier_values[f"{obj.name}_modifier_{i}"] != new_modifier_values: print(f"Modifier {mod.name} updated for object: {obj.name}", new_modifier_values) current_modifier_values[f"{obj.name}_modifier_{i}"] = new_modifier_values bpy.app.handlers.depsgraph_update_post.clear() bpy.app.handlers.depsgraph_update_post.append(modifier_update_handler)