413 lines
11 KiB
Markdown
413 lines
11 KiB
Markdown
# Manim动画最佳实践技能库
|
||
|
||
`Manim` `数学动画` `AI技能` `Python` `可视化`
|
||
|
||
# Manim 技能仓库
|
||
|
||

|
||

|
||

|
||

|
||

|
||
|
||
> **⚡ 快速开始:** 一条命令将两个 Manim 技能添加到你的 AI 代理:
|
||
> ```bash
|
||
> npx skills add adithya-s-k/manim_skill
|
||
> ```
|
||
|
||
这是一个关于 **Manim 社区版** 和 **ManimGL**(3Blue1Brown 版本)的最佳实践、模式和示例的综合集合。本仓库提供经过实战验证的代码示例和指南,用于创建数学动画。
|
||
|
||
## 📚 两个版本介绍
|
||
|
||
### Manim 社区版(`manim`)
|
||
- **仓库**:https://github.com/ManimCommunity/manim
|
||
- **特点**:社区维护、稳定、文档完善
|
||
- **适用场景**:生产环境、教育内容、协作项目
|
||
- **命令**:`manim` CLI
|
||
- **导入**:`from manim import *`
|
||
|
||
### ManimGL(`manimgl`)
|
||
- **仓库**:https://github.com/3b1b/manim
|
||
- **特点**:Grant Sanderson(3Blue1Brown)的原版,使用 OpenGL 渲染
|
||
- **适用场景**:交互式开发、3D 场景、快速原型开发
|
||
- **命令**:`manimgl` CLI
|
||
- **导入**:`from manimlib import *`
|
||
|
||
> **重要提示**:这两个框架**相互独立、互不兼容**。为其中一个编写的代码不经修改无法在另一个上运行。
|
||
|
||
---
|
||
|
||
## 🚀 安装
|
||
|
||
### 前置条件(两个版本均需)
|
||
1. **Python 3.7+** - 必须
|
||
2. **FFmpeg** - 用于视频编码
|
||
3. **LaTeX** - 用于数学排版(TeX Live、MiKTeX 或 MacTeX)
|
||
|
||
#### 安装 FFmpeg
|
||
|
||
**macOS:**
|
||
```bash
|
||
brew install ffmpeg
|
||
```
|
||
|
||
**Ubuntu/Debian:**
|
||
```bash
|
||
sudo apt update
|
||
sudo apt install ffmpeg
|
||
```
|
||
|
||
**Windows:**
|
||
从 https://ffmpeg.org/download.html 下载并添加到 PATH
|
||
|
||
#### 安装 LaTeX
|
||
|
||
**macOS:**
|
||
```bash
|
||
brew install mactex
|
||
```
|
||
|
||
**Ubuntu/Debian:**
|
||
```bash
|
||
sudo apt install texlive-full
|
||
```
|
||
|
||
**Windows:**
|
||
从 https://miktex.org/download 安装 MiKTeX
|
||
|
||
---
|
||
|
||
### 安装 Manim 社区版
|
||
|
||
```bash
|
||
# 使用 pip
|
||
pip install manim
|
||
|
||
# 使用 uv(推荐)
|
||
uv pip install manim
|
||
|
||
# 验证安装
|
||
manim --version
|
||
```
|
||
|
||
**文档**:https://docs.manim.community/
|
||
|
||
---
|
||
|
||
### 安装 ManimGL
|
||
|
||
```bash
|
||
# 使用 pip
|
||
pip install manimgl
|
||
|
||
# 使用 uv(推荐)
|
||
uv pip install manimgl
|
||
|
||
# 验证安装
|
||
manimgl --version
|
||
```
|
||
|
||
**macOS(ARM)额外要求:**
|
||
```bash
|
||
arch -arm64 brew install pkg-config cairo
|
||
```
|
||
|
||
---
|
||
|
||
## 🔌 Skills.sh 集成
|
||
|
||
本仓库提供两个 **AI 代理技能**,可使用 [skills.sh](https://skills.sh/) 一条命令安装:
|
||
|
||
### 使用 npx 安装(推荐)
|
||
|
||
```bash
|
||
# 安装 Manim 社区版最佳实践
|
||
npx skills add adithya-s-k/manim_skill/skills/manimce-best-practices
|
||
|
||
# 安装 ManimGL 最佳实践
|
||
npx skills add adithya-s-k/manim_skill/skills/manimgl-best-practices
|
||
|
||
# 或同时安装两者
|
||
npx skills add adithya-s-k/manim_skill/skills/manimce-best-practices adithya-s-k/manim_skill/skills/manimgl-best-practices
|
||
```
|
||
|
||
### 什么是技能(Skills)?
|
||
|
||
技能是 **AI 编程代理的可复用能力**。安装后,你的 AI 助手(如 Claude、GitHub Copilot 或 Cursor)将自动获得:
|
||
- ✅ 领域专属最佳实践
|
||
- ✅ 可运行的代码示例
|
||
- ✅ 常用模式与反模式
|
||
- ✅ 框架专项知识
|
||
|
||
技能遵循 [Agent Skills 开放标准](https://github.com/anthropics/skills),可跨多种 AI 工具使用。
|
||
|
||
### 技能触发时机
|
||
|
||
**manimce-best-practices** - 在以下情况自动加载:
|
||
- 导入 `from manim import *`
|
||
- 使用 `manim` CLI 命令
|
||
- 处理 Scene 类、数学动画或 LaTeX 渲染
|
||
- 使用 Manim 社区版制作教育视频或视觉说明
|
||
|
||
**manimgl-best-practices** - 在以下情况自动加载:
|
||
- 导入 `from manimlib import *`
|
||
- 使用 `manimgl` CLI 命令
|
||
- 处理 InteractiveScene、3D 渲染或相机帧控制
|
||
- 使用 `.embed()` 或 `checkpoint_paste()` 的交互模式
|
||
|
||
---
|
||
|
||
## 📖 使用本仓库
|
||
|
||
### 仓库结构
|
||
|
||
```
|
||
manim_skill/
|
||
├── skills/
|
||
│ ├── manimce-best-practices/ # Manim 社区版技能
|
||
│ │ ├── SKILL.md # 技能元数据
|
||
│ │ └── rules/ # 各项最佳实践指南
|
||
│ │ ├── animations.md
|
||
│ │ ├── scenes.md
|
||
│ │ ├── mobjects.md
|
||
│ │ └── ...
|
||
│ │
|
||
│ └── manimgl-best-practices/ # ManimGL 技能
|
||
│ ├── SKILL.md
|
||
│ └── rules/
|
||
│ ├── animations.md
|
||
│ ├── 3d.md
|
||
│ ├── camera.md
|
||
│ └── ...
|
||
│
|
||
└── tests/
|
||
├── manimce/ # 社区版测试
|
||
└── manimgl/ # ManimGL 测试
|
||
```
|
||
|
||
### 每个技能文件包含什么?
|
||
|
||
每个 `.md` 文件包含:
|
||
- 特定 Manim 功能的**最佳实践**
|
||
- **可运行的代码示例**(全部经过测试!)
|
||
- **常用模式**和使用场景
|
||
- **需要避免的坑**
|
||
- 两个版本之间的 **API 差异**
|
||
|
||
---
|
||
|
||
## 🎯 快速示例
|
||
|
||
### Manim 社区版
|
||
|
||
```python
|
||
from manim import *
|
||
|
||
class BasicExample(Scene):
|
||
def construct(self):
|
||
circle = Circle()
|
||
circle.set_fill(BLUE, opacity=0.5)
|
||
circle.set_stroke(BLUE_E, width=4)
|
||
|
||
self.play(Create(circle))
|
||
self.wait()
|
||
```
|
||
|
||
**运行:**
|
||
```bash
|
||
manim -pql scene.py BasicExample
|
||
# -p:渲染后预览
|
||
# -q:质量(l=低,m=中,h=高)
|
||
```
|
||
|
||
### ManimGL
|
||
|
||
```python
|
||
from manimlib import *
|
||
|
||
class BasicExample(InteractiveScene):
|
||
def construct(self):
|
||
circle = Circle()
|
||
circle.set_fill(BLUE, opacity=0.5)
|
||
circle.set_stroke(BLUE_E, width=4)
|
||
|
||
self.play(ShowCreation(circle))
|
||
self.wait()
|
||
```
|
||
|
||
**运行:**
|
||
```bash
|
||
manimgl scene.py BasicExample --write_file
|
||
# --write_file:保存视频输出
|
||
# -s:跳到最后一帧
|
||
# -w:写入文件但不打开
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 运行测试
|
||
|
||
本仓库包含全面的测试,确保所有代码示例正常运行。
|
||
|
||
### 测试 Manim 社区版技能
|
||
|
||
```bash
|
||
# 测试所有文件
|
||
uv run python tests/manimce/test_all_skills.py
|
||
|
||
# 测试特定文件
|
||
uv run python tests/manimce/test_all_skills.py animations.md
|
||
|
||
# 多线程运行(更快)
|
||
uv run python tests/manimce/test_all_skills.py -j 4
|
||
```
|
||
|
||
### 测试 ManimGL 技能
|
||
|
||
```bash
|
||
# 测试所有文件
|
||
uv run python tests/manimgl/test_all_skills.py
|
||
|
||
# 测试特定文件
|
||
uv run python tests/manimgl/test_all_skills.py 3d.md
|
||
|
||
# 多线程运行(注意内存)
|
||
uv run python tests/manimgl/test_all_skills.py -j 4
|
||
```
|
||
|
||
> **注意**:使用过多线程进行并行测试可能导致内存溢出。最多使用 4-6 个线程,或逐文件测试。
|
||
|
||
---
|
||
|
||
## 🔍 两个版本的主要区别
|
||
|
||
| 功能 | Manim 社区版 | ManimGL |
|
||
|------|-------------|---------|
|
||
| **导入** | `from manim import *` | `from manimlib import *` |
|
||
| **CLI 命令** | `manim` | `manimgl` |
|
||
| **场景基类** | `Scene`、`MovingCameraScene` | `Scene`、`InteractiveScene` |
|
||
| **创建动画** | `Create()` | `ShowCreation()` |
|
||
| **文本类** | `Text()`、`MathTex()` | `Text()`、`Tex()` |
|
||
| **3D 渲染** | 有限支持 | 完整 OpenGL 支持 |
|
||
| **交互模式** | 无 | 有(`-se` 标志、`.embed()`) |
|
||
| **相机控制** | `MovingCameraScene` | `self.camera.frame` |
|
||
| **配置方式** | Python 配置 | YAML 文件 |
|
||
| **颜色常量** | 相同 | 相同 + 变体(如 `BLUE_A`、`BLUE_E`) |
|
||
|
||
---
|
||
|
||
## 📚 探索技能内容
|
||
|
||
### Manim 社区版:
|
||
从 `skills/manimce-best-practices/rules/` 中的以下指南开始:
|
||
1. **scenes.md** - 场景结构与生命周期
|
||
2. **animations.md** - 基本动画模式
|
||
3. **mobjects.md** - 创建和操作对象
|
||
4. **colors.md** - 颜色系统与样式
|
||
5. **text.md** - 文本与 LaTeX 渲染
|
||
|
||
### ManimGL:
|
||
从 `skills/manimgl-best-practices/rules/` 中的以下指南开始:
|
||
1. **scenes.md** - 场景类型与 InteractiveScene
|
||
2. **animations.md** - 动画基础
|
||
3. **camera.md** - 相机移动与 3D 朝向
|
||
4. **3d.md** - 3D 对象创建与渲染
|
||
5. **interactive.md** - 交互式开发工作流
|
||
|
||
---
|
||
|
||
## 🤝 贡献
|
||
|
||
发现示例有问题?想添加新的最佳实践?
|
||
|
||
1. 确保你的代码示例在目标 Manim 版本上可以运行
|
||
2. 将其添加到对应的技能文件中
|
||
3. 运行测试验证:`uv run python tests/<版本>/test_all_skills.py <文件名>`
|
||
4. 提交 Pull Request
|
||
|
||
---
|
||
|
||
## 📄 许可证
|
||
|
||
本仓库采用 MIT 许可证——详情请参阅 [LICENSE](LICENSE) 文件。
|
||
|
||
**注意**:此许可证适用于本仓库中的教育材料和代码示例。底层 Manim 框架(Manim 社区版和 ManimGL)有各自的许可证。
|
||
|
||
---
|
||
|
||
## 🔗 相关资源
|
||
|
||
### Manim 社区版
|
||
- **文档**:https://docs.manim.community/
|
||
- **Discord**:https://www.manim.community/discord/
|
||
- **GitHub**:https://github.com/ManimCommunity/manim
|
||
|
||
### ManimGL
|
||
- **文档**:https://3b1b.github.io/manim/
|
||
- **GitHub**:https://github.com/3b1b/manim
|
||
- **教程视频**:Grant 的 YouTube 频道
|
||
|
||
### 综合
|
||
- **3Blue1Brown**:https://www.youtube.com/@3blue1brown
|
||
- **Manim 社区**:https://www.manim.community/
|
||
|
||
---
|
||
|
||
## ⚠️ 常见问题排查
|
||
|
||
### 常见问题
|
||
|
||
**"找不到命令:manim/manimgl"**
|
||
- 验证安装:`pip list | grep manim`
|
||
- 检查 PATH 配置
|
||
- 尝试:`python -m manim` 或 `python -m manimlib`
|
||
|
||
**LaTeX 错误**
|
||
- 安装完整版 LaTeX 发行版(非基础版)
|
||
- ManimCE:尝试 `manim --tex_template <模板>` 更换不同模板
|
||
- ManimGL:检查 `custom_defaults.yml` 中的 LaTeX 配置
|
||
|
||
**视频无法播放**
|
||
- 为你的操作系统安装媒体编解码器
|
||
- 尝试不同质量设置(`-ql`、`-qm`、`-qh`)
|
||
- 检查 FFmpeg 安装:`ffmpeg -version`
|
||
|
||
**内存溢出(并行测试)**
|
||
- 减少线程数:`-j 2` 或 `-j 4`
|
||
- 逐文件测试
|
||
- 关闭其他应用程序
|
||
|
||
**导入错误 / 版本错误**
|
||
- 确认导入了正确的版本:
|
||
- `from manim import *` → Manim 社区版
|
||
- `from manimlib import *` → ManimGL
|
||
- 卸载冲突版本:`pip uninstall manim manimgl manimlib`
|
||
- 重新安装所需版本
|
||
|
||
---
|
||
|
||
## 🙏 致谢
|
||
|
||
本仓库的诞生得益于以下人士的杰出工作:
|
||
|
||
### Grant Sanderson(3Blue1Brown)
|
||
**Manim** 动画引擎的原始创建者和 **3Blue1Brown** YouTube 频道的主理人。Grant 在数学可视化领域的开创性工作激励了全球数以百万计的学习者,并为通过程序化动画解释复杂概念创造了全新范式。他对开源教育和视觉叙事的坚持,从根本上改变了数学的教与学方式。
|
||
|
||
**网站**:https://www.3blue1brown.com/
|
||
**YouTube**:https://www.youtube.com/@3blue1brown
|
||
**Manim(ManimGL)**:https://github.com/3b1b/manim
|
||
|
||
### Manim 社区
|
||
维护 **Manim 社区版** 的专注团队和贡献者们,确保框架保持易用性、文档完整性和持续开发。他们在创建全面文档、管理社区支持和持续改进代码库方面的不懈努力,使数学动画对教育者、学生和创作者都触手可及。
|
||
|
||
**网站**:https://www.manim.community/
|
||
**GitHub**:https://github.com/ManimCommunity/manim
|
||
**Discord**:https://www.manim.community/discord/
|
||
|
||
---
|
||
|
||
### 站在巨人的肩膀上
|
||
|
||
两个框架都凝聚了无数小时的开发、文档、社区支持和创造性问题解决。本仓库的目标仅是整理和分享关于这些强大工具的知识。底层技术的所有荣誉归属于 Grant Sanderson 和 Manim 社区的贡献者们。
|
||
|
||
感谢你们让数学之美变得可编程、触手可及。🎓✨ |