Spaces:
Running
Running
File size: 9,507 Bytes
0805c5b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
# Manim MCP Server
A comprehensive Model Context Protocol (MCP) server for creating educational STEM animations using Manim. This server combines AI-powered creative tools with rendering and video processing capabilities to streamline the animation creation workflow.
## Features
### π¨ Creative Tools
- **Concept Planning**: AI-powered STEM concept planning with learning objectives and scene flow
- **Code Generation**: Intelligent Manim code generation with syntax validation
- **Code Refinement**: Automatic code improvement based on errors and feedback
- **Narration Generation**: Educational script writing tailored to target audiences
- **Quiz Generation**: Automated assessment question creation
### π¬ Rendering & Processing
- **Manim Rendering**: Full Manim animation rendering with quality controls
- **Video Processing**: FFmpeg-based video manipulation and conversion
- **Audio/Video Merging**: Seamless integration of narration with animations
- **File Management**: Comprehensive file system operations
### π€ AI Integration
- **Vision Analysis**: Frame-by-frame quality assessment using vision models
- **Text-to-Speech**: Natural voice synthesis for narration
- **Multi-Model Support**: Flexible model selection for different tasks
## Installation
### Prerequisites
- Python 3.12+
- Manim Community Edition (`manim>=0.18.1`)
- FFmpeg (for video processing)
- HuggingFace API key (for AI features)
### Setup
1. Install the package and dependencies:
```bash
pip install mcp huggingface_hub manim pydantic aiohttp httpx numpy Pillow
```
2. Set up your environment variables:
```bash
export HUGGINGFACE_API_KEY="your_api_key_here"
```
3. Run the MCP server:
```bash
python manim_mcp/server.py
```
## Usage
### As an MCP Server
The server can be integrated into any MCP-compatible client (like Claude Desktop):
```json
{
"mcpServers": {
"manim": {
"command": "python",
"args": ["path/to/manim_mcp/server.py"],
"env": {
"HUGGINGFACE_API_KEY": "your_key"
}
}
}
}
```
### Programmatic Usage
```python
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
# Initialize MCP client
params = StdioServerParameters(
command="python",
args=["manim_mcp/server.py"],
env={"HUGGINGFACE_API_KEY": "your_key"}
)
async with stdio_client(params) as (read, write):
session = ClientSession(read, write)
await session.initialize()
# Plan a concept
result = await session.call_tool("plan_concept", {
"topic": "Pythagorean Theorem",
"target_audience": "high_school",
"animation_length_minutes": 2.0
})
```
## Available Tools
### Planning & Creative
#### `plan_concept`
Plan a STEM concept for animation with learning objectives and scene flow.
**Parameters:**
- `topic` (string, required): The STEM topic to animate
- `target_audience` (enum, required): elementary | middle_school | high_school | college | general
- `animation_length_minutes` (number, optional): Desired length in minutes
- `model` (string, optional): HuggingFace model to use
#### `generate_manim_code`
Generate complete, runnable Manim Python code.
**Parameters:**
- `concept` (string, required): Animation concept
- `scene_description` (string, required): Detailed scene description
- `visual_elements` (array, optional): List of visual elements to include
- `previous_code` (string, optional): For retry attempts
- `error_message` (string, optional): Error from previous attempt
#### `refine_animation`
Refine existing Manim code based on feedback.
**Parameters:**
- `original_code` (string, required): Code to refine
- `feedback` (string, required): Feedback or error message
- `improvement_goals` (array, optional): Specific improvements to make
#### `generate_narration`
Generate educational narration scripts.
**Parameters:**
- `concept` (string, required): Animation concept
- `scene_description` (string, required): Scene details
- `target_audience` (string, required): Target audience level
- `duration_seconds` (integer, optional): Script duration
#### `generate_quiz`
Generate educational quiz questions.
**Parameters:**
- `concept` (string, required): STEM concept
- `difficulty` (enum, required): easy | medium | hard
- `num_questions` (integer, required): Number of questions
- `question_types` (array, optional): Types of questions
### Rendering & Processing
#### `write_manim_file`
Write Manim code to a file.
**Parameters:**
- `filepath` (string, required): Destination path
- `code` (string, required): Manim code to write
#### `render_manim_animation`
Render a Manim animation from a Python file.
**Parameters:**
- `scene_name` (string, required): Scene class name
- `file_path` (string, required): Path to Python file
- `output_dir` (string, required): Output directory
- `quality` (enum, optional): low | medium | high | production_quality
- `format` (enum, optional): mp4 | gif | png
- `frame_rate` (integer, optional): Frame rate (default: 30)
#### `merge_video_audio`
Merge video and audio files.
**Parameters:**
- `video_file` (string, required): Path to video
- `audio_file` (string, required): Path to audio
- `output_file` (string, required): Output path
#### `process_video_with_ffmpeg`
Process videos with custom FFmpeg arguments.
**Parameters:**
- `input_files` (array, required): Input file paths
- `output_file` (string, required): Output path
- `ffmpeg_args` (array, optional): Additional FFmpeg arguments
#### `check_file_exists`
Check file existence and get metadata.
**Parameters:**
- `filepath` (string, required): File path to check
### Analysis
#### `analyze_frame`
Analyze animation frames using vision models.
**Parameters:**
- `image_path` (string, required): Path to image
- `analysis_type` (string, required): Type of analysis
- `context` (string, optional): Additional context
- `model` (string, optional): Vision model to use
#### `generate_speech`
Convert text to speech audio.
**Parameters:**
- `text` (string, required): Text to convert
- `output_path` (string, required): Audio output path
- `voice` (string, optional): Voice to use
- `model` (string, optional): TTS model to use
## Complete Workflow Example
Here's a typical animation generation workflow:
1. **Plan** the concept
2. **Generate** narration script
3. **Generate** Manim code
4. **Write** code to file
5. **Render** the animation
6. **Generate** speech audio
7. **Merge** video and audio
8. **Generate** quiz questions
```python
# 1. Plan concept
plan = await session.call_tool("plan_concept", {
"topic": "Newton's Laws of Motion",
"target_audience": "high_school"
})
# 2. Generate narration
narration = await session.call_tool("generate_narration", {
"concept": "Newton's Laws",
"scene_description": plan["text"],
"target_audience": "high_school",
"duration_seconds": 120
})
# 3. Generate code
code = await session.call_tool("generate_manim_code", {
"concept": "Newton's Laws",
"scene_description": plan["text"],
"visual_elements": ["text", "shapes", "arrows"]
})
# 4-7. Continue workflow...
```
## Configuration
### Environment Variables
- `HUGGINGFACE_API_KEY`: Required for AI-powered tools
- `ELEVENLABS_API_KEY`: Optional for premium TTS (falls back to free alternatives)
### Model Selection
By default, the server uses sensible model defaults, but you can specify custom models:
```python
await session.call_tool("generate_manim_code", {
"concept": "topic",
"scene_description": "description",
"model": "Qwen/Qwen2.5-Coder-32B-Instruct" # Custom model
})
```
## Quality Settings
Rendering quality options:
- **low**: 480p15 - Fast, good for testing
- **medium**: 720p30 - Balanced quality/speed (default)
- **high**: 1080p60 - High quality, slower
- **production_quality**: 2160p60 - 4K, very slow
## Error Handling
The server includes comprehensive error handling:
- Syntax validation for generated code
- Retry logic for code generation failures
- Graceful fallbacks for AI services
- Detailed error messages for debugging
## Architecture
The server is organized into modular tool categories:
```
manim_mcp/
βββ server.py # Main MCP server
βββ tools/
β βββ planning.py # Concept planning
β βββ code_generation.py # Code generation & refinement
β βββ rendering.py # Manim rendering
β βββ vision.py # Frame analysis
β βββ audio.py # TTS & narration
β βββ video.py # Video processing
β βββ quiz.py # Quiz generation
```
## Requirements
- Python >= 3.12
- mcp >= 1.0.0
- huggingface_hub >= 0.25.0
- manim >= 0.18.1
- pydantic >= 2.0.0
- aiohttp >= 3.8.0
- FFmpeg (system dependency)
## Contributing
Contributions are welcome! Areas for improvement:
- Additional AI model integrations
- More video processing tools
- Enhanced error recovery
- Performance optimizations
## License
MIT License - see LICENSE file for details
## Support
For issues, questions, or feature requests, please open an issue on the repository.
## Credits
Built with:
- [Manim Community Edition](https://www.manim.community/) - Mathematical animation engine
- [Model Context Protocol](https://modelcontextprotocol.io/) - AI integration framework
- [HuggingFace](https://huggingface.co/) - AI model hosting and inference
---
**Version**: 0.1.0
**Author**: NeuroAnim Team
**Status**: Beta - Ready for production use with active development |