blender-interface-mesh-quality-checks
Sub-skill of blender-interface: Mesh Quality Checks (+2).
Best use case
blender-interface-mesh-quality-checks is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Sub-skill of blender-interface: Mesh Quality Checks (+2).
Teams using blender-interface-mesh-quality-checks should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/mesh-quality-checks/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How blender-interface-mesh-quality-checks Compares
| Feature / Agent | blender-interface-mesh-quality-checks | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Sub-skill of blender-interface: Mesh Quality Checks (+2).
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Mesh Quality Checks (+2)
## Mesh Quality Checks
```python
def validate_imported_mesh(obj):
"""Validate mesh quality after import."""
import bmesh
checks = {"passed": True, "issues": []}
mesh = obj.data
bm = bmesh.new()
bm.from_mesh(mesh)
# Check for non-manifold edges
non_manifold = [e for e in bm.edges if not e.is_manifold]
if non_manifold:
checks["issues"].append(f"{len(non_manifold)} non-manifold edges")
# Check for loose vertices
loose = [v for v in bm.verts if not v.link_edges]
if loose:
checks["issues"].append(f"{len(loose)} loose vertices")
# Check for degenerate faces (zero area)
degen = [f for f in bm.faces if f.calc_area() < 1e-8]
if degen:
checks["issues"].append(f"{len(degen)} degenerate faces")
# Check normals consistency
bm.normal_update()
bm.free()
checks["vertex_count"] = len(mesh.vertices)
checks["face_count"] = len(mesh.polygons)
checks["passed"] = len(checks["issues"]) == 0
return checks
```
## Render Validation
```python
import os
def validate_render_output(output_path, expected_frames=1):
"""Validate render output exists and is reasonable."""
checks = {"passed": True, "issues": []}
if not os.path.exists(output_path):
checks["issues"].append(f"Output not found: {output_path}")
checks["passed"] = False
return checks
size_bytes = os.path.getsize(output_path)
if size_bytes < 1000:
checks["issues"].append(f"Output suspiciously small: {size_bytes} bytes (likely blank)")
checks["passed"] = False
# Check image dimensions (requires PIL)
try:
from PIL import Image
img = Image.open(output_path)
checks["resolution"] = img.size
checks["mode"] = img.mode
# Check if image is all-black (failed render)
extrema = img.convert("L").getextrema()
if extrema == (0, 0):
checks["issues"].append("Render is all-black — check lighting and materials")
checks["passed"] = False
except ImportError:
checks["issues"].append("PIL not available — skipping image content check")
return checks
```
## Scale and Units Check
```python
def validate_engineering_scale(obj, expected_max_dim_m=500):
"""Check that imported geometry is at engineering scale (meters)."""
dims = obj.dimensions
max_dim = max(dims)
if max_dim < 0.001:
return {"issue": f"Max dimension {max_dim:.6f}m — likely in mm, scale by 1000"}
if max_dim > expected_max_dim_m * 10:
return {"issue": f"Max dimension {max_dim:.1f}m — likely wrong units"}
return {"ok": True, "dimensions_m": tuple(dims)}
```Related Skills
solidworks-to-blender-pipeline
Use when converting SolidWorks .sldprt/.sldasm geometry to Blender for rendering, animation, or visualization, including questions about STEP export settings, FreeCAD as a bridge, or which mesh format (STL/OBJ/GLTF) to choose.
blender-worktree-test-hardening
Recover and harden digitalmodel Blender automation work in isolated worktrees when uv/editable dependency paths break and local machines lack a Blender executable.
worktree-pre-push-bypass-for-tier1-checks
Handle workspace-hub integration-branch pushes from isolated git worktrees when the pre-push hook incorrectly assumes sibling tier-1 repos exist under the worktree path.
orcawave-mesh-generation
Panel mesh generation for OrcaWave diffraction analysis. Use when converting CAD/STL to panel mesh, validating mesh quality, running convergence studies, or generating GDF files for hydrodynamic computations.
blender-interface
AI interface skill for Blender 3D — headless CLI execution, Python bpy API, mesh import/export, rendering, and integration with engineering analysis workflows.
cad-mesh-generation
Generate parametric CAD geometry and finite element meshes using FreeCAD and GMSH
skill-creator-content-quality
Sub-skill of skill-creator: Content Quality (+3).
hydrodynamic-pipeline-gmsh-panel-mesh-for-hydrodynamics
Sub-skill of hydrodynamic-pipeline: Gmsh Panel Mesh for Hydrodynamics (+3).
hydrodynamic-pipeline-checkpoint-1-mesh-quality
Sub-skill of hydrodynamic-pipeline: Checkpoint 1: Mesh Quality (+2).
gmsh-openfoam-orcaflex-gate-1-mesh-quality
Sub-skill of gmsh-openfoam-orcaflex: Gate 1 — Mesh Quality (+1).
gmsh-openfoam-orcaflex-converter-1-gmsh-msh-openfoam-polymesh
Sub-skill of gmsh-openfoam-orcaflex: Converter 1: Gmsh .msh → OpenFOAM polyMesh (+1).
cfd-pipeline-openfoam-case-setup-from-mesh
Sub-skill of cfd-pipeline: OpenFOAM Case Setup from Mesh (+2).