blender-automation
Guía experta y patrones de producción para automatización headless de Blender (v5.x/4.x) mediante Python (bpy).
Skill by JarBees 3D Studio
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/ifernandez89-blender-automation
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/blender-automation
What's inside
- Skill name
blender-automation- Description
- Guía experta y patrones de producción para automatización headless de Blender (v5.x/4.x) mediante Python (bpy). Cubre inspección de mallas GLB/glTF, manipulación de árboles de nodos Principled BSDF, máscaras procedurales (musgo, pátina, oquedades), modificadores no destructivos, renderizado de estudio EEVEE y exportación validada.
- License
- MIT
- Metadata
- author: JarBees 3D Studio · version: 1.0.0
- Instructions
- 179 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Blender Headless Automation & Asset Pipeline (`bpy`)
Guía técnica especializada para operar Blender 5.x / 4.x en modo headless (`blender -b -P script.py`) dentro del ecosistema JarBees, transformando modelos 3D existentes (`.glb`) mediante Python determinista sin depender de generación de geometría descontrolada con IA.
---
## 1. Reglas de Ejecución Headless
### 1.1 Invocación por Línea de Comandos
Blender headless se invoca siempre con `-b` (background) y `-P` (ejecutar script Python):
```powershell
& "C:\Program Files\Blender Foundation\Blender 5.2\blender.exe" -b --python-exit-code 1 -P script.py -- --input "model.glb" --output "model_weathered.glb"
```
* **`--python-exit-code 1`**: Garantiza que si el script de Python lanza una excepción, el proceso Blender termine con código de error `1`, permitiendo al backend capturar fallos.
* **Separador `--`**: Todos los argumentos posteriores al `--` son accesibles en Python mediante `sys.argv[sys.argv.index('--') + 1:]`.
### 1.2 Limpieza de Escena Inicial Obligatoria
Al iniciar en modo headless, Blender puede cargar la escena de fábrica (cubo, cámara, luz). Siempre resetear la escena antes de importar:
```python
import bpy
# Limpiar objetos existentes de forma segura
bpy.ops.wm.read_factory_settings(use_empty=True)
```
---
## 2. Inspección de Modelos GLB / glTF
Antes de aplicar cualquier modificación, se debe inspeccionar el modelo para conocer sus dimensiones, topología y slots de materiales:
```python
import bpy
from mathutils import Vector
def inspect_scene(glb_path: str) -> dict:
bpy.ops.wm.read_factory_settings(use_empty=True)
bpy.ops.import_scene.gltf(filepath=glb_path)
mesh_objects = [obj for obj in bpy.data.objects if obj.type == 'MESH']
total_vertices = sum(len(obj.data.vertices) for obj in mesh_objects)
total_triangles = sum(len(obj.data.polygons) for obj in mesh_objects)
# Bounding Box unificado
min_coord = Vector((float('inf'), float('inf'), float('inf')))
max_coord = Vector((float('-inf'), float('-inf'), float('-inf')))
for obj in mesh_objects:
for corner in obj.bound_box:
world_corner = obj.matrix_world @ Vector(corner)
min_coord.x = min(min_coord.x, world_corner.x)
min_coord.y = min(min_coord.y, world_corner.y)
min_coord.z = min(min_coord.z, world_corner.z)
max_coord.x = max(max_coord.x, world_corner.x)
max_coord.y = max(max_coord.y, world_corner.y)
max_coord.z = max(max_coord.z, world_corner.z)
dimensions = max_coord - min_coord
center = (max_coord + min_coord) / 2.0
return {
"meshes": [obj.name for obj in mesh_objects],
"materials": [mat.name for mat in bpy.data.materials if mat],
"total_vertices": total_vertices,
"total_triangles": total_triangles,
"bounding_box": {
"width": dimensions.x,
"depth": dimensions.y,
"height": dimensions.z,
"center": [center.x, center.y, center.z]
}
}
```
---
## 3. Manipulación de Materiales PBR (Shader Nodes en Principled BSDF)
### 3.1 Pátina de Desgaste y Musgo Procedural
Para aplicar musgo o suciedad sin destruir la textura original:
1. Localizar el nodo `BSDF_PRINCIPLED`.
2. Conservar el mapa base (`TEX_IMAGE`) conectado a `Base Color`.
3. Intercalar un nodo `ShaderNodeMixRGB` (o `ShaderNodeMix` en Blender 4/5):
* **Color A**: La textura original.
* **Color B**: Color de musgo / pátina (ej. `#3a5323` verde musgo, `#2e251a` tierra).
* **Fac**: Una combinación de:
- Vector Normal hacia arriba (+Z) para musgo que crece en superficies horizontales superiores.
- Gradiente de Altura Z (para concentrar suciedad y humedad en la base).
- Ruido procedural (`ShaderNodeTexNoise`) para bordes orgánicos e irregulares.
```python
def add_procedural_moss(mat, moss_color=(0.22, 0.35, 0.12, 1.0), coverage=0.4):
if not mat.use_nodes:
mat.use_nodes = True
tree = mat.node_tree
nodes = tree.nodes
links = tree.links
principled = next((n for n in nodes if n.type == 'BSDF_PRINCIPLED'), None)
if not principled:
return
# Obtener lo que esté conectado a Base Color
original_input = None
if principled.inputs['Base Color'].is_linked:
original_input = principled.inputs['Base Color'].links[0].from_socket
# Crear nodo Mix (Color)
mix_node = nodes.new(type='ShaderNodeMix')
mix_node.data_type = 'RGBA'
mix_node.blend_type = 'MIX'
# Crear nodo de Textura de Ruido para borde orgánico
noise_node = nodes.new(type='ShaderNodeTexNoise')
noise_node.inputs['Scale'].default_value = 15.0
noise_node.inputs['Detail'].default_value = 4.0
# Crear ColorRamp para contrastar la máscara
ramp_node = nodes.new(type='ShaderNodeValToRGB')From ifernandez89/productos_crud_bkd, MIT.
More from ifernandez89/productos_crud_bkd
- 0.561score
threejs-graphics
JarBees Graphic Studio
Guía experta y patrones de producción para Three.js r165 en entornos WebGL 2.0 y headless Playwright.
SkillAFreshness: AClaude Code +9 - 0.474score
playwright-best-practices
currents.dev
Use when writing Playwright tests, fixing flaky tests, debugging failures, implementing Page Object Model, configuring CI/CD, optimizing performance, mocking…
SkillCFreshness: CClaude Code +9 - 0.469score
bun
ifernandez89
Use when building, testing, and deploying JavaScript/TypeScript applications.
SkillCFreshness: CClaude Code +9 - 0.469score
prisma-cli
prisma
Prisma CLI commands reference covering all available commands, options, and usage patterns.
SkillCFreshness: CClaude Code +9 - 0.445score
frontend-design
ifernandez89
Create distinctive, production-grade frontend interfaces with high design quality.
SkillCFreshness: CClaude Code +9 - 0.445score
frontend-design
ifernandez89
Create distinctive, production-grade frontend interfaces with high design quality.
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 18, 2026 (10 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1.0.0
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Cite this page
blender-automation skill. Agent Mart. https://agentmart.dev/skills/ifernandez89-blender-automation (last updated 2026-10-24)