
text-to-blender
Drive Blender from natural language: create or edit 3D models, materials, lighting, cameras, renders, animation, and exports through Blender MCP. Route complete scenes to domain skills and wireframe/reference requests to reconstruction skills. Also use for 3D requests that do not name Blender. Requires a configured official or ahujasid MCP backend.
- Installs
- 1.1K
- Last 24h
- +38
- Trending rank
- #3996
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/roble3/cc-blender-skill --skill text-to-blender- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads text-to-blender automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
MCP backend
Use when: User asks for any 3D creation, modification, lighting, rendering, animation, or export task. Anything involving Blender or that should reasonably be done in Blender.
Before the first Blender call, read 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.
Text-to-Blender Orchestrator
Turn plain-English requests into Blender work. You are the conductor: read the request, decide which sub-skills to chain-load, sequence them in the right order, and execute via the Blender MCP.
Multi-skill harmonization
For complex tasks that trigger multiple Blender skills, especially reference/template/brand work, load blender-skill-harmonizer before choosing the execution order. It owns precedence, handoff artifacts, and conflict policy.
If the user rejects an output as sub-par, says the same issue is recurring, or asks to improve the skill stack before retrying, load quality-refinement-autoloop before further product work. It turns evidence into a sanitized reusable lesson, patches generic skills/docs/versioning when explicitly requested, and only then resumes the Blender repair loop.
How this skill works
The user speaks in tasks ("render a hero shot of a sword on a stone"); you:
- Identify intent → which capabilities are needed (modeling? materials? lighting? rendering? export?).
- Check prerequisites → MCP server reachable, scene state.
- Reset world to a known-good baseline (see World reset below) — prevents leftover broken HDRI / Environment Texture nodes from previous runs corrupting the render.
- Look up real-world dimensions for the subject (
references/common-object-dimensions.md) BEFORE generating Python. A "sword" has specific proportions; a "chair" has specific proportions; do not guess. - Route to sub-skills → load the relevant ones with the host's file-reading tool and follow their instructions.
- Sequence the work in the order pros use (see
references/assembly-order.md). - Execute generated Python with the selected backend's code-execution tool.
- Validate with the selected backend's scene/object inspection and screenshot or render tools — see Visual validation checkpoint below. Numerical validation alone is not enough: the API can report success while geometry is grossly wrong.
- Iterate — if the visual check shows an obvious problem (subject barely visible, wrong proportions, wrong orientation), fix and re-render BEFORE reporting success.
- Report to the user with concrete numbers AND a path to the proof render they can inspect.
World reset (always step 3, before any composition)
Previous tests can leave the scene's world in a broken state — particularly an Environment Texture node with image=None cascading into Background, which produces a magenta-flooded render. Reset world to a neutral baseline at the start of every scene-build:
def reset_world(scene, color=(0.04, 0.04, 0.05, 1.0), strength=0.4):
world = scene.world
world.use_nodes = True
nodes = world.node_tree.nodes
for n in list(nodes):
nodes.remove(n)
output = nodes.new('ShaderNodeOutputWorld')
bg = nodes.new('ShaderNodeBackground')
bg.inputs['Color'].default_value = color
bg.inputs['Strength'].default_value = strength
world.node_tree.links.new(bg.outputs['Background'], output.inputs['Surface'])
If the user wants HDRI lighting, override this AFTER it runs (load the actual .hdr file and verify env.image is not None).
Visual validation checkpoint (always between steps 8 and 10)
After rendering, always:
- Inspect the completed render (on official MCP, read the returned filepath). For quick GUI checks use the selected backend's screenshot tool. Headless sessions require a render, not a screenshot.
- Visually verify against the user's request. Specifically:
- Subject is visible and recognisable (not a thin streak, not magenta-flooded, not entirely in shadow)
- Proportions match the real-world reference dimensions for that subject
- Composition is reasonable (subject in frame, not clipped at edges, not microscopic in one corner)
- Materials have visible variation (not perfectly flat plastic-looking surfaces) — for production-quality scenes, add procedural texture nodes
- If the render is obviously wrong, do NOT report success. Iterate: identify the specific problem, fix it, re-render, re-check.
A render passing every numerical check (object count, vertex count, file size, no error messages) can still look completely wrong. The user only sees the picture. Make sure the picture matches the request before declaring done.
Set viewport to Material Preview mode (last step before reporting)
The user is often looking at Blender's viewport, not the rendered file. Blender defaults the viewport to Solid shading mode which ignores all materials and shows everything as flat grey. After scene assembly, switch the viewport to Material Preview so the user actually sees the materials they got:
import bpy
for area in bpy.context.screen.areas:
if area.type == 'VIEW_3D':
for space in area.spaces:
if space.type == 'VIEW_3D':
space.shading.type = 'MATERIAL' # or 'RENDERED' for full quality
space.shading.use_scene_lights = True
space.shading.use_scene_world = True
Skip this only when the user has explicitly asked you to leave the viewport alone.
Real-world dimension lookup
Before sizing any subject from natural language, consult references/common-object-dimensions.md. It lists realistic proportions for common requests:
| Subject | Total | Notes |
|---|---|---|
| One-handed sword | ~95-100 cm long | Blade 78cm × 4.5cm × 0.8cm; guard 20cm × 2.5cm; grip 13cm; pommel 5.6cm |
| Chair | seat ~45cm × 45cm × 4cm | Seat height 45cm; back ~45cm tall |
| Bottle | 25-30cm tall | Body ø8-10cm; neck ø2-3cm |
The full reference list lives in references/common-object-dimensions.md. Do not guess.
Prerequisites — always check first
Before any work, verify:
-
Blender MCP is reachable. Use the selected backend's scene query from
references/mcp-backends.md. If it cannot connect:"Start the selected backend's add-on socket and matching MCP client process, then re-run. Official MCP requires Blender 5.1+."
Stop and ask the user to fix this.
-
Scene state.
get_scene_inforeturns the current objects. Decide:- Empty scene? → Start fresh; build from primitives.
- Existing objects? → Operate on them; do NOT delete unless asked.
- Default cube only? → Probably safe to delete (
bpy.ops.object.delete()).
-
The user's actual request. If ambiguous, ask one question. Otherwise proceed with sensible defaults.
Intent → sub-skill routing table
For each intent the user expresses, load (with the host's file-reading tool) the matching sub-skill's SKILL.md and follow its patterns. Multiple intents = chain multiple sub-skills.
| User intent (paraphrased) | Load these sub-skills | Order |
|---|---|---|
| "Make a 3D model of X" | blender-modeling | 1st |
| "From this wireframe drawing" | wireframe-to-3d | 1st |
| "Use these materials / make it look like X" | blender-materials | After modeling |
| "Light it / studio setup / cinematic" | blender-lighting | After geometry exists |
| "Hero shot / camera angle / DoF" | blender-cameras | After lighting |
| "Render it / produce an image" | blender-rendering | Last visual step |
| "Animate / move / rotate over time" | blender-animation | After geometry |
| "Export as glTF / FBX / OBJ / for web / for Unity" | blender-export | Final step |
| "Set up a scene / production-quality result" | blender-pro-workflow | First — guides everything |
| "I'm new / not sure where to start" | blender-pro-workflow | First |
| "This is sub-par / still wrong / same issue again" | quality-refinement-autoloop, then blender-skill-harmonizer | First — learn, sanitize, patch, then retry |
| "Match these templates / wireframes / textures exactly" | blender-skill-harmonizer, then reference-specific fit skills | First — establish source-of-truth gates |
Multi-intent example: "Model a sword with materials, light it dramatically, and export as glTF" →
blender-pro-workflow(sequencing strategy)blender-modeling(sword geometry)blender-materials(steel + leather grip)blender-lighting(dramatic 1-point or rim setup)blender-export(glTF settings)
Pro assembly order (when in doubt)
This order minimizes rework. When the user gives a multi-step request, follow it:
- Reference + plan — note the goal.
- Block-out — primitives + camera + composition. Cheapest to iterate.
- Camera lock — pick focal length, frame the shot.
- Light v1 — three-point (key/fill/rim) before any material work. Light defines mood.
- Refine geometry — replace primitives with real models.
- Materials v1 — flat colors first, get values right.
- Light v2 — color + ratios.
- Detail pass — only after the above is right.
- Final render — production samples + denoise.
- Composite — color grade, glare, vignette.
- Export — for the target platform.
Source: references/assembly-order.md (deeper rationale).
Code-execution rules — non-negotiable
When emitting Python for the selected backend's code-execution tool:
- Each call is a fresh namespace. Only
bpyis pre-imported; re-importmath,bmesh,numpy, etc. each call. - Identify objects by stable name, never by Python variable.
bpy.data.objects['GEO-sword']works across calls; asword = ...assignment does not. - Check backend response status as well as stdout. On official MCP assign a JSON-serializable
resultdict; print-only recipes remain supported. Print structured output so you can parse it back. End each chunk withprint(f"...")reporting what changed (object names, vertex counts, file paths). - Chunk the work. 180-second timeout per call. Don't dump 500 lines in one call — split into ~5–20-line chunks.
- Use Blender Studio naming conventions for everything you create:
GEO-,MAT-,LGT-,CAM-,ARM-,COL-. Never leave anything asCube.027.
Standard skeleton for every operation
import bpy
# (re-import other modules here as needed)
# 1. Scope: identify or create objects by NAME
obj = bpy.data.objects.get('GEO-target') or bpy.data.objects.new('GEO-target', None)
# 2. Do the work
# ...
# 3. Report
print(f"done:GEO-target {len(obj.data.vertices) if obj.data else 0}")
Naming conventions (apply to everything you create)
| Prefix | Meaning |
|---|---|
GEO- | Geometry / mesh objects |
MAT- | Materials |
LGT- | Lights |
CAM- | Cameras |
ARM- | Armatures (rigs) |
COL- | Collections |
WGT- | Custom bone shapes / widgets |
Suffix .L / .R for left/right. Examples: GEO-sword_blade, MAT-steel_brushed, LGT-key.
Validation rule of thumb
After significant work, call mcp__blender__get_scene_info and verify:
- Expected objects exist with correct names.
- Object counts make sense (no runaway duplication).
- Polycount roughly matches target.
Before reporting success on a render or export, confirm the file actually exists (use the host's shell tool: ls -la /path/to/output).
When to load deeper references
references/assembly-order.md— the canonical scene-assembly sequence, time budgets, recovery patterns. Load when planning a multi-step pipeline or when the user asks "what's the right order?".references/intent-routing.md— fuller intent-to-skill mapping with edge cases. Load when the request is ambiguous and you need to disambiguate.references/code-execution-rules.md— detailed rules forexecute_blender_code(namespace, timeouts, stdout capture). Load when tracking down execution errors.
Reporting back to the user
When work is done, report concretely:
- ✅ Created: list objects + polycounts.
- ✅ Lit: list lights + their roles.
- ✅ Rendered: file path + size + dimensions + render time.
- ⚠️ Warnings: any auto-decimation, naming conflicts, fallback materials.
Example:
Created
GEO-sword_blade(1 240 verts),GEO-sword_grip(320 verts).
Materials:MAT-steel_brushed,MAT-leather_dark.
Lit withLGT-key(warm 3200K),LGT-fill(cool 5500K),LGT-rim(cool blue).
Rendered to/tmp/sword_hero.png(1920×1080, 2.3 MB, 38 s with 256 samples + OptiX denoise).
Failure modes — what to do when…
| Problem | Action |
|---|---|
| MCP timeout | Break the failing chunk into smaller pieces |
Code execution error: <line> | Read the error; fix that one line; retry |
| Object not found in next call | You used a Python var instead of bpy.data.objects['name'] |
| Render took too long | Reduce samples, enable adaptive sampling, lower resolution |
| File not at expected path | Use absolute paths; verify with the shell tool ls |
| Material looks wrong after export | You used non-Principled-BSDF nodes; rebuild material with Principled only |
'Action' object has no attribute 'fcurves' | Blender 5.x layered Actions; walk action.layers[].strips[].channelbags[].fcurves instead. See blender-animation Recipe 3 for the compat helper. |
BLENDER_EEVEE_NEXT rejected | Blender 5.x renamed it back to BLENDER_EEVEE. See blender-rendering Recipe 3 for the try/except fallback. |
KeyError: 'Subsurface IOR' (or other input names) | Blender 5.x marks some BSDF inputs enabled=False (currently Weight, Subsurface IOR); they're reachable by iteration but not string-key lookup. See blender-materials Recipe 9 for the set_input helper. |
Error: Cannot render, no camera | scene.camera is None. Always run the ensure_camera() guard before any render — see blender-rendering Recipes 5 / 6. The orchestrator must check this before chaining to render even if the user's prompt didn't ask for a camera explicitly. |
| User reports "scene is grey / no materials visible" while looking at Blender's viewport | Blender viewport defaults to Solid shading mode which ignores materials. The render is correct; only the viewport looks grey. After every scene assembly, set viewport to Material Preview: space.shading.type = 'MATERIAL'; space.shading.use_scene_lights = True; space.shading.use_scene_world = True |
| User reports "materials look flat / no texture" | Flat PBR colors lack surface variation. Add procedural textures (Noise/Voronoi → ColorRamp → Roughness or Bump) for steel scratches, hammered metal, leather grain, etc. See blender-materials Recipe 12 (procedural wood) for the pattern. |
| Subject looks wrongly proportioned (e.g. blade too short, chair too narrow) | The orchestrator skipped the dimension lookup. Always read references/common-object-dimensions.md BEFORE generating modeling code. Don't guess. |
| User asks for a "human" / "character" / "face" / "person" | Pure-recipe primitives produce a recognisable silhouette only, NOT a human face. Suggest one of: (a) mcp__blender__download_polyhaven_asset / download_sketchfab_model / generate_hyper3d_model_via_text for an actual human base mesh, then chain materials + lighting + render; (b) commission a Blender character artist (see prompts/04-blender-workflow.md). Do NOT pretend a sphere-with-features looks human — it doesn't. See references/common-object-dimensions.md "Characters / avatars" section. |
| Elongated subject renders as a thin pole instead of a recognisable shape | Camera viewing the thin axis of an elongated object. Rotate the object so its broad axis faces the camera. See blender-modeling "Critical: axis orientation for elongated objects". |
| Blade/spike has a "chiseled flat" tip instead of a point | Top vertices were scaled toward zero but not merged. Use the proper tapering recipe in blender-modeling ("Critical: tapering to a point") — collapse top verts to centerline AND remove_doubles. |
| Coloured glass renders flat/metallic instead of "glass-like" | Tint set on Base Color of Principled BSDF only. Real coloured glass needs Volume Absorption for depth-based tint. See blender-materials Recipe 6b. Also: Roughness=0.0 produces mirror-flat highlights that look metallic — use 0.02–0.05 instead. |
| Glass renders black on the inside | transmission_bounces too low. Default 12 is insufficient for thick or layered glass. Set scene.cycles.transmission_bounces = 24. |
What this skill is NOT for
- Heavy custom GPU work / writing a render engine (use Blender's existing engines)
- Real-time game logic (use Unity / Unreal directly)
- Sculpting strokes from natural language (sculpting is gestural; use brushes interactively)
- Things outside Blender's capabilities (CAD precision modeling — use FreeCAD; CFD simulation — use Blender's Mantaflow only for VFX-quality, not engineering)
When the user asks for these, redirect them politely and explain.
FAQ
What does the text-to-blender skill do?
Drive Blender from natural language: create or edit 3D models, materials, lighting, cameras, renders, animation, and exports through Blender MCP. Route complete scenes to domain skills and wireframe/reference requests to reconstruction skills. Also use for 3D requests that do not name Blender. Requires a configured official or ahujasid MCP backend.
How do I install text-to-blender?
Run npx skills add https://github.com/roble3/cc-blender-skill --skill text-to-blender in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/text-to-blender/ (personal) or .claude/skills/text-to-blender/ (project).
Which AI agents can use text-to-blender?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is text-to-blender safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains text-to-blender?
It is published by roble3 in roble3/cc-blender-skill. It has 1,105 recorded installs.
More from roble3/cc-blender-skill
blender-modeling
roble3/cc-blender-skill
Create and edit 3D meshes in Blender — primitives, hard-surface modeling, mesh operators, modifier stacks (Bevel, Subdivision, Boolean, Mirror, Array, Solidify), bmesh-level edits, retopology basics. Use whenever the user asks to "make/model/create/build a 3D object", "shape/sculpt this", "add a cube/sphere/cylinder/etc.", "extrude/inset/bevel this face", "add a modifier", or any geometry-creation request that isn't a wireframe trace. Make sure to use this skill even if the user does not say "model" — also covers "make a sword", "build a chair", "add a door", "carve out a hole". Pairs with blender-materials for look-dev and blender-pro-workflow for full pipelines.
blender-materials
roble3/cc-blender-skill
Create and assign PBR materials in Blender via Principled BSDF — metals, glass, plastic, fabric, skin, organics. Covers physically-based material recipes with real-world values, Coat layer (varnish/car paint), Sheen (cloth), Subsurface scattering (skin/wax), Transmission (glass), and procedural patterns (wood grain, marble, fabric weave). Use whenever the user asks to "make it look like X material", "give it a metallic finish", "apply a wood texture", "make this glass / plastic / brushed steel / leather / skin", or any look-development request. Make sure to use this skill even if the user does not say "material" — also covers "make it shiny", "matte finish", "looks like copper", "rough surface". Works with any geometry; pairs with blender-lighting (materials only look right under proper lighting).
blender-export
roble3/cc-blender-skill
Export Blender scenes to glTF/GLB (web/AR), FBX (game engines), OBJ (universal), USD (VFX pipelines), STL (3D printing). Includes Unreal collision hulls and Multires normal-map baking for low-poly export, per-format settings, embed/unpack textures, axis conversion, polygon optimization (Decimate), and target-platform validation. Use whenever the user asks to "export this", "save as glTF / FBX / OBJ / STL / USD", "package for Unity / Unreal / Three.js / web / AR / 3D print", or any output format conversion. Make sure to use this skill even if the user does not say "export" — also covers "package this for the web", "make it work in Unity", "send to Unreal", "save for 3D printing".
blender-rendering
roble3/cc-blender-skill
Render Blender scenes with the right engine and settings — Cycles for photoreal, EEVEE for speed/stylized, sample counts, denoising (OptiX/OIDN), light path tuning, color management (AgX/Filmic), file output (PNG/EXR/MP4), animation rendering. Use whenever the user asks to "render this", "produce an image", "render a frame / animation", "make a final image", "save the render", or any output-generation request. Make sure to use this skill even if the user does not say "render" — also covers "make a picture", "save the result", "produce a final image", "export as image".
blender-animation
roble3/cc-blender-skill
Animate objects, cameras, lights, and properties in Blender — keyframes, F-curves, easing (Bezier, Linear, Sine, Bounce, Elastic), shape keys (morph targets / blendshapes / visemes), drivers (Python expressions on properties), NLA actions for reuse and layering. Use whenever the user asks to "animate this", "make it move / rotate / scale over time", "add keyframes", "loop / oscillate", "shape key / morph / blendshape", "visemes for lip sync", or any time-based property change. Make sure to use this skill even if the user does not say "animate" — also covers "spin it slowly", "make it wave", "fade in / out", "pulse", "facial expression".
blender-pro-workflow
roble3/cc-blender-skill
End-to-end production workflow guidance for Blender — the order to assemble scenes (block-out → camera → light → forms → materials → detail → render → composite → export), critique protocols, time budgets, and recovery patterns. Use whenever the user asks to "make a complete scene / hero shot / production-quality render", "what's the right order to do this", "set up a full pipeline", or has a multi-step request crossing modeling + lighting + materials + rendering. Make sure to use this skill for any request that spans multiple phases of 3D work, even if the user does not say "workflow" — also covers "make a final image of X", "produce a hero render", "professional-looking result".
Popular ai & agents skills
google-agents-cli-publish
google/agents-cli
This skill should be used when the user wants to "publish an agent", "publish my ADK agent", "register an agent with Gemini", "publish to Gemini" (formerly Gemini Enterprise), or needs guidance on the agents-cli publish gemini command. Also use when the user wants to "manage agents in Agent Registry", "list/update/delete registered agents", or "register an MCP server". Covers ADK vs A2A registration modes, programmatic and interactive usage, flag reference, auto-detection from deployment metadata, Agent Registry fleet management, and troubleshooting. Part of the agents-cli skills suite. Do NOT use for deployment (use google-agents-cli-deploy).
google-agents-cli-eval
google/agents-cli
This skill should be used when the user wants to "run an evaluation", "evaluate my agent", "evaluate my ADK agent", "write an eval dataset", "analyze eval failures", "compare eval results", "optimize agent", or needs guidance on the Gemini platform eval methodology and the Quality Flywheel. Covers eval metrics, dataset schema, LLM-as-judge scoring, and common failure causes. Applies to any agents-cli project, whatever framework the agent is written in. Do NOT use for agent API code patterns (ADK: use google-agents-cli-adk-code), deployment (use google-agents-cli-deploy), or project scaffolding (use google-agents-cli-scaffold).
skill-creator
anthropics/skills
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
codex-pet
prime-skills/runcomfy-agent-skills
Codex Pet generator on RunComfy. Build a Codex-compatible Codex Pet spritesheet.webp + pet.json from a single reference image, drop it into ${CODEXHOME:-$HOME/.codex}/pets/ / and Codex picks it up as a custom Codex Pet next to the 8 built-ins. This skill produces the exact Codex Pet atlas Codex expects (1536x1872 PNG/WebP, 8 cols x 9 rows, 192x208 cells, 9 animation states — idle, running-right, running-left, waving, jumping, failed, waiting, running, review). Calls OpenAI GPT Image 2 edit ONCE via the local RunComfy CLI as runcomfy run openai/gpt-image-2/edit to produce a canonical Codex Pet pose, then assembles all 9 animation rows programmatically with ImageMagick micro-transforms — no Codex Pro, no $imagegen, no OPENAIAPIKEY required, only RUNCOMFYTOKEN. Triggers on "codex pet", "create codex pet", "make codex pet", "hatch codex pet", "/hatch image", "desktop pet codex", "codex pets", "spritesheet.webp", or any explicit ask to build a custom pet for OpenAI Codex.
full-output-enforcement
leonxlnx/taste-skill
Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.
executing-plans
obra/superpowers
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available