claude-code-arcane 2.6.1 → 2.7.1
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.
- package/CHANGELOG.md +16 -0
- package/README.md +8 -4
- package/dist/cli.js +349 -143
- package/docs/SKILLS-CATALOG.md +19 -3
- package/docs/USER-GUIDE.md +3 -3
- package/hooks/validate-commit.sh +36 -0
- package/package.json +1 -1
- package/profiles/blender.yaml +49 -0
- package/profiles/freelance.yaml +1 -0
- package/rules/blender-pipeline.md +95 -0
- package/skills/arcane-add/SKILL.md +29 -2
- package/skills/blender-animation/SKILL.md +167 -0
- package/skills/blender-context/SKILL.md +145 -0
- package/skills/blender-export/SKILL.md +143 -0
- package/skills/blender-export/scripts/validate_gltf.py +362 -0
- package/skills/blender-materials/SKILL.md +165 -0
- package/skills/blender-modeling/SKILL.md +160 -0
- package/skills/fiverr-gig/SKILL.md +147 -0
- package/skills/freelance-scan/references/platforms.md +2 -0
- package/skills/meshy-derive/SKILL.md +3 -0
package/docs/SKILLS-CATALOG.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Skills Catalog — Claude Code Arcane
|
|
2
2
|
|
|
3
|
-
Los
|
|
3
|
+
Los 437 skills disponibles para proyectos consumidores, organizados por division.
|
|
4
4
|
|
|
5
|
-
La tabla cubre
|
|
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 (
|
|
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]` |
|
package/docs/USER-GUIDE.md
CHANGED
|
@@ -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 **
|
|
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
|
|
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
|
|
package/hooks/validate-commit.sh
CHANGED
|
@@ -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
|
@@ -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)"
|
package/profiles/freelance.yaml
CHANGED
|
@@ -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: "
|
|
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
|
|
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.
|