Dev-GOM / blender-toolkit

Automate Blender tasks like creating 3D shapes, managing materials, and retargeting Mixamo animations with real-time control.

1 views
0 installs

Skill Content

---
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