Skip to main content
skill CX Codex

contour-to-mesh — Claude Code skill: Blender mesh from 2D contours

Builds a Blender mesh straight from a contour or mask instead of approximate primitives. Useful when the silhouette has to match a front template exactly.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add RobLe3/cc-blender-skill --skill contour-to-mesh -a claude-code
Open on GitHub

What contour-to-mesh does

The skill takes one clean contour for a single structural part and turns it into a triangulated mesh. A recipe is generated with scripts/mask_to_mesh_recipe.py, then the Blender Python runs and creates a named GEO_* mesh. Front-projected UVs are assigned right away.

Depth comes only from a modifier or vertex displacement that leaves the X/Z boundary untouched. The boundary is the contract: bevel, solidify, subdivision, shrinkwrap and sculpt passes must not move the front silhouette unless a new source mask exists. Coordinates map image x to Blender X and image y to Z with a vertical flip; Y carries thickness.

There is a front_locked_visual_skin pass for painterly design sheets whose orthographic views disagree. The front skin becomes the visual acceptance gate, and volume gets added afterwards. Before the first Blender call you read ../text-to-blender/references/mcp-backends.md and stay on the chosen backend for the whole task. A Blender MCP server is required, otherwise the skill has no way to run code in the scene.

What it helps with

  • build a mascot mesh from its silhouette instead of an ellipse
  • keep exact leaf or petal boundary points
  • turn OpenCV contours into a filled surface
  • make a shallow bas-relief with front-projected UVs
  • carry part_inventory.json names into Blender

Example prompts for the agent

  • Build a mesh from mask.png, name it GEO_petal, and keep the X/Z boundary fixed
  • Assign front-projected UVs and add depth along Y only
  • Run the front_locked_visual_skin pass for the logo and compare the front render against the source mask

How to install contour-to-mesh

1Skills CLI (Vercel)

npx skills add RobLe3/cc-blender-skill --skill contour-to-mesh -a claude-code

2Manually: put the files in place

~/.claude/skills/contour-to-mesh/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/contour-to-mesh/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about contour-to-mesh

How do I install contour-to-mesh in Claude?

Run npx skills add RobLe3/cc-blender-skill --skill contour-to-mesh -a claude-code. The skill file then sits at ~/.claude/skills/contour-to-mesh/SKILL.md.

What does contour-to-mesh do?

It builds a triangulated Blender mesh from a 2D contour or mask, assigns front-projected UVs, and adds depth without changing the front silhouette.

What do I need before using it?

A Blender MCP server exposing tools such as execute_blender_code and render_viewport_to_path. The skill also asks you to read ../text-to-blender/references/mcp-backends.md before the first call and to keep the same backend for the task.

Source text

SKILL.md · MIT
---
name: contour-to-mesh
description: Build Blender mesh surfaces directly from extracted 2D contours/masks instead of approximate primitives. Use for 1:1 mascot/logo reconstruction, exact leaf/petal silhouettes, filled wireframe shapes, shallow bas-relief forms, or when the model outline must match a front template before adding depth.
allowed-tools: Read Bash Glob Grep mcp__blender__execute_blender_code mcp__blender__get_scene_info mcp__blender__get_object_info mcp__blender__get_objects_summary mcp__blender__get_object_detail_summary mcp__blender__render_viewport_to_path mcp__blender__search_api_docs mcp__blender_official__execute_blender_code mcp__blender_official__get_objects_summary mcp__blender_official__get_object_detail_summary mcp__blender_official__render_viewport_to_path mcp__blender_official__search_api_docs
---


## MCP backend

Use when: Source-locked contour-derived meshes, silhouette-first modeling, triangulated mask/contour surfaces, mesh generation from OpenCV contours, or replacing generic ellipses/primitives with measured shapes.

Before the first Blender call, read [../text-to-blender/references/mcp-backends.md](../text-to-blender/references/mcp-backends.md). Prefer official MCP for shared capabilities; preserve the selected backend for the whole task. Tool names in recipes are client/legacy examples: map them through that reference and its agent-host guide.
# Contour to Mesh

Use this when a reference silhouette is the contract. The mesh starts as a filled 2D contour in front-view X/Z, then gets shallow Y depth/crown after validation.

## Workflow

1. Extract or select a clean contour/mask for one structural part.
2. Generate a triangulated mesh recipe with `scripts/mask_to_mesh_recipe.py`.
3. Run the generated Blender Python to create a named `GEO_*` mesh.
4. Assign front-projected UVs immediately.
5. Add depth only as a modifier or vertex displacement that preserves X/Z boundary positions.
6. Validate the front render against the source mask.

## Hard rules

- Do not use radial duplication unless the manifest says the source is symmetric.
- Do not use a generic ellipse if a contour exists.
- Boundary vertices must keep source X/Z coordinates.
- Depth deformation may move Y and inner vertices, but must not alter front silhouette.
- One structural source part should become one named structural mesh.

## Blender pattern

Generated mesh coordinates should map image `x` to Blender `X` and image `y` to Blender `Z` with vertical flip. Use `Y` only for thickness/depth.


## Front-plane rotation rule

In this Blender coordinate convention, the front camera looks along the Y axis and the reference silhouette lives in the X/Z plane. Therefore 2D rotations inside the front view are rotations around the **Y axis**, not around Z. Use `rotation_euler = (0, angle, 0)` for 2D component orientation in the front projection. Z rotation spins objects into/out of screen-space incorrectly for X/Z-plane meshes.

## Sources distilled

- Blender Mesh API: create meshes from vertices/faces using `from_pydata`.
- Blender BMesh: use for cleanup, triangulation, normals, smoothing.
- OpenCV contours: detect and simplify boundaries.
- Delaunay triangulation: useful for filled interior meshes when filtered by mask containment.


## Part-inventory handoff

When masks come from `source-part-segmentation`, preserve the `part_inventory.json` names in Blender:
`GEO_<part_name>`, `MAT_<part_name>`, and UV layer names. Mesh generation must record:

- source image size;
- source mask path;
- contour boundary point count;
- boundary landmark points (tip, base-left, base-right, centroid/extrema) when detectable;
- atlas UV rectangle or projection mode.

For exact mascot/logo work, generate boundary vertices from the contour and add interior vertices only for surface support.
The boundary is a contract: bevels, solidify, subdivision, shrinkwrap, or sculpt passes must not move front-view X/Z boundary vertices unless a new source mask is produced.

## Hole and stroke policy

- Filled structural masks become meshes.
- Wireframe strokes guide boundaries/landmarks; they are not structural meshes unless the manifest classifies them as decorative linework.
- Holes/negative regions should be kept as separate cut masks when they affect silhouette; otherwise implement them as decals/material masks.


## Source-locked front-skin fallback

When a design sheet is painterly/stylized and separate orthographic views are not CAD-consistent, use a **front-skin** pass before sculptural interpretation:

1. choose the canonical front/master source;
2. extract the visible subject mask as a filled contour;
3. create a shallow 2.5D mesh whose X/Z boundary is that contour;
4. assign full-image front-projected UVs so the rendered front matches the source pixels;
5. add depth only along Y and behind the front surface;
6. optionally add separate relief/backing parts for side plausibility, but keep the front skin as the visual acceptance gate.

This is a generic fallback for logos/mascots where a faithful front read is more important than speculative volume. Mark it as `front_locked_visual_skin`, not as a fully solved turntable model.

## Script

- `scripts/source_locked_skin_recipe.py` extracts a largest/canonical foreground component and emits a mask + contour mesh recipe using full-image front-projected UV coordinates.

© RobLe3 · MIT · RobLe3/cc-blender-skill

Similar skills

Everything for Game dev and 3D: Unity, Unreal, Godot, Blender →

From the same set23

text-to-blender Drives Blender via MCP backends from natural language prompts. It handles 3D modeling, procedural materials, lighting, camera setup, and test renders without manual UI clicks. CX Codex +1 1,000installs blender-skill-harmonizer A meta-layer for a Blender skill stack: it sets activation precedence, handoff artifacts and conflict rules when one task pulls in several skills at once. CX Codex +1 830installs reference-analysis-validator The skill measures reference images and Blender renders and blocks a 1:1 claim until the metrics pass. CX Codex +1 826installs reference-look-calibration This skill compares a product preview against a source image using colour, brightness and mask metrics, then adjusts Blender materials, lighting and camera crop. CX Codex +1 797installs orthographic-registration Registers front, side, back and top orthographic references into one Blender coordinate contract. Useful when the front reads fine but side and back silhouettes drift. CX Codex +1 786installs multiview-fit-loop Runs a render-compare-adjust loop until a Blender model matches supplied front, side, back and top templates across all dimensions. CX Codex +1 784installs wireframe-to-3d Turns orthographic wireframe PNGs into a Blender 3D model and exports it as .glb. Useful when you have front and side views but no mesh yet. CX Codex +1 787installs multiview-constraint-solver Checks whether front, side, back and top orthographic references can fit one rigid Blender model, then picks a canonical source policy before you rebuild. CX Codex +1 737installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor