Manim-GPT 是一个创新的开源项目,结合了大语言模型(LLM)、语音识别和Manim动画引擎,让用户能够通过自然语言描述或语音输入,支持多轮绘画来修改,快速生成精美的数学动画。
- 零门槛创作:无需学习Manim语法,用自然语言即可创建动画
- 语音交互:支持语音输入,解放双手,提升创作效率
- AI驱动:集成多种LLM模型,智能生成高质量代码
- 现代化UI:美观直观的Web界面,流畅的用户体验
- 多模型支持:DeepSeek、OpenAI GPT、阿里云通义千问
- 智能优化:自动代码验证和错误修复
- 即时预览:实时生成并播放动画视频
- 通义千问-Omni:高精度中英文语音识别
- 实时转换:语音直接转换为动画描述
- 多格式支持:WebM、WAV、OGG等音频格式
- 数学图形:函数、几何、代数等
- 物理仿真:自由落体、波动、碰撞等
- 自定义动画:支持复杂的动画逻辑
- 响应式设计:完美适配桌面和移动设备
- 深色主题:护眼的现代化设计风格
- 快捷操作:键盘快捷键,提升效率
- 后端框架:FastAPI + Python 3.12+
- 前端技术:原生JavaScript + Bootstrap 5
- AI模型:DeepSeek/GPT/Qwen + 通义千问-Omni
- 动画引擎:Manim Community Edition
- 音频处理:MediaRecorder API + FFmpeg
- Python: 3.12 或更高版本
- 操作系统: Windows, macOS, Linux
- 浏览器: Chrome/Edge/Firefox (支持MediaRecorder)
git clone https://github.com/your-repo/manim-gpt.git
cd manim-gpt使用 uv (推荐):
uv sync或使用 pip:
pip install -e .创建 .env 文件:
# === 必需配置 ===
# LLM API密钥 (至少配置一个)
DEEPSEEK_API_KEY=sk-your-deepseek-key
OPENAI_API_KEY=sk-your-openai-key
QWEN_API_KEY=sk-your-qwen-key
# 语音识别API密钥 (可选,用于语音功能)
DASHSCOPE_API_KEY=sk-your-dashscope-key
# === 可选配置 ===
# 默认模型设置
DEFAULT_MODEL=deepseek-chat
MAX_TOKENS=4000
TEMPERATURE=0.7
# 语音识别设置
QWEN_OMNI_MODEL=qwen2.5-omni-7b
QWEN_OMNI_VOICE=Cherry
VOICE_NETWORK_TIMEOUT=15
# 服务器设置
HOST=0.0.0.0
PORT=8000
DEBUG=true
# 代理设置 (如需要)
HTTP_PROXY=http://your-proxy:port
HTTPS_PROXY=https://your-proxy:portpython start.py打开浏览器访问:
- 主页面: http://localhost:8000
- API文档: http://localhost:8000/docs
-
在输入框中描述您想要的动画
绘制一个红色圆形从左侧移动到右侧 -
选择LLM模型和参数
-
点击"生成动画"按钮
-
点击🎤按钮开始录音
-
清晰说出动画描述
-
再次点击🎤停止录音
-
系统自动识别语音并生成动画
- Ctrl/Cmd + Enter: 快速生成动画
- Ctrl/Cmd + R: 启动语音录音
- 实时预览: 代码生成后立即播放
- 视频下载: 保存动画到本地
- 代码复制: 获取生成的Manim代码
POST /api/generate
Content-Type: application/json
{
"prompt": "绘制一个弹跳的球",
"model": "deepseek-chat",
"quality": "medium_quality",
"temperature": 0.7,
"max_tokens": 4000
}POST /api/speech-to-text
Content-Type: application/json
{
"audio_data": "base64_encoded_audio"
}更多API详情请访问: http://localhost:8000/docs
| 模型 | API Key | 特点 |
|---|---|---|
| DeepSeek | DEEPSEEK_API_KEY |
数学专业,成本低 |
| OpenAI GPT | OPENAI_API_KEY |
通用性强,质量高 |
| 通义千问 | QWEN_API_KEY |
中文优化,响应快 |
| 参数 | 说明 | 默认值 |
|---|---|---|
DASHSCOPE_API_KEY |
阿里云百炼API密钥 | - |
QWEN_OMNI_MODEL |
语音识别模型 | qwen2.5-omni-7b |
QWEN_OMNI_VOICE |
音色设置 | Cherry |
VOICE_NETWORK_TIMEOUT |
网络超时(秒) | 15 |
low_quality: 480p, 15fpsmedium_quality: 720p, 30fps (默认)high_quality: 1080p, 60fpsproduction_quality: 1440p, 60fps
manim-gpt/
├── app/ # 应用核心
│ ├── api/ # API路由
│ │ ├── routes/ # 路由定义
│ │ └── main.py # FastAPI应用
│ ├── core/ # 核心配置
│ │ └── config.py # 环境配置
│ ├── models/ # 数据模型
│ │ └── schemas.py # Pydantic模型
│ ├── services/ # 业务服务
│ │ ├── llm_service.py # LLM集成
│ │ ├── voice_service.py # 语音处理
│ │ ├── manim_service.py # Manim引擎
│ │ └── qwen_omni_service.py # 语音识别
│ ├── static/ # 静态资源
│ │ ├── css/ # 样式文件
│ │ ├── js/ # JavaScript
│ │ └── images/ # 图片资源
│ └── templates/ # HTML模板
├── outputs/ # 生成的视频
├── temp/ # 临时文件
├── tests/ # 测试文件
├── start.py # 启动脚本
├── pyproject.toml # 项目配置
└── README.md # 项目文档
# 安装开发依赖
uv sync --dev
# 代码格式化
black app/
# 代码检查
flake8 app/
# 运行测试
pytest tests/- 在
app/services/llm_service.py中添加模型适配器 - 更新
app/models/schemas.py中的模型枚举 - 在配置文件中添加相关环境变量
在 app/services/manim_service.py 中可以:
- 添加新的动画模板
- 自定义渲染参数
- 扩展视频格式支持
- 代码缓存: 相同提示词复用生成结果
- 视频缓存: 避免重复渲染
- 模型预热: 提升响应速度
- 临时文件清理: 自动清理过期文件
- 内存优化: 流式处理大文件
- 并发控制: 限制同时处理任务数
- API密钥保护: 环境变量管理,避免泄露
- 输入验证: 严格校验用户输入
- 沙箱执行: Manim代码安全隔离
- 速率限制: 防止API滥用
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install uv && uv sync --no-dev
EXPOSE 8000
CMD ["python", "start.py"]# 使用gunicorn部署
gunicorn app.api.main:app -w 4 -k uvicorn.workers.UvicornWorker我们欢迎各种形式的贡献!
- 🐛 报告Bug: 通过Issue报告问题
- 💡 功能建议: 提出新功能想法
- 📝 文档改进: 完善文档和注释
- 🔧 代码贡献: 提交Pull Request
- Fork项目
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送分支 (
git push origin feature/amazing-feature) - 创建Pull Request
- 遵循 PEP 8 Python代码规范
- 使用 Black 进行代码格式化
- 添加适当的类型注释
- 编写单元测试
本项目采用 MIT License 许可证。
- Manim Community - 优秀的数学动画引擎
- FastAPI - 现代Python Web框架
- OpenAI - 强大的语言模型
- DeepSeek - 高效的数学推理模型
- 阿里云 - 通义千问语音识别服务
- GitHub Issues: 项目Issues
- Email: your-email@example.com
- 讨论: GitHub Discussions
如果这个项目对您有帮助,请给我们一个⭐️!
Made with ❤️ by the Manim-GPT Team