From blender-skills
Blender 5.x modifiers, bmesh API, mesh editing operators, sculpting setup — SubSurf, Boolean, Array, Mirror, Bevel, bmesh procedural mesh creation, and modeling pipelines via Python (bpy). Includes 5.1 changes (Boolean speed, Corrective Flip Normals, UV improvements).
How this skill is triggered — by the user, by Claude, or both
Slash command
/blender-skills:blender-modeling-modifiersThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill provides expert guidance for Blender 5.x modeling and modifiers: configuring the modifier stack, using bmesh for procedural mesh creation/editing, running mesh operators, setting up sculpting workflows, and common modeling patterns (hard surface, retopology, booleans). The reference files contain the full modifier catalog and Python API patterns.
This skill provides expert guidance for Blender 5.x modeling and modifiers: configuring the modifier stack, using bmesh for procedural mesh creation/editing, running mesh operators, setting up sculpting workflows, and common modeling patterns (hard surface, retopology, booleans). The reference files contain the full modifier catalog and Python API patterns.
Prefer the official Blender MCP Server (Blender Lab, Blender 5.1+) for adding modifiers, editing meshes, applying booleans, baking transforms directly in a running Blender session. Fall back to emitting Python scripts only when the MCP server is not connected.
Detection: at session start, look for tools whose names match execute_blender_code, get_objects_summary, or search_api_docs — these belong to the official blender-mcp server. If any are present, MCP is available.
Tools used by this skill:
execute_blender_code — run bpy Python in the live session (primary action)get_objects_summary, get_object_detail_summary — inspect scene state before mutatingget_blendfile_summary_datablocks / _missing_files / _of_linked_libraries / _path_info / _usage_guess — inventory the filesearch_api_docs, get_python_api_docs, search_manual_docs — confirm correct API/operator names before calling themget_screenshot_of_window_as_image / _as_json, get_screenshot_of_area_as_image — verify visual resultsjump_to_tab_by_name, jump_to_tab_by_space_type, jump_to_view3d_object_by_name, jump_to_view3d_object_data_by_name — drive the UI to make changes visiblerender_thumbnail_to_path, render_viewport_to_path — capture quick visual feedbackWorkflow: inspect with a get_* / search_* tool → mutate via execute_blender_code → verify with a screenshot or summary tool. Keep code blocks small and idempotent so failures are easy to localize.
Setup: see docs/blender-mcp-setup.md.
references/modifier_reference.md for the correct modifier type and propertiesreferences/python_api.mdreferences/python_api.mdbpy.ops.mesh.corrective_flip_normals()normals_make_consistent for non-manifold meshesbpy.context.tool_settings.snap_elements to include 'FACE_CENTER'levels_viewport vs render_levels on Subdivision Surface).import bpy
obj = bpy.context.active_object
cutter = bpy.data.objects["Cutter"]
mod = obj.modifiers.new(name="Boolean", type='BOOLEAN')
mod.operation = 'DIFFERENCE' # DIFFERENCE, UNION, INTERSECT
mod.object = cutter
mod.solver = 'FAST' # FAST or EXACT
# EXACT is slower but handles more edge cases
# Hide cutter in viewport
cutter.hide_viewport = True
cutter.display_type = 'WIRE'
mod.solver = 'EXACT'
mod.use_self = False # Self-intersection handling
mod.use_hole_tolerant = True # Better handling of non-manifold meshes
# Hard surface modifier stack
obj = bpy.context.active_object
# Mirror
mirror = obj.modifiers.new("Mirror", 'MIRROR')
mirror.use_axis = (True, False, False)
mirror.use_clip = True
# Bevel
bevel = obj.modifiers.new("Bevel", 'BEVEL')
bevel.limit_method = 'WEIGHT'
bevel.width = 0.02
bevel.segments = 3
bevel.profile = 0.5
# Weighted Normal
wnormal = obj.modifiers.new("WeightedNormal", 'WEIGHTED_NORMAL')
wnormal.mode = 'FACE_AREA'
wnormal.keep_sharp = True
# Subdivision Surface
subsurf = obj.modifiers.new("Subdivision", 'SUBSURF')
subsurf.levels = 2
subsurf.render_levels = 3
NEAREST_SURFACE or PROJECT# Remesh (automated)
mod = obj.modifiers.new("Remesh", 'REMESH')
mod.mode = 'VOXEL' # VOXEL, BLOCKS, SMOOTH, SHARP
mod.voxel_size = 0.05 # Smaller = more detail
mod.use_smooth_shade = True
# Shrinkwrap (manual retopology helper)
mod = lowpoly.modifiers.new("Shrinkwrap", 'SHRINKWRAP')
mod.target = highpoly
mod.wrap_method = 'NEAREST_SURFACEPOINT'
mod.wrap_mode = 'ON_SURFACE'
import bpy
obj = bpy.context.active_object
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
# Remove doubles (merge by distance)
bpy.ops.mesh.remove_doubles(threshold=0.0001)
# Recalculate normals
bpy.ops.mesh.normals_make_consistent(inside=False)
# Delete loose vertices/edges
bpy.ops.mesh.select_all(action='DESELECT')
bpy.ops.mesh.select_loose()
bpy.ops.mesh.delete(type='VERT')
# Fill holes
bpy.ops.mesh.select_non_manifold()
bpy.ops.mesh.fill()
# Triangulate (for export)
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.quads_convert_to_tris()
bpy.ops.object.mode_set(mode='OBJECT')
mod = obj.modifiers.new("Decimate", 'DECIMATE')
mod.decimate_type = 'COLLAPSE' # COLLAPSE, UNSUBDIV, DISSOLVE
mod.ratio = 0.5 # 50% of original faces
# mod.use_symmetry = True
# mod.symmetry_axis = 'X'
import bpy
obj = bpy.context.active_object
# Add multires for sculpting (preserves base mesh)
multires = obj.modifiers.new("Multires", 'MULTIRES')
for _ in range(4):
bpy.ops.object.multires_subdivide(modifier="Multires", mode='CATMULL_CLARK')
# Or use Dyntopo (dynamic topology) — requires sculpt mode
bpy.ops.object.mode_set(mode='SCULPT')
bpy.context.sculpt_object.use_dynamic_topology_sculpting = True
# Sculpt settings
sculpt = bpy.context.tool_settings.sculpt
sculpt.detail_size = 12 # Dyntopo detail (lower = more detail)
sculpt.detail_refine_method = 'RELATIVE' # RELATIVE, CONSTANT, BRUSH
sculpt.detail_type_method = 'RELATIVE' # RELATIVE, CONSTANT, MANUAL
sculpt.use_smooth_shading = True
sculpt.symmetrize_direction = 'NEGATIVE_X'
# Brush settings
brush = sculpt.brush
brush.strength = 0.5
brush.size = 50
brush.auto_smooth_factor = 0.0
bmesh provides direct, efficient mesh creation and manipulation without bpy.ops:
import bpy
import bmesh
# Create empty mesh
mesh = bpy.data.meshes.new("ProcMesh")
bm = bmesh.new()
# Create geometry
v1 = bm.verts.new((0, 0, 0))
v2 = bm.verts.new((1, 0, 0))
v3 = bm.verts.new((1, 1, 0))
v4 = bm.verts.new((0, 1, 0))
bm.faces.new((v1, v2, v3, v4))
# Write to mesh and create object
bm.to_mesh(mesh)
bm.free()
obj = bpy.data.objects.new("ProcObj", mesh)
bpy.context.collection.objects.link(obj)
import bmesh
obj = bpy.context.active_object
bm = bmesh.new()
bm.from_mesh(obj.data)
# Operations
bmesh.ops.subdivide_edges(bm, edges=bm.edges[:], cuts=1)
bmesh.ops.translate(bm, vec=(0, 0, 1), verts=bm.verts[:])
# Write back
bm.to_mesh(obj.data)
bm.free()
obj.data.update()
For complete bmesh patterns and all modifier API details, see references/python_api.md.
Mesh > Normals > Recalculate Outside)For the complete catalog of all ~50 modifiers with type strings, properties, and use cases, consult references/modifier_reference.md.
Key categories:
For complete Python API patterns including modifier management, bmesh operations, mesh operators, and sculpt configuration, consult references/python_api.md.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub ra100/blender-claude-plugin --plugin blender-skills