11 KiB
Manim动画最佳实践技能库
Manim 数学动画 AI技能 Python 可视化
Manim 技能仓库
⚡ 快速开始: 一条命令将两个 Manim 技能添加到你的 AI 代理:
npx skills add adithya-s-k/manim_skill
这是一个关于 Manim 社区版 和 ManimGL(3Blue1Brown 版本)的最佳实践、模式和示例的综合集合。本仓库提供经过实战验证的代码示例和指南,用于创建数学动画。
📚 两个版本介绍
Manim 社区版(manim)
- 仓库:https://github.com/ManimCommunity/manim
- 特点:社区维护、稳定、文档完善
- 适用场景:生产环境、教育内容、协作项目
- 命令:
manimCLI - 导入:
from manim import *
ManimGL(manimgl)
- 仓库:https://github.com/3b1b/manim
- 特点:Grant Sanderson(3Blue1Brown)的原版,使用 OpenGL 渲染
- 适用场景:交互式开发、3D 场景、快速原型开发
- 命令:
manimglCLI - 导入:
from manimlib import *
重要提示:这两个框架相互独立、互不兼容。为其中一个编写的代码不经修改无法在另一个上运行。
🚀 安装
前置条件(两个版本均需)
- Python 3.7+ - 必须
- FFmpeg - 用于视频编码
- LaTeX - 用于数学排版(TeX Live、MiKTeX 或 MacTeX)
安装 FFmpeg
macOS:
brew install ffmpeg
Ubuntu/Debian:
sudo apt update
sudo apt install ffmpeg
Windows: 从 https://ffmpeg.org/download.html 下载并添加到 PATH
安装 LaTeX
macOS:
brew install mactex
Ubuntu/Debian:
sudo apt install texlive-full
Windows: 从 https://miktex.org/download 安装 MiKTeX
安装 Manim 社区版
# 使用 pip
pip install manim
# 使用 uv(推荐)
uv pip install manim
# 验证安装
manim --version
文档:https://docs.manim.community/
安装 ManimGL
# 使用 pip
pip install manimgl
# 使用 uv(推荐)
uv pip install manimgl
# 验证安装
manimgl --version
macOS(ARM)额外要求:
arch -arm64 brew install pkg-config cairo
🔌 Skills.sh 集成
本仓库提供两个 AI 代理技能,可使用 skills.sh 一条命令安装:
使用 npx 安装(推荐)
# 安装 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 开放标准,可跨多种 AI 工具使用。
技能触发时机
manimce-best-practices - 在以下情况自动加载:
- 导入
from manim import * - 使用
manimCLI 命令 - 处理 Scene 类、数学动画或 LaTeX 渲染
- 使用 Manim 社区版制作教育视频或视觉说明
manimgl-best-practices - 在以下情况自动加载:
- 导入
from manimlib import * - 使用
manimglCLI 命令 - 处理 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 社区版
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()
运行:
manim -pql scene.py BasicExample
# -p:渲染后预览
# -q:质量(l=低,m=中,h=高)
ManimGL
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()
运行:
manimgl scene.py BasicExample --write_file
# --write_file:保存视频输出
# -s:跳到最后一帧
# -w:写入文件但不打开
🧪 运行测试
本仓库包含全面的测试,确保所有代码示例正常运行。
测试 Manim 社区版技能
# 测试所有文件
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 技能
# 测试所有文件
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/ 中的以下指南开始:
- scenes.md - 场景结构与生命周期
- animations.md - 基本动画模式
- mobjects.md - 创建和操作对象
- colors.md - 颜色系统与样式
- text.md - 文本与 LaTeX 渲染
ManimGL:
从 skills/manimgl-best-practices/rules/ 中的以下指南开始:
- scenes.md - 场景类型与 InteractiveScene
- animations.md - 动画基础
- camera.md - 相机移动与 3D 朝向
- 3d.md - 3D 对象创建与渲染
- interactive.md - 交互式开发工作流
🤝 贡献
发现示例有问题?想添加新的最佳实践?
- 确保你的代码示例在目标 Manim 版本上可以运行
- 将其添加到对应的技能文件中
- 运行测试验证:
uv run python tests/<版本>/test_all_skills.py <文件名> - 提交 Pull Request
📄 许可证
本仓库采用 MIT 许可证——详情请参阅 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 社区的贡献者们。
感谢你们让数学之美变得可编程、触手可及。🎓✨