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