602 lines
18 KiB
Markdown
602 lines
18 KiB
Markdown
---
|
|
name: blender-toolkit
|
|
description: |
|
|
Blender automation with geometry creation, materials, modifiers, and Mixamo animation retargeting.
|
|
|
|
Core Features: WebSocket-based real-time control, automatic bone mapping with UI review, two-phase confirmation workflow, quality assessment, multi-project support, comprehensive CLI commands.
|
|
|
|
Use Cases: Create 3D primitives (cube, sphere, cylinder, etc.), manipulate objects (transform, duplicate, delete), manage materials and modifiers, retarget Mixamo animations to custom rigs with fuzzy bone matching.
|
|
|
|
allowed-tools: Bash, Read, Write, Glob
|
|
---
|
|
|
|
## ⚠️ Installation Check (READ THIS FIRST)
|
|
|
|
**IMPORTANT**: Before using this skill, check Blender addon installation status.
|
|
|
|
**Config location**: Check the shared config file for your installation status:
|
|
```
|
|
~/.claude/plugins/marketplaces/dev-gom-plugins/blender-config.json
|
|
```
|
|
|
|
**Always run scripts with `--help` first** to see usage. DO NOT read the source until you try running the script first and find that a customized solution is abslutely necessary. These scripts can be very large and thus pollute your context window. They exist to be called directly as black-box scripts rather than ingested into your context window.
|
|
|
|
**Required actions based on config**:
|
|
|
|
### 1. If Blender Not Detected (`blenderExecutable: null`)
|
|
|
|
Blender was not found during initialization. Please:
|
|
|
|
1. **Install Blender 4.0+** from https://www.blender.org
|
|
2. **Restart Claude Code session** to trigger auto-detection
|
|
3. Check logs: `.blender-toolkit/init-log.txt`
|
|
|
|
### 2. If Multiple Versions Detected (`detectedBlenderVersions` array)
|
|
|
|
The system detected multiple Blender installations. If you want to use a different version:
|
|
|
|
1. **Open config file** (path shown above)
|
|
2. **Edit `blenderExecutable`** field to your preferred version path
|
|
3. **Restart Claude Code session**
|
|
|
|
Example:
|
|
```json
|
|
{
|
|
"detectedBlenderVersions": [
|
|
{"version": "4.2.0", "path": "C:\\Program Files\\Blender Foundation\\Blender 4.2\\blender.exe"},
|
|
{"version": "4.1.0", "path": "C:\\Program Files\\Blender Foundation\\Blender 4.1\\blender.exe"}
|
|
],
|
|
"blenderExecutable": "C:\\Program Files\\Blender Foundation\\Blender 4.2\\blender.exe"
|
|
}
|
|
```
|
|
|
|
### 3. If Addon Not Installed (`addonInstalled: false`)
|
|
|
|
The addon needs to be installed manually. Follow these steps:
|
|
|
|
**Manual Installation Steps**:
|
|
|
|
**Method 1: Install from ZIP (Recommended)**
|
|
```bash
|
|
# 1. Open Blender 4.0+
|
|
# 2. Edit > Preferences > Add-ons > Install
|
|
# 3. Select: .blender-toolkit/blender-toolkit-addon-v*.zip
|
|
# 4. Enable "Blender Toolkit WebSocket Server"
|
|
```
|
|
|
|
**Method 2: Install from Source**
|
|
```bash
|
|
# 1. Open Blender 4.0+
|
|
# 2. Edit > Preferences > Add-ons > Install
|
|
# 3. Select: plugins/blender-toolkit/skills/addon/__init__.py
|
|
# 4. Enable "Blender Toolkit WebSocket Server"
|
|
```
|
|
|
|
**Start WebSocket Server**:
|
|
1. Open 3D View → Sidebar (press N key)
|
|
2. Find "Blender Toolkit" tab
|
|
3. Click "Start Server" button
|
|
4. Default port: 9400 (auto-assigned per project)
|
|
|
|
**Update Config**:
|
|
- Open config file (path shown above)
|
|
- Set `"addonInstalled": true`
|
|
- Save file
|
|
|
|
**Verify Connection**:
|
|
- Try a simple command: `node .blender-toolkit/bt.js list-objects`
|
|
- If successful, you'll see a list of objects in your scene
|
|
|
|
**Troubleshooting**:
|
|
- If Blender path is incorrect: Update `blenderExecutable` in config
|
|
- If port is in use: System will auto-assign next available port (9401-9500)
|
|
- Check logs: `.blender-toolkit/init-log.txt`
|
|
- Check Blender console for error messages
|
|
|
|
### 4. If Everything is Ready (`addonInstalled: true`)
|
|
|
|
✅ You're all set! You can use all Blender Toolkit commands.
|
|
|
|
---
|
|
|
|
# blender-toolkit
|
|
|
|
Automate Blender workflows with WebSocket-based real-time control. Create geometry, manage materials and modifiers, and retarget Mixamo animations to custom rigs with intelligent bone mapping.
|
|
|
|
## Purpose
|
|
|
|
Provide comprehensive Blender automation through:
|
|
- 🎨 **Geometry Creation** - Primitives (cube, sphere, cylinder, plane, cone, torus)
|
|
- 🎭 **Material Management** - Create, assign, and configure materials
|
|
- 🔧 **Modifier Control** - Add, apply, and manage modifiers
|
|
- 🎬 **Animation Retargeting** - Mixamo to custom rigs with automatic bone mapping
|
|
|
|
## When to Use
|
|
|
|
Use this skill when:
|
|
- **Creating 3D Geometry:** User wants to create primitives or manipulate meshes
|
|
- **Managing Materials:** User needs to create or assign materials with PBR properties
|
|
- **Adding Modifiers:** User wants subdivision, mirror, array, or other modifiers
|
|
- **Retargeting Animations:** User needs to apply Mixamo animations to custom characters
|
|
- **Batch Operations:** User wants to process multiple objects or animations
|
|
|
|
**Note:** Mixamo does not provide an official API. Users must manually download FBX files from Mixamo.com.
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites Checklist
|
|
|
|
Before starting, ensure:
|
|
- [ ] Blender 4.0+ installed
|
|
- [ ] Blender Toolkit addon installed and enabled
|
|
- [ ] WebSocket server started in Blender (default port: 9400)
|
|
- [ ] Character rig loaded (for animation retargeting)
|
|
|
|
**Install Addon:**
|
|
```
|
|
1. Open Blender → Edit → Preferences → Add-ons
|
|
2. Click "Install" → Select plugins/blender-toolkit/skills/addon/__init__.py
|
|
3. Enable "Blender Toolkit WebSocket Server"
|
|
4. Start server: View3D → Sidebar (N) → "Blender Toolkit" → "Start Server"
|
|
```
|
|
|
|
### Common Operations
|
|
|
|
**Create Geometry:**
|
|
```bash
|
|
# Create cube at origin
|
|
blender-toolkit create-cube --size 2.0
|
|
|
|
# Create sphere with custom settings
|
|
blender-toolkit create-sphere --radius 1.5 --segments 64
|
|
|
|
# Subdivide mesh
|
|
blender-toolkit subdivide --name "Cube" --cuts 2
|
|
```
|
|
|
|
**Manage Objects:**
|
|
```bash
|
|
# List all objects
|
|
blender-toolkit list-objects
|
|
|
|
# Transform object
|
|
blender-toolkit transform --name "Cube" --loc-x 5 --loc-y 0 --scale-x 2
|
|
|
|
# Duplicate object
|
|
blender-toolkit duplicate --name "Cube" --new-name "Cube.001" --x 3
|
|
```
|
|
|
|
**Materials:**
|
|
```bash
|
|
# Create material
|
|
blender-toolkit material create --name "RedMaterial"
|
|
|
|
# Assign to object
|
|
blender-toolkit material assign --object "Cube" --material "RedMaterial"
|
|
|
|
# Set color
|
|
blender-toolkit material set-color --material "RedMaterial" --r 1.0 --g 0.0 --b 0.0
|
|
```
|
|
|
|
**Retarget Animation:**
|
|
```bash
|
|
# Basic retargeting with UI confirmation
|
|
blender-toolkit retarget \
|
|
--target "HeroRig" \
|
|
--file "./Walking.fbx" \
|
|
--name "Walking"
|
|
|
|
# Rigify preset (skip confirmation)
|
|
blender-toolkit retarget \
|
|
--target "MyRigifyCharacter" \
|
|
--file "./Walking.fbx" \
|
|
--mapping mixamo_to_rigify \
|
|
--skip-confirmation
|
|
|
|
# Show Mixamo download instructions
|
|
blender-toolkit mixamo-help Walking
|
|
```
|
|
|
|
## Architecture
|
|
|
|
**WebSocket-Based Design:**
|
|
|
|
```
|
|
┌──────────────┐ ┌─────────────┐ WebSocket ┌──────────────┐
|
|
│ Claude Code │ IPC │ TypeScript │◄──────────────►│ Blender │
|
|
│ (Skill) │────────►│ Client │ Port 9400+ │ (Addon) │
|
|
└──────────────┘ └─────────────┘ └──────────────┘
|
|
│ │
|
|
▼ ▼
|
|
┌─────────────────┐ ┌────────────────────┐
|
|
│ - Geometry │ │ - WebSocket │
|
|
│ - Material │ │ Server │
|
|
│ - Modifier │ │ - Command │
|
|
│ - Retargeting │ │ Handlers │
|
|
│ - Bone Mapping │ │ - Bone Mapping UI │
|
|
└─────────────────┘ └────────────────────┘
|
|
```
|
|
|
|
**Key Components:**
|
|
- **WebSocket Server:** Python addon in Blender (ports 9400-9500)
|
|
- **TypeScript Client:** Sends commands via JSON-RPC
|
|
- **Bone Mapping System:** Fuzzy matching with UI confirmation
|
|
- **Two-Phase Workflow:** Generate → Review → Apply
|
|
|
|
## Core Workflows
|
|
|
|
### 1. Geometry Creation Workflow
|
|
|
|
**Extract Requirements:**
|
|
- Primitive type (cube, sphere, cylinder, etc.)
|
|
- Position (x, y, z coordinates)
|
|
- Size parameters (radius, depth, segments)
|
|
- Optional object name
|
|
|
|
**Execute:**
|
|
```typescript
|
|
import { BlenderClient } from 'blender-toolkit';
|
|
|
|
const client = new BlenderClient();
|
|
await client.connect(9400);
|
|
|
|
// Create sphere
|
|
const result = await client.sendCommand('Geometry.createSphere', {
|
|
location: [0, 0, 2],
|
|
radius: 1.5,
|
|
segments: 64,
|
|
name: 'MySphere'
|
|
});
|
|
|
|
console.log(`✅ Created ${result.name} with ${result.vertices} vertices`);
|
|
```
|
|
|
|
### 2. Material Assignment Workflow
|
|
|
|
**Steps:**
|
|
1. Create material
|
|
2. Assign to object
|
|
3. Configure properties (color, metallic, roughness)
|
|
|
|
**Execute:**
|
|
```bash
|
|
# Create and configure material
|
|
blender-toolkit material create --name "Metal"
|
|
blender-toolkit material set-color --material "Metal" --r 0.8 --g 0.8 --b 0.8
|
|
blender-toolkit material set-metallic --material "Metal" --value 1.0
|
|
blender-toolkit material set-roughness --material "Metal" --value 0.2
|
|
|
|
# Assign to object
|
|
blender-toolkit material assign --object "Sphere" --material "Metal"
|
|
```
|
|
|
|
### 3. Animation Retargeting Workflow ⭐
|
|
|
|
**Most Common Use Case**
|
|
|
|
**Phase 1: Setup & Generate Mapping**
|
|
```
|
|
1. User provides:
|
|
- Target character armature name
|
|
- Animation FBX file path
|
|
- (Optional) Animation name for NLA track
|
|
|
|
2. System executes:
|
|
- Connects to Blender WebSocket
|
|
- Imports FBX file
|
|
- Analyzes bone structure
|
|
- Auto-generates bone mapping (fuzzy matching)
|
|
- Displays mapping in Blender UI for review
|
|
|
|
3. Quality Assessment:
|
|
- Excellent (8-9 critical bones) → Safe to auto-apply
|
|
- Good (6-7 critical bones) → Quick review recommended
|
|
- Fair (4-5 critical bones) → Thorough review required
|
|
- Poor (< 4 critical bones) → Manual mapping needed
|
|
```
|
|
|
|
**Phase 2: User Confirmation**
|
|
```
|
|
1. User reviews mapping in Blender:
|
|
- View3D → Sidebar (N) → "Blender Toolkit" → "Bone Mapping Review"
|
|
- Check source → target correspondence
|
|
- Edit incorrect mappings using dropdowns
|
|
- Use "Auto Re-map" button to regenerate if needed
|
|
|
|
2. User confirms:
|
|
- Click "Apply Retargeting" button in Blender
|
|
|
|
3. System completes:
|
|
- Creates constraint-based retargeting
|
|
- Bakes animation to keyframes
|
|
- Adds to NLA track
|
|
- Cleans up temporary objects
|
|
```
|
|
|
|
**Example:**
|
|
```typescript
|
|
import { AnimationRetargetingWorkflow } from 'blender-toolkit';
|
|
|
|
const workflow = new AnimationRetargetingWorkflow();
|
|
|
|
// If user doesn't have FBX yet
|
|
console.log(workflow.getManualDownloadInstructions('Walking'));
|
|
|
|
// After user downloads FBX
|
|
await workflow.run({
|
|
targetCharacterArmature: 'HeroRig',
|
|
animationFilePath: './Walking.fbx',
|
|
animationName: 'Walking',
|
|
boneMapping: 'auto', // Auto-generate with fuzzy matching
|
|
skipConfirmation: false // Enable UI review workflow
|
|
});
|
|
```
|
|
|
|
**Skip Confirmation (For Known-Good Mappings):**
|
|
```bash
|
|
# Rigify preset - instant application
|
|
blender-toolkit retarget \
|
|
--target "RigifyCharacter" \
|
|
--file "./Walking.fbx" \
|
|
--mapping mixamo_to_rigify \
|
|
--skip-confirmation
|
|
|
|
# Excellent quality - trusted auto-mapping
|
|
blender-toolkit retarget \
|
|
--target "MyCharacter" \
|
|
--file "./Walking.fbx" \
|
|
--skip-confirmation
|
|
```
|
|
|
|
## Key Features
|
|
|
|
### Auto Bone Mapping with UI Review 🌟
|
|
|
|
**Recommended Workflow** for unknown or custom rigs:
|
|
|
|
**How It Works:**
|
|
1. **Fuzzy Matching Algorithm**
|
|
- Normalizes bone names (handles various conventions)
|
|
- Calculates similarity scores (0.0-1.0)
|
|
- Applies bonuses for:
|
|
- Substring matches (+0.15)
|
|
- Common prefixes: left, right (+0.1)
|
|
- Common suffixes: .L, .R, _l, _r (+0.1)
|
|
- Number matching: Spine1, Spine2 (+0.1)
|
|
- Anatomical keywords: arm, leg, hand (+0.05)
|
|
|
|
2. **Quality Assessment**
|
|
- Tracks 9 critical bones (Hips, Spine, Head, Arms, Legs, Hands)
|
|
- Provides quality rating (Excellent/Good/Fair/Poor)
|
|
- Recommends action based on quality
|
|
|
|
3. **UI Confirmation Panel**
|
|
- Shows complete mapping table
|
|
- Editable dropdowns for each mapping
|
|
- "Auto Re-map" button (regenerate)
|
|
- "Apply Retargeting" button (proceed)
|
|
|
|
**Benefits:**
|
|
- Works with any rig structure
|
|
- No manual configuration needed
|
|
- User verifies before application
|
|
- Prevents animation errors
|
|
|
|
### Three Bone Mapping Modes
|
|
|
|
**1. Auto Mode (Recommended)** ⭐
|
|
```bash
|
|
# Default: Auto-generate with UI confirmation
|
|
blender-toolkit retarget --target "Hero" --file "./Walk.fbx"
|
|
```
|
|
- Fuzzy matching algorithm
|
|
- UI review workflow
|
|
- Best for unknown rigs
|
|
|
|
**2. Rigify Mode**
|
|
```bash
|
|
# Preset for Rigify control rigs
|
|
blender-toolkit retarget --target "Hero" --file "./Walk.fbx" --mapping mixamo_to_rigify
|
|
```
|
|
- Predefined Mixamo → Rigify mapping
|
|
- Instant application
|
|
- Highest accuracy for Rigify
|
|
|
|
**3. Custom Mode**
|
|
```typescript
|
|
// Explicit bone mapping
|
|
const customMapping = {
|
|
"Hips": "root_bone",
|
|
"Spine": "torso_01",
|
|
"LeftArm": "l_upper_arm",
|
|
// ... complete mapping
|
|
};
|
|
|
|
await workflow.run({
|
|
boneMapping: customMapping,
|
|
skipConfirmation: true
|
|
});
|
|
```
|
|
- Full control
|
|
- Reusable across animations
|
|
- For non-standard rigs
|
|
|
|
### Multi-Project Support
|
|
|
|
**Automatic Port Management:**
|
|
- Projects automatically assigned unique ports (9400-9500)
|
|
- Configuration persists across sessions
|
|
- Multiple Blender instances can run simultaneously
|
|
|
|
**Configuration Storage:**
|
|
```json
|
|
// ~/.claude/plugins/.../blender-config.json
|
|
{
|
|
"projects": {
|
|
"/path/to/project-a": { "port": 9400 },
|
|
"/path/to/project-b": { "port": 9401 }
|
|
}
|
|
}
|
|
```
|
|
|
|
## Important Guidelines
|
|
|
|
### When to Ask User
|
|
|
|
Use `AskUserQuestion` tool if:
|
|
- Character armature name is unclear
|
|
- Multiple rigs exist (ambiguous target)
|
|
- Animation FBX path not provided
|
|
- Blender WebSocket connection fails
|
|
- User needs Mixamo download guidance
|
|
|
|
**DO NOT** guess:
|
|
- Character names
|
|
- File paths
|
|
- Rig structures
|
|
|
|
### Mixamo Download Process
|
|
|
|
Since Mixamo has no API, users must manually download:
|
|
|
|
**Provide Instructions:**
|
|
```typescript
|
|
// Show download help
|
|
const workflow = new AnimationRetargetingWorkflow();
|
|
console.log(workflow.getManualDownloadInstructions('Walking'));
|
|
console.log(workflow.getRecommendedSettings());
|
|
```
|
|
|
|
**Wait for User:**
|
|
- Guide user through Mixamo.com download
|
|
- Get file path after download completes
|
|
- Then proceed with retargeting
|
|
|
|
## Troubleshooting
|
|
|
|
### "Blender is not running"
|
|
```bash
|
|
# Check connection
|
|
blender-toolkit daemon-status
|
|
|
|
# If failed:
|
|
1. Verify Blender is open
|
|
2. Check addon is enabled
|
|
3. Start server: Blender → N → "Blender Toolkit" → "Start Server"
|
|
```
|
|
|
|
### "Target armature not found"
|
|
- Verify exact armature name (case-sensitive)
|
|
- Check character is in current scene
|
|
- Use `list-objects --type ARMATURE` to see available armatures
|
|
|
|
### "Poor quality" bone mapping
|
|
1. Review bone names in Blender (Edit Mode)
|
|
2. Create custom mapping for critical bones
|
|
3. Lower similarity threshold (default: 0.6)
|
|
4. Check rig has proper hierarchy
|
|
|
|
### "Twisted or inverted limbs"
|
|
- Check left/right bone mapping
|
|
- Verify bone roll in Edit Mode
|
|
- Review constraint axes
|
|
- Test with simple animation first
|
|
|
|
## Best Practices
|
|
|
|
1. **🌟 Use Auto Mode with UI Confirmation**
|
|
- Most reliable for unknown rigs
|
|
- Always review critical bones (Hips, Spine, Arms, Legs)
|
|
- Edit incorrect mappings before applying
|
|
|
|
2. **Test Simple Animations First**
|
|
- Start with Idle or Walking
|
|
- Verify bone mapping works correctly
|
|
- Check root motion (Hips bone)
|
|
- Then proceed to complex animations
|
|
|
|
3. **Download Correct Format from Mixamo**
|
|
- Format: FBX (.fbx)
|
|
- Skin: Without Skin
|
|
- FPS: 30 fps
|
|
- Keyframe Reduction: None
|
|
|
|
4. **Check Quality Before Auto-Apply**
|
|
- Excellent (8-9 critical) → Safe to skip confirmation
|
|
- Good (6-7 critical) → Quick review
|
|
- Fair (4-5 critical) → Thorough review
|
|
- Poor (< 4 critical) → Use custom mapping
|
|
|
|
5. **Save Custom Mappings for Reuse**
|
|
- Document successful mappings
|
|
- Reuse for same character's animations
|
|
- Share with team members
|
|
|
|
6. **Let System Manage Ports**
|
|
- Don't manually configure ports
|
|
- System handles multi-project conflicts
|
|
- Configuration persists automatically
|
|
|
|
## References
|
|
|
|
Detailed documentation in `references/` folder:
|
|
|
|
- **[commands-reference.md](references/commands-reference.md)** - Complete CLI command reference
|
|
- All geometry, object, material, modifier commands
|
|
- Detailed options and examples
|
|
- Port management and tips
|
|
|
|
- **[bone-mapping-guide.md](references/bone-mapping-guide.md)** - Bone matching system details
|
|
- Fuzzy matching algorithm explained
|
|
- Quality assessment metrics
|
|
- Common mapping patterns (Rigify, UE4, Unity)
|
|
- Troubleshooting mapping issues
|
|
|
|
- **[workflow-guide.md](references/workflow-guide.md)** - Complete workflow documentation
|
|
- Step-by-step retargeting workflow
|
|
- Mixamo download process
|
|
- Two-phase confirmation details
|
|
- Batch processing workflows
|
|
- Multi-project workflows
|
|
|
|
- **[addon-api-reference.md](references/addon-api-reference.md)** - WebSocket API documentation
|
|
- JSON-RPC protocol details
|
|
- All API methods and parameters
|
|
- Error handling
|
|
- Security and performance tips
|
|
|
|
**When to Load References:**
|
|
- User needs detailed command options
|
|
- Troubleshooting complex issues
|
|
- Understanding bone mapping algorithm
|
|
- Setting up advanced workflows
|
|
- API integration requirements
|
|
|
|
## Output Structure
|
|
|
|
```
|
|
.blender-toolkit/
|
|
├── skills/scripts/ # Local TypeScript scripts (auto-initialized)
|
|
│ ├── src/ # Source code
|
|
│ ├── dist/ # Compiled JavaScript
|
|
│ └── node_modules/ # Dependencies
|
|
├── bt.js # CLI wrapper
|
|
├── logs/ # Log files
|
|
│ ├── typescript.log
|
|
│ ├── blender-addon.log
|
|
│ └── error.log
|
|
└── .gitignore
|
|
|
|
Shared config:
|
|
~/.claude/plugins/.../blender-config.json
|
|
```
|
|
|
|
## Notes
|
|
|
|
- **Port range:** 9400-9500 (Browser Pilot uses 9222-9322)
|
|
- **File formats:** FBX recommended, Collada (.dae) supported
|
|
- **Blender version:** 4.0+ required (2023+)
|
|
- **Auto-initialization:** SessionStart hook installs and builds scripts
|
|
- **No manual daemon management:** System handles everything
|
|
- **WebSocket protocol:** JSON-RPC 2.0
|