claude-code-arcane 2.6.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  # Skills Catalog — Claude Code Arcane
2
2
 
3
- Los 431 skills disponibles para proyectos consumidores, organizados por division.
3
+ Los 437 skills disponibles para proyectos consumidores, organizados por division.
4
4
 
5
- La tabla cubre 389: hay 42 skills instalables que todavia no estan catalogados aca. Un test de CI (`src/__tests__/doc-counts.test.ts`) verifica que estos numeros coincidan con el filesystem y que el header de cada seccion coincida con sus filas.
5
+ La tabla cubre 395: hay 42 skills instalables que todavia no estan catalogados aca. Un test de CI (`src/__tests__/doc-counts.test.ts`) verifica que estos numeros coincidan con el filesystem y que el header de cada seccion coincida con sus filas.
6
6
 
7
7
  ## Como ejecutar un skill
8
8
 
@@ -104,6 +104,21 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
104
104
 
105
105
  ---
106
106
 
107
+ ## Blender (5 skills)
108
+
109
+ Instalables con el perfil `blender`. El MCP de Blender es **recomendado, no se instala desde este
110
+ repo**: la comparacion entre el de la comunidad y el oficial esta en `/blender-context`.
111
+
112
+ | Skill | Descripcion | Uso |
113
+ |-------|-------------|-----|
114
+ | `/blender-context` | Foundation: version, MCP recomendado, headless, unidades y ejes, estructura de assets | `[--verify]` |
115
+ | `/blender-modeling` | Presupuesto de tris, topologia, stack de modifiers, booleans, LODs, bmesh | `[slug] [--budget <tris>] [--lod]` |
116
+ | `/blender-materials` | Principled BSDF, UVs y lightmap UV1, bake, color space, normal maps OpenGL vs DirectX | `[slug] [--bake] [--target unity\|ue5\|web]` |
117
+ | `/blender-animation` | Armature y naming, weights, bake de constraints, NLA como clips, root motion, retarget Mixamo | `[slug] [--retarget <fbx>] [--bake]` |
118
+ | `/blender-export` | Formato y settings, export headless, y validacion automatica del glTF resultante | `[slug] [--target unity\|ue5\|web] [--budget-tris <n>]` |
119
+
120
+ ---
121
+
107
122
  ## Unreal (30 skills)
108
123
 
109
124
  Instalables con el perfil `unreal-dev`. Procedencia y licencias en `ATTRIBUTION.md`.
@@ -561,7 +576,7 @@ Instalables con el perfil `unreal-dev`. Procedencia y licencias en `ATTRIBUTION.
561
576
 
562
577
  ---
563
578
 
564
- ## Freelance (8 skills)
579
+ ## Freelance (9 skills)
565
580
 
566
581
  Perfil `+freelance`. Reutiliza ademas 6 skills ya catalogados: `/master-profile`, `/portfolio-site`, `/cold-outreach`, `/job-outcome` (Job Hunt), `/contract-and-proposal-writer` (Business) y `/estimate` (Agile). Comparte el career workspace con `+job-hunt`: una propuesta es una aplicacion con `tipo: freelance`.
567
582
 
@@ -575,6 +590,7 @@ Quien consiga una API key propia la activa poniendo una variable de entorno: `ke
575
590
  |-------|-------------|-----|
576
591
  | `/freelance-hunt` | Orquestador: extiende el career workspace con contratos y ledger de Connects, define piso de tarifa y capacidad, y rutea | `[setup\|status\|next]` |
577
592
  | `/freelance-profile` | Perfil de la plataforma: titulo de nicho, primeros 250 caracteres del overview, portfolio items, specialized profiles y tarifa derivada del piso | `[audit\|title\|overview\|portfolio\|rate]` |
593
+ | `/fiverr-gig` | Lado de la oferta en Fiverr: titulo I will y tags, los tres packages separados por alcance, gallery, FAQ y precio sobre el piso neto | `[audit\|title\|packages\|gallery\|faq\|price]` |
578
594
  | `/freelance-scan` | Scorea ofertas (fit tecnico + viabilidad economica + probabilidad de que la oferta exista) con dedup entre corridas. `search` sobre fuentes publicas sin API key (GetOnBrd, Himalayas), `web` llega a los marketplaces via WebSearch + triage de ruido SEO, `market` para tarifas, `keys` para las fuentes con credencial propia | `[search\|web\|market\|keys\|sources\|post pegado]` |
579
595
  | `/client-screen` | Riesgo del cliente antes de gastar Connects: payment verificado, hire rate, brecha presupuesto/alcance, red flags. Registra el descarte tambien | `[job-url\|nota\|post]` |
580
596
  | `/freelance-proposal` | Propuesta que sobrevive la vista de lista (2 primeras lineas) + bid sobre el piso neto: fijo vs hora, buffer de riesgo, comision | `[nota\|job-url]` |
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## What is Arcane?
4
4
 
5
- Arcane is a configuration harness for [Claude Code](https://docs.anthropic.com/en/docs/claude-code). It provides a curated library of **431 skills**, **109 agents**, **17 hooks**, and **29 rules** that you selectively deploy into any project. Instead of shipping everything to every project (wasting tokens and degrading performance), you pick a **profile** that matches your stack and only the relevant tools get installed.
5
+ Arcane is a configuration harness for [Claude Code](https://docs.anthropic.com/en/docs/claude-code). It provides a curated library of **437 skills**, **109 agents**, **17 hooks**, and **30 rules** that you selectively deploy into any project. Instead of shipping everything to every project (wasting tokens and degrading performance), you pick a **profile** that matches your stack and only the relevant tools get installed.
6
6
 
7
7
  ## Table of Contents
8
8
 
@@ -206,7 +206,7 @@ All profiles are equal — pick any combination that fits your work. They are gr
206
206
  | **Backend** | `backend-ts`, `backend-go`, `backend-dotnet`, `backend-nestjs`, `backend-nextjs` |
207
207
  | **Frontend & Design** | `frontend`, `design` |
208
208
  | **Mobile** | `mobile`, `flutter`, `android-native`, `ios-native` |
209
- | **Gamedev** | `unity-dev`, `unity-design`, `unreal-dev`, `visual-novel`, `audio`, `meshy` |
209
+ | **Gamedev** | `unity-dev`, `unity-design`, `unreal-dev`, `visual-novel`, `audio`, `meshy`, `blender` |
210
210
  | **Platform & Quality** | `infra`, `database`, `security`, `testing`, `ai` |
211
211
  | **Project Management** | `agile`, `jira`, `clickup`, `integrations` |
212
212
  | **Business** | `business`, `clevel`, `finance`, `marketing`, `ecommerce`, `regulatory` |
@@ -515,7 +515,7 @@ Yes, and it's recommended. This way everyone on the team gets the same Claude Co
515
515
 
516
516
  ### How many tokens does a profile consume?
517
517
 
518
- Each skill adds ~30-100 tokens to the system prompt. A typical stack profile (20-30 skills) adds ~1-2k tokens. The core profile adds ~500 tokens. Compare that to loading all 431 skills, which is why selective deploy matters.
518
+ Each skill adds ~30-100 tokens to the system prompt. A typical stack profile (20-30 skills) adds ~1-2k tokens. The core profile adds ~500 tokens. Compare that to loading all 437 skills, which is why selective deploy matters.
519
519
 
520
520
  ### Why replace instead of merge on install?
521
521
 
@@ -19,6 +19,42 @@ main() {
19
19
  echo "BLOCK: empty commit message not allowed." >&2
20
20
  exit 2
21
21
  fi
22
+
23
+ validate_3d_exports
24
+ }
25
+
26
+ # Gate de exports 3D. No-op salvo que el perfil blender este instalado y haya
27
+ # .glb/.gltf staged: bloquea solo fallas inequivocas (contenedor roto, sin UVs,
28
+ # escala de conversion sin aplicar, texturas fuera del .glb). El presupuesto de
29
+ # tris es por proyecto, asi que aca no se pasa y queda como aviso, no como block.
30
+ validate_3d_exports() {
31
+ local VALIDATOR=".claude/skills/blender-export/scripts/validate_gltf.py"
32
+ [[ -f "$VALIDATOR" ]] || return 0
33
+
34
+ local STAGED
35
+ STAGED=$(git diff --cached --name-only --diff-filter=ACM 2>/dev/null | grep -iE '\.(glb|gltf)$') || true
36
+ [[ -z "$STAGED" ]] && return 0
37
+
38
+ local PY
39
+ PY=$(command -v python3 2>/dev/null || command -v python 2>/dev/null) || return 0
40
+ [[ -z "$PY" ]] && return 0
41
+
42
+ local FAILED="" OUT
43
+ while IFS= read -r FILE; do
44
+ [[ -n "$FILE" && -f "$FILE" ]] || continue
45
+ if ! OUT=$("$PY" "$VALIDATOR" "$FILE" 2>&1); then
46
+ FAILED+="$OUT"$'
47
+ '
48
+ fi
49
+ done <<< "$STAGED"
50
+
51
+ if [[ -n "$FAILED" ]]; then
52
+ echo "BLOCK: hay exports 3D staged que no pasan la validacion." >&2
53
+ echo "$FAILED" >&2
54
+ echo "Corregir en Blender y volver a exportar (ver /blender-export), o sacar el archivo del stage." >&2
55
+ exit 2
56
+ fi
22
57
  }
58
+
23
59
  main
24
60
  exit 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-arcane",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "description": "Skills, agents, hooks and rules for Claude Code — installable via npx claude-code-arcane",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,49 @@
1
+ name: blender
2
+ description: "Blender para assets de juego — modelado con presupuesto de tris y topologia, materiales/texturas con bake y color space, rigging y animacion bakeada, y export validado a Unity/UE5/web con validador de glTF stdlib"
3
+ category: gamedev
4
+
5
+ skills:
6
+ # Foundation — el resto de los blender-* depende de este
7
+ - blender-context
8
+ # Los tres ejes de produccion
9
+ - blender-modeling
10
+ - blender-materials
11
+ - blender-animation
12
+ # Salida: cierra el pipeline hacia el engine
13
+ - blender-export
14
+ # Reusada de la libreria compartida
15
+ - asset-audit
16
+
17
+ rules:
18
+ universal:
19
+ - blender-pipeline
20
+ gamedev:
21
+ []
22
+
23
+ agents:
24
+ # Blender se instala junto a unity-*, unreal-dev o meshy, que ya traen
25
+ # agents/game/. Declararlo aca copiaria los 30 agentes de gamedev a quien
26
+ # instale +blender suelto para trabajar assets sin engine.
27
+ []
28
+
29
+ permissions:
30
+ allow:
31
+ # Blender headless es el camino por default del perfil
32
+ - "Bash(blender --version)"
33
+ - "Bash(blender --background*)"
34
+ - "Bash(blender -b *)"
35
+ # Validador de export — stdlib, no instala nada
36
+ - "Bash(python *validate_gltf.py*)"
37
+ - "Bash(python3 *validate_gltf.py*)"
38
+ # Compresion de glb para web, on-demand via npx
39
+ - "Bash(npx --yes @gltf-transform/cli*)"
40
+ - "Bash(npx @gltf-transform/cli*)"
41
+ # Verificacion de LFS antes de commitear binarios
42
+ - "Bash(git check-attr*)"
43
+ - "Bash(git lfs version)"
44
+ - "Glob(assets/3d/**)"
45
+ - "Grep(assets/3d/**)"
46
+ deny:
47
+ # Los backups de Blender no entran al repo
48
+ - "Write(**/*.blend1)"
49
+ - "Write(**/*.blend2)"
@@ -6,6 +6,7 @@ skills:
6
6
  # Nucleo del perfil
7
7
  - freelance-hunt
8
8
  - freelance-profile
9
+ - fiverr-gig
9
10
  - freelance-scan
10
11
  - client-screen
11
12
  - freelance-proposal
@@ -0,0 +1,95 @@
1
+ # Blender Pipeline
2
+
3
+ Reglas para trabajar assets en Blender con destino a un engine o a la web. Aplican a cualquier
4
+ operacion que toque un `.blend` o exporte desde uno.
5
+
6
+ ## El MCP es opcional, el headless no
7
+
8
+ Hay dos formas de operar Blender desde Claude, y no son equivalentes:
9
+
10
+ | | MCP | Headless (`--background`) |
11
+ |---|---|---|
12
+ | Necesita Blender abierto | Si, con el addon conectado | No |
13
+ | Reproducible en CI | No | Si |
14
+ | Ve el estado de la escena | Si | Solo lo que el script consulta |
15
+ | Deja rastro en el repo | No | Si — el script queda versionado |
16
+
17
+ **Default: headless.** Un `.py` versionado que corre con `blender --background --python` es
18
+ auditable, repetible y no depende de que alguien tenga la ventana abierta. El MCP sirve para
19
+ explorar una escena que ya existe y para iterar visualmente, no para el paso automatizable.
20
+
21
+ Los dos MCP recomendados estan en `/blender-context`. **Ninguno de los dos se instala desde este
22
+ repo**: son addons de la instalacion de Blender del usuario.
23
+
24
+ ## Ejecuta Python sin sandbox
25
+
26
+ Tanto el MCP de la comunidad como el oficial corren el Python que genera el LLM **sin ninguna
27
+ barrera**. Consecuencias que no son negociables:
28
+
29
+ 1. **Nunca correrlo con cambios sin commitear** en el repo del proyecto. Si algo se rompe, la
30
+ unica marcha atras es git.
31
+ 2. Guardar el `.blend` antes de la primera operacion de la sesion.
32
+ 3. No apuntarlo a una maquina con material sensible ni a credenciales.
33
+ 4. Un script que borra (`bpy.data.*.remove`, `object.delete`) se muestra al usuario **antes** de
34
+ correrlo, siempre, incluso si lo pidio.
35
+
36
+ ## Ejes, escala y unidades
37
+
38
+ Verificar una vez por proyecto, anotarlo, no volver a pensarlo.
39
+
40
+ | Destino | Convencion | Al exportar desde Blender |
41
+ |---|---|---|
42
+ | Blender | Z-up, right-handed, 1 unidad = 1 m | — |
43
+ | glTF / GLB | Y-up, metros | El exporter convierte solo (`+Y up`) |
44
+ | Unity | Y-up, left-handed, 1 unidad = 1 m | glTF sale derecho; en FBX revisar el eje |
45
+ | UE5 | Z-up, left-handed, 1 unidad = 1 cm | Factor 100 |
46
+
47
+ Reglas duras:
48
+
49
+ - **Aplicar escala antes de exportar** (`Object → Apply → Scale`). Un objeto que sale con `scale`
50
+ distinto de 1 arrastra el problema al engine y rompe la fisica y el skinning.
51
+ - Origen al piso para props y personajes; al centro para objetos que rotan sobre si mismos.
52
+ - Un nodo con escala `100` o `0.01` en el archivo exportado es una conversion de unidades sin
53
+ aplicar, no una decision de diseno. Se corrige, no se documenta.
54
+
55
+ ## Topologia
56
+
57
+ - **Quads en todo lo que deforma.** Tris solo en geometria estatica. N-gons en nada que deforme.
58
+ - Edge loops en articulaciones, poles de 5 aristas o menos.
59
+ - Presupuesto de triangulos declarado **antes** de modelar, no medido despues.
60
+ - Un LOD generado con Decimate es un borrador. Para heroes va retopo a mano.
61
+
62
+ ## Materiales y texturas
63
+
64
+ - **Principled BSDF y nada mas** en lo que se exporta. Los nodos procedurales no sobreviven a
65
+ glTF ni a FBX: si el look depende de ellos, hay que bakearlo a textura.
66
+ - Color space: Base Color en sRGB; Normal, Roughness, Metallic y AO en **Non-Color**. Es el bug
67
+ mas comun y el mas silencioso.
68
+ - Normal maps: Blender, glTF y Unity usan OpenGL (+Y). **UE5 usa DirectX (-Y)**: hay que invertir
69
+ el canal verde o marcarlo en el import.
70
+ - Resoluciones potencia de dos. Texel density consistente entre assets del mismo set.
71
+ - Cantidad de materiales = draw calls. Atlas antes de sumar materiales.
72
+
73
+ ## Animacion
74
+
75
+ - **Los constraints no se exportan, los keyframes si.** Todo rig con IK, drivers o constraints se
76
+ bakea (`nla.bake` con visual keying) antes de exportar.
77
+ - Frame rate del `.blend` igual al del engine. Un mismatch se ve como animacion lenta o acelerada,
78
+ no como error.
79
+ - Huesos con sufijo `.L` / `.R` para que la simetria funcione.
80
+ - Root motion: hueso raiz en el origen. Decidir in-place vs root motion **antes** de animar.
81
+
82
+ ## Git
83
+
84
+ - `*.blend *.fbx *.glb *.gltf` por **Git LFS**. Verificar `git lfs version` antes de agregar las
85
+ entradas: peor que no tenerlas es tenerlas sin LFS instalado.
86
+ - `*.blend1` y `*.blend2` (backups de Blender) van al `.gitignore`, nunca al repo.
87
+ - Las texturas fuente (`.psd`, `.kra`, `.exr` de bake) por LFS; los `.png` finales tambien.
88
+
89
+ ## Integracion con el resto del stack
90
+
91
+ `asset-spec` define que asset hace falta → Meshy o modelado a mano lo produce → **Blender lo
92
+ limpia y lo exporta** → `asset-audit` valida el resultado en el proyecto.
93
+
94
+ Blender es el paso del medio, no el principio ni el final. Si el asset vino de `meshy-derive`, el
95
+ `.blend` que bajo es el punto de entrada; no se regenera desde Meshy para arreglar topologia.
@@ -2,7 +2,7 @@
2
2
  name: arcane-add
3
3
  description: "Add individual skills or entire profiles to the current Arcane installation without reinstalling."
4
4
  category: "arcane"
5
- argument-hint: "<skill-name|+profile>"
5
+ argument-hint: "[skill-name|+profile]"
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep
8
8
  ---
@@ -12,14 +12,31 @@ Add individual skills or entire profiles to the current Arcane installation with
12
12
 
13
13
  ## Arguments
14
14
 
15
- `/arcane-add <skill-name|profile-name> [skill2] [skill3] ...`
15
+ `/arcane-add [skill-name|+profile] [skill2] [skill3] ...`
16
16
 
17
17
  Examples:
18
+ - `/arcane-add` — no args: show what can be added and ask
18
19
  - `/arcane-add docker-setup` — add a single skill
19
20
  - `/arcane-add security-audit owasp-top10-check` — add multiple skills
20
21
  - `/arcane-add +security` — add all skills from the +security profile
21
22
  - `/arcane-add +database` — add all skills from the +database profile
22
23
 
24
+ ## Sin argumentos
25
+
26
+ Mismo criterio que el picker de `arcane install`: mostrar solo lo que **no** esta instalado y dejar
27
+ elegir. No listar los 400 skills.
28
+
29
+ 1. Read `.claude/arcane-manifest.json` (`profiles`, `installed_skills`)
30
+ 2. List `profiles/*.yaml` from the source, skip `core.yaml` and the ones already in `profiles`
31
+ 3. Print the remaining profiles grouped by their `category` field, in the order of
32
+ `CATEGORY_ORDER` (Backend, Frontend & Design, Mobile, Gamedev, Platform & Quality,
33
+ Project Management, Business, Personal, Utilities), each with its description
34
+ 4. Say how many individual skills are available on top of that (`/arcane-list` shows them)
35
+ 5. Ask which profiles or skills to add, then continue with the steps below
36
+
37
+ The CLI does the same thing interactively: `arcane add` with no args opens the wizard
38
+ (`src/wizard.ts` → `runAddWizard`).
39
+
23
40
  ## Steps
24
41
 
25
42
  1. Read `.claude/arcane-manifest.json` to find the `source` path
@@ -44,4 +61,14 @@ Added 3 skills:
44
61
  [skip] ci-cd-setup (already installed)
45
62
 
46
63
  Updated arcane-manifest.json
64
+ COMPLETE
47
65
  ```
66
+
67
+ Un skill que ya esta instalado se saltea, no se sobreescribe. Si el usuario quiere reemplazar una
68
+ copia modificada localmente, preguntar antes de escribir encima.
69
+
70
+ ## Next step
71
+
72
+ - `/arcane-status` — confirmar que el manifest quedo bien
73
+ - `/arcane-list` — ver que mas hay disponible
74
+ - `/arcane-remove` — deshacer si se agrego de mas
@@ -0,0 +1,167 @@
1
+ ---
2
+ name: blender-animation
3
+ description: "Rigging y animacion en Blender para engines: armature y naming de huesos, weights, constraints e IK que hay que bakear, FCurves, acciones y NLA como clips, root motion, retargeting de Mixamo, shape keys. Usar para: animar en blender, rig, armature, retarget mixamo, root motion, shape keys."
4
+ category: "gamedev"
5
+ argument-hint: "[asset-slug] [--retarget <fbx>] [--bake]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Bash, Write, Edit
8
+ ---
9
+ # blender-animation — Rig y animacion
10
+
11
+ Rig y animacion con destino a un engine. La regla que ordena todo el skill: **el engine recibe
12
+ keyframes, no rig.** Todo lo inteligente del rig existe para producir esos keyframes y despues
13
+ desaparece.
14
+
15
+ > Requiere `/blender-context`. Con geometria sin cerrar no vale la pena riggear: cada cambio de
16
+ > topologia invalida los weights.
17
+
18
+ ---
19
+
20
+ ## Phase 1: Que se exporta y que no
21
+
22
+ | En Blender | Al engine | Que hacer |
23
+ |---|---|---|
24
+ | Keyframes en huesos | **Se exportan** | Es el camino |
25
+ | Armature + weights | Se exporta | |
26
+ | Shape keys / morph targets | Se exportan | Verificar el limite del engine |
27
+ | **Constraints** (IK, Copy Rotation, Limit) | **No se exportan** | **Bakear** |
28
+ | Drivers | No se exportan | Bakear |
29
+ | Bone constraints de rig helper | No | Bakear y excluir los huesos helper |
30
+ | Modifiers animados | No | Bakear a shape keys o a keyframes |
31
+
32
+ Un rig con IK que se exporta sin bakear llega al engine con el personaje en rest pose y **sin
33
+ error visible**. Es el fallo mas comun y el mas confuso de diagnosticar.
34
+
35
+ ---
36
+
37
+ ## Phase 2: Armature
38
+
39
+ - Un solo armature por personaje, con el objeto en el origen y escala 1.
40
+ - **Naming con sufijo `.L` / `.R`** (`upper_arm.L`). Sin eso, mirror de poses y de weights no
41
+ funciona, y las herramientas de simetria tampoco.
42
+ - Jerarquia con raiz unica. Si el destino es UE5 y se quiere reusar animacion del mannequin, seguir
43
+ su nomenclatura desde el principio: renombrar despues es peor.
44
+ - **Bone roll** consistente: ejes de rotacion coherentes entre huesos simetricos, o las curvas de
45
+ animacion se vuelven ilegibles.
46
+ - Huesos helper y de control marcados de forma reconocible (prefijo, o su propia collection) para
47
+ poder excluirlos del export.
48
+
49
+ Diagnostico:
50
+
51
+ ```bash
52
+ blender --background <archivo.blend> --python-expr "
53
+ import bpy
54
+ for o in bpy.data.objects:
55
+ if o.type == 'ARMATURE':
56
+ bones = o.data.bones
57
+ print(f'{o.name}: bones={len(bones)} scale={tuple(o.scale)}')
58
+ print(' sin sufijo L/R:', [b.name for b in bones if not b.name.endswith(('.L','.R'))][:10])
59
+ for a in bpy.data.actions:
60
+ print(f'action {a.name}: frames={tuple(a.frame_range)} fcurves={len(a.fcurves)}')
61
+ "
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Phase 3: Weights
67
+
68
+ - Empezar con `Automatic Weights` y corregir a mano; no al reves.
69
+ - **Maximo 4 influencias por vertice.** Es el limite practico de la mayoria de los engines: si hay
70
+ mas, el engine descarta las sobrantes y la deformacion cambia respecto de Blender.
71
+ - Normalizar todo antes de exportar.
72
+ - Un vertice con weight 0 en todos los huesos se queda en el origen. Se ve como un pico saliendo
73
+ del personaje.
74
+
75
+ ---
76
+
77
+ ## Phase 4: Acciones, FCurves y NLA
78
+
79
+ - **Una accion = un clip** en el engine. Nombrarlas como se van a llamar alla (`Idle`, `Run`,
80
+ `Attack_01`), no `Action.003`.
81
+ - Interpolacion: `Bezier` para movimiento organico, `Linear` para mecanico, `Constant` para
82
+ stop-motion. La curva es parte de la animacion, no un detalle tecnico.
83
+ - Ciclos con `Cycles` F-Modifier para trabajar, pero **al exportar hay que tener frames reales**:
84
+ el modifier no viaja.
85
+ - NLA sirve para organizar y para bakear combinaciones. El engine recibe las acciones, no la
86
+ estructura del NLA.
87
+ - **Frame rate del `.blend` igual al del engine.** Un mismatch se ve como animacion lenta o
88
+ acelerada y se confunde con un problema de blending.
89
+ - Loops: el ultimo frame no repite el primero. Si repite, el loop tiene un hitch de un frame.
90
+
91
+ ---
92
+
93
+ ## Phase 5: Root motion
94
+
95
+ Decidir **antes** de animar, porque cambia como se anima:
96
+
97
+ | | In-place | Root motion |
98
+ |---|---|---|
99
+ | Hueso raiz | Quieto en el origen | Se mueve con el personaje |
100
+ | Quien mueve al personaje | El codigo | La animacion |
101
+ | Cuando | Locomocion con control responsivo | Ataques, finishers, cinematicas |
102
+
103
+ Mezclar los dos en el mismo set sin decirlo produce deslizamiento de pies que despues se intenta
104
+ arreglar con IK en runtime. Anotar la decision por clip.
105
+
106
+ ---
107
+
108
+ ## Phase 6: Bake antes de exportar
109
+
110
+ ```bash
111
+ blender --background <archivo.blend> --python <script_de_bake.py>
112
+ ```
113
+
114
+ El script tiene que, en este orden:
115
+
116
+ 1. Seleccionar el armature y entrar en Pose Mode.
117
+ 2. Bakear con **visual keying** (respeta constraints e IK) sobre el rango real de la accion.
118
+ 3. Sacar o deshabilitar los constraints ya horneados.
119
+ 4. Dejar solo los huesos de deformacion en el export; los de control quedan afuera.
120
+ 5. Guardar en un `.blend` aparte o en una accion nueva — **no sobrescribir el rig de trabajo.**
121
+
122
+ Ese ultimo punto no es opcional: un bake sobre el rig original destruye la posibilidad de volver a
123
+ animar. **Pedir aprobacion antes de escribir** el script de bake y antes de generar el `.blend` de
124
+ salida, diciendo explicitamente que archivo se crea y cual no se toca.
125
+
126
+ ---
127
+
128
+ ## Phase 7: Retargeting de Mixamo
129
+
130
+ Cuando la animacion viene de Mixamo:
131
+
132
+ 1. **Escala**: Mixamo exporta en centimetros. Aplicar factor 0.01 o el import queda 100x.
133
+ 2. **Pose de referencia**: Mixamo es T-pose. Si el rig destino es A-pose, alinear la rest pose
134
+ antes de mapear o los hombros salen rotos.
135
+ 3. **Mapeo de huesos**: `mixamorig:Hips` → la raiz del rig, y de ahi hacia abajo. Los nombres de
136
+ Mixamo son estables, asi que el mapeo se escribe una vez y se reusa.
137
+ 4. Bakear el resultado (Phase 6) y **borrar los huesos de Mixamo** que no correspondan al rig.
138
+ 5. Verificar contacto de pies con el piso, que es lo primero que se rompe.
139
+
140
+ Si el proyecto usa el toolkit de Mixamo de otra herramienta, respetarlo en lugar de escribir un
141
+ mapeo paralelo.
142
+
143
+ ---
144
+
145
+ ## Phase 8: Resumen
146
+
147
+ Reportar: huesos totales y cuantos sin sufijo L/R, acciones con nombre y rango, frame rate,
148
+ influencias maximas por vertice, que se bakeo, y decision de root motion por clip.
149
+
150
+ **Verdict:**
151
+ - **PASS** — keyframes bakeados, naming consistente, frame rate igual al del engine, weights
152
+ normalizados con 4 influencias o menos.
153
+ - **CONCERNS** — exportable con deuda: huesos sin sufijo, acciones con nombre autogenerado, root
154
+ motion sin decidir. Listar cada punto.
155
+ - **FAIL** — constraints o IK sin bakear, frame rate distinto al del engine, o weights sin
156
+ normalizar. Indicar el fix.
157
+
158
+ ## Next Steps
159
+
160
+ - `/blender-export` para sacar el skeletal mesh y los clips
161
+ - `/adaptive-music` o `/sfx-design` si la animacion necesita audio sincronizado
162
+ - `/asset-audit` para validar el resultado integrado
163
+ - En UE5, `/ue-animation-system` para el lado del engine
164
+
165
+ ---
166
+
167
+ > → Bake de constraints, frame rate y ejes estan en `.claude/rules/blender-pipeline.md`.
@@ -0,0 +1,145 @@
1
+ ---
2
+ name: blender-context
3
+ description: "Foundation de Blender: version instalada, MCP recomendado (comunidad vs oficial), modo headless, unidades y ejes, estructura de assets. Los demas blender-* dependen de este. Usar para: setup blender, contexto blender, mcp blender, blender headless."
4
+ category: "gamedev"
5
+ argument-hint: "[--verify]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Bash, Write, Edit
8
+ ---
9
+ # blender-context — Foundation
10
+
11
+ Deja claro con que Blender se esta trabajando y como se lo va a manejar, **antes** de tocar
12
+ geometria. Todos los demas skills `blender-*` asumen que esto ya corrio.
13
+
14
+ `--verify` salta la Phase 3 y solo reporta el estado actual.
15
+
16
+ ---
17
+
18
+ ## Phase 1: Detectar Blender
19
+
20
+ ```bash
21
+ blender --version
22
+ ```
23
+
24
+ Si `blender` no esta en el PATH, buscar la instalacion antes de darla por perdida:
25
+
26
+ | Plataforma | Ruta tipica |
27
+ |---|---|
28
+ | Windows | `C:\Program Files\Blender Foundation\Blender <ver>\blender.exe` |
29
+ | macOS | `/Applications/Blender.app/Contents/MacOS/Blender` |
30
+ | Linux | `/usr/bin/blender`, o el AppImage donde lo dejo el usuario |
31
+
32
+ Anotar la version mayor: define que features existen y que MCP sirve. Si hay varias instalaciones,
33
+ preguntar cual es la del proyecto — no elegir la mas nueva por default.
34
+
35
+ **Si no hay Blender**, reportar BLOCKED y parar. Ningun otro `blender-*` puede correr sin binario.
36
+
37
+ ---
38
+
39
+ ## Phase 2: Estructura del proyecto
40
+
41
+ Buscar `.blend` en el arbol (excluir `*.blend1` y `*.blend2`, que son backups):
42
+
43
+ - **Si hay**: listar donde estan y confirmar cual es el archivo de trabajo.
44
+ - **Si no hay**: preguntar si se arranca de cero o si los fuentes viven afuera del repo.
45
+
46
+ La convencion que asume el resto del perfil:
47
+
48
+ ```
49
+ assets/3d/<asset-slug>/
50
+ ├── source.blend # el archivo de trabajo, por LFS
51
+ ├── textures/ # fuentes de textura
52
+ └── export/ # lo que consume el engine (glb/fbx), por LFS
53
+ ```
54
+
55
+ Si el proyecto ya usa `meshy-setup`, esta estructura ya existe y el `.blend` de `meshy-derive`
56
+ entra como `source.blend`. **No crear una estructura paralela.**
57
+
58
+ Verificar `.gitignore` y `.gitattributes`: `*.blend1` ignorado, binarios por LFS. Mostrar el diff
59
+ y pedir aprobacion antes de escribir.
60
+
61
+ ---
62
+
63
+ ## Phase 3: Elegir como operar Blender
64
+
65
+ ### Headless — el default
66
+
67
+ ```bash
68
+ blender --background <archivo.blend> --python <script.py>
69
+ ```
70
+
71
+ Reproducible, versionable, corre en CI, no necesita ventana abierta. **Es el camino por default
72
+ para cualquier paso automatizable.** Los scripts van a `assets/3d/_scripts/` o al lado del skill
73
+ que los usa, nunca inline en el chat.
74
+
75
+ ### MCP — para explorar e iterar
76
+
77
+ Dos opciones. **Ninguna se instala desde este repo**: el addon vive en la instalacion de Blender
78
+ del usuario, y la decision es suya.
79
+
80
+ | | Comunidad (`ahujasid/blender-mcp`) | Oficial (Blender Lab) |
81
+ |---|---|---|
82
+ | Estado | Estandar de facto, MIT, mantenido | v1.0.0, **experimental, sin roadmap de release** |
83
+ | Blender | 3.0+ | 5.x (el addon viene con el engine en las versiones nuevas) |
84
+ | Para que sirve | Autoria: crear y modificar objetos, materiales, correr Python | Inspeccion: interfaz en lenguaje natural a la Python API, entender escenas |
85
+ | Extras | Poly Haven (assets, texturas, HDRIs), Sketchfab, Hyper3D | Ninguno, es deliberadamente minimo |
86
+ | Repo | `github.com/ahujasid/blender-mcp` | `projects.blender.org/lab/blender_mcp` |
87
+
88
+ Recomendacion: **el de la comunidad** si el trabajo es producir assets; el oficial si lo que se
89
+ quiere es entender o debuggear una escena ajena.
90
+
91
+ > Los dos ejecutan el Python generado por el LLM **sin sandbox**. Antes de la primera operacion:
92
+ > commit limpio en el repo y `.blend` guardado. Las reglas completas estan en
93
+ > `.claude/rules/blender-pipeline.md`.
94
+
95
+ Si el usuario quiere el MCP, darle el comando y **no correrlo sin aprobacion**:
96
+
97
+ ```bash
98
+ claude mcp add blender -- uvx blender-mcp
99
+ ```
100
+
101
+ Necesita `uv` (`winget install astral-sh.uv`) y el addon: `uvx blender-mcp install-addon`, despues
102
+ habilitarlo en las preferencias de Blender. En el viewport se conecta desde el panel `N` →
103
+ pestana BlenderMCP.
104
+
105
+ ---
106
+
107
+ ## Phase 4: Unidades y ejes
108
+
109
+ Confirmar con el usuario el destino del asset y anotarlo. La tabla completa esta en la rule; lo
110
+ que hay que fijar ahora es una sola linea: **destino, eje up, y factor de escala**.
111
+
112
+ Si el destino es Unity o UE5 y el proyecto tiene un `blender-context` previo con otro destino,
113
+ avisar del cambio en lugar de sobrescribirlo en silencio.
114
+
115
+ ---
116
+
117
+ ## Phase 5: Resumen
118
+
119
+ Reportar:
120
+ - Version de Blender y ruta del binario.
121
+ - Archivos `.blend` encontrados y cual es el de trabajo.
122
+ - Modo de operacion elegido (headless siempre disponible; MCP si esta conectado y cual).
123
+ - Destino, eje up y escala.
124
+ - Que se creo o modifico en el repo (`.gitignore`, `.gitattributes`, estructura de carpetas).
125
+
126
+ **Verdict:**
127
+ - **READY** — Blender detectado, estructura en su lugar, destino definido. Los demas `blender-*`
128
+ pueden correr.
129
+ - **PENDING** — todo definido pero el MCP no conecta. Aclarar que el camino headless **si** esta
130
+ disponible y que solo falta la parte interactiva.
131
+ - **BLOCKED** — no hay binario de Blender, o el destino del asset no se pudo definir. Indicar el
132
+ fix concreto.
133
+
134
+ ## Next Steps
135
+
136
+ - `/blender-modeling` para topologia, modifiers y presupuesto de tris
137
+ - `/blender-materials` para shader nodes, UVs y bake
138
+ - `/blender-animation` para rigging, keyframes y retargeting
139
+ - `/blender-export` cuando el asset esta listo para el engine
140
+ - Si el asset viene de Meshy, `/meshy-derive` primero para bajar el `.blend`
141
+
142
+ ---
143
+
144
+ > → Las reglas de ejes, escala, topologia, color space y Git estan en
145
+ > `.claude/rules/blender-pipeline.md`. Leerlas antes de la primera operacion.