ManimGL 完整入门指南:安装、CLI 渲染参数与 custom_config.yml 配置机制
ManimGL 是 3Blue1Brown 作者维护的 OpenGL 加速程序化动画引擎,专为制作精确的数学讲解视频而设计。本篇基于仓库 README 与核心源码,完整覆盖 ManimGL 的环境搭建(Linux / Windows / macOS / Anaconda)、manimgl 命令行的全部渲染参数、三层配置合并机制,以及从源码层面理解 manimgl file.py SceneName 的完整执行链路,帮助读者从零跑通第一个动画场景并掌握输出文件、分辨率、透明渲染等常用生产配置。
一、ManimGL 是什么:先分清两个版本
README 开宗明义:Manim is an engine for precise programmatic animations, designed for creating explanatory math videos——它是一个用于精确程序化动画的引擎,目标场景是数学讲解视频。
这里有一个必须首先厘清的事实(README 中用 Warning 级别强调):manim 存在两个版本。
- 本仓库(ManimGL):起源于 3Blue1Brown 作者的私人项目,为动画制作视频而生,配套的视频源码在 3b1b/videos 仓库中。它以 OpenGL/WGPU 为渲染后端,包名是
manimgl。 - 社区版(Manim Community):2020 年由开发者群体 fork 而来,目标是更稳定、测试更完善、对社区贡献响应更快。两者包名、安装命令互不兼容——用本仓库的说明去装社区版,或用社区版的说明来装 ManimGL,都会出问题。
因此 README 特别提示:直接 pip 安装时请注意包名。本仓库对应的 PyPI 包名是 manimgl,而不是 manim 或 manimlib。这一点从 setup.cfg 可以得到源码级印证:
[metadata]
name = manimgl
version = 1.7.2
...
[options.entry_points]
console_scripts =
manimgl = manimlib.__main__:main
manim-render = manimlib.__main__:main
可以看到,manimgl 和 manim-render 两个可执行命令实际上都指向同一个入口函数 manimlib/main.py 中的 main(),这也解释了 README 中 manimgl 与 manim-render 可以互换使用的原因。
二、系统要求与依赖
ManimGL 的运行环境要求(以 README 与 setup.cfg 为准):
- Python 3.10 或更高:
setup.cfg中python_requires = >=3.10,且 classifiers 声明支持 3.10 ~ 3.13; - FFmpeg:视频编码输出所必需;
- OpenGL:ManimGL 的渲染后端(依赖
wgpu、glfw、rendercanvas等包); - LaTeX(可选):仅当你要渲染
Tex类数学公式时需要; - Linux 额外要求:Pango 及其开发头文件(
libpango1.0-dev)。
Python 依赖由 requirements.txt 与 setup.cfg 的 install_requires 共同声明,主要包括 wgpu、glfw、rendercanvas、manimpango>=0.6.0、numpy、scipy、sympy、Pillow、pydub、svgelements、trimesh、matplotlib 等。对 Python 3.13 还会额外安装 audioop-lts(因标准库 audioop 被移除)。
三、安装方式
3.1 直接 pip 安装(最简单)
# Install manimgl
pip install manimgl
# Try it out
manimgl
单独运行 manimgl(不带任何文件参数)会启动一个空白的交互式场景——从源码看,extract_scene.py 中定义了 BlankScene,当没有传入模块时就会运行它并直接进入 IPython 嵌入会话(self.embed()),适合快速试验 API。
若希望直接修改 manimlib 源码,则需克隆本仓库并以可编辑模式安装:
# Install manimgl
pip install -e .
# Try it out
manimgl example_scenes.py OpeningManimExample
# or
manim-render example_scenes.py OpeningManimExample
3.2 Linux(Ubuntu/Debian)
- 安装系统依赖:
sudo apt update
sudo apt install ffmpeg
sudo apt install python3-pip
sudo apt install libpango1.0-dev
- 安装轻量 LaTeX 发行版(可选,用于 LaTeX 渲染):
sudo apt install texlive-science texlive-fonts-extra texlive-latex-extra
README 说明:这套轻量组合比 texlive-full 体积小得多,同时仍能覆盖绝大多数 Manim 项目所需。
- 克隆并安装 ManimGL:
git clone https://github.com/3b1b/manim.git
cd manim
python3 -m pip install -e .
manimgl example_scenes.py OpeningManimExample
- (可选)使用虚拟环境避免与系统包冲突:
sudo apt install python3-venv
python3 -m venv venv
source venv/bin/activate
python3 -m pip install -e .
若系统没有 python3-venv 包,可改装版本号对应的包,例如 sudo apt install python3.12-venv。
3.3 Windows
- 安装 FFmpeg;
- 安装 LaTeX 发行版(README 推荐 MiKTeX);
- 安装 Python 包并试运行:
git clone https://github.com/3b1b/manim.git
cd manim
pip install -e .
manimgl example_scenes.py OpeningManimExample
3.4 macOS
- 用 Homebrew 安装 FFmpeg 与 LaTeX:
brew install ffmpeg mactex
若不想装约 6GB 的完整 MacTeX,可改装轻量的 BasicTeX,再按需逐步添加实际用到的 LaTeX 包。
- 若使用 ARM 架构(Apple Silicon)处理器,额外安装 Cairo:
arch -arm64 brew install pkg-config cairo
- 克隆并安装,运行示例:
git clone https://github.com/3b1b/manim.git
cd manim
pip install -e .
manimgl example_scenes.py OpeningManimExample
如果最后一条命令提示找不到,检查 pip 安装 manimgl 的那个目录是否已加入 PATH。
3.5 Anaconda
- 按上述方式安装 LaTeX;
conda create -n manim python=3.10创建环境;conda activate manim激活;pip install -e .安装 manimgl。
四、跑起来:示例场景与执行链路
README 给出的第一个实战命令是:
manimgl example_scenes.py OpeningManimExample
这会弹出一个窗口播放一个简单场景。仓库根目录的 example_scenes.py 是官方的语法示例集(700 余行),OpeningManimExample 演示了 Text、NumberPlane、IntegerMatrix、ComplexPlane 等 Mobject 与 Write、ShowCreation、FadeTransform 等动画的组合用法。
从源码看,这个命令的执行链路非常清晰:
- 控制台入口
manimgl→ manimlib/main.py 的main():先打印版本,调用parse_cli()解析命令行,再进入run_scenes(); run_scenes()循环调用 manimlib/extract_scene.py 的main()来装载用户模块、找出要渲染的 Scene 类,然后逐个scene.run();- 场景类若定义了模块级
SCENES_IN_ORDER列表则按该顺序渲染,否则通过is_child_scene()筛选本模块内所有Scene子类;当没有匹配到指定名字的场景时,会交互式列出全部场景让用户选择。
这个模块还带来几个实用行为:
-e <行号>断点嵌入:insert_embed_line_to_module()会在源文件指定行后插入self.embed(),把该处变成交互式 IPython 会话,用于边渲染边调试动画;--prerun:写入文件前先用skip_animations=True空跑一遍compute_total_frames(),统计总帧数以显示整体进度条,并提前暴露长场景的运行时错误。
五、CLI 参数全解:比 README 更多
README 列出了几个常用标志(-w、-o、-s、-n、-f),而 config.py 中的 parse_cli() 定义了完整的参数表,值得逐一了解:
| 参数 | 作用 |
|---|---|
file / scene_names |
场景文件路径(可省略)与要渲染的 Scene 类名(可多个,省略则交互式选择) |
-w / --write_file |
将场景渲染为视频文件 |
-o / --open |
渲染完自动打开输出文件(源码中 -o 会隐式开启 -w) |
--finder |
渲染完成后在 Finder 中显示文件位置(macOS) |
-s / --skip_animations |
跳过动画直接生成最后一帧 |
-l / --low_quality |
480p(854x480)渲染 |
-m / --medium_quality |
720p(1280x720)渲染 |
--hd |
1080p(1920x1080)渲染 |
--uhd |
4K(3840x2160)渲染 |
-r "WxH" / --fps |
自定义分辨率与帧率,如 -r 1920x1080 --fps 60 |
-f / --full_screen |
窗口全屏播放 |
-p / --presenter_mode |
演示者模式:wait 期间暂停,按空格/右箭头继续 |
-n 3 / -n 3,6 |
从第 3 个动画开始渲染;3,6 表示到第 6 个动画结束 |
-i / --gif |
输出为 GIF |
-t / --transparent |
带 alpha 通道渲染(输出 .mov + ProRes 编码) |
-c <color> / --color |
设置背景色 |
--vcodec / --pix_fmt |
指定 ffmpeg 视频编码 / 像素格式(默认 yuv420p) |
-a / --write_all |
渲染文件中所有场景 |
-e <line> |
在指定行处嵌入 IPython 交互会话 |
--file_name |
指定输出文件名 |
--subdivide |
把输出拆分为每个动画一个独立视频文件 |
--video_dir |
覆盖视频输出目录 |
--config_file |
指定自定义配置文件路径 |
--log-level |
日志级别:DEBUG / INFO / WARNING / ERROR / CRITICAL |
--clear-cache |
清除 Tex/Text 的缓存 |
--leave_progress_bars / --show_animation_progress |
终端进度条控制 |
--prerun |
预跑统计总帧数 |
--autoreload |
跨文件自动重载 Python 模块 |
-v / --version |
显示版本号 |
-q / --quiet |
静默输出 |
几个与渲染输出直接相关的源码细节:
- 透明度渲染时,config.py 的
update_file_writer_config()会强制把编码器设为prores_ks并输出.mov,因为 MP4/H.264 不支持 alpha 通道; - GIF 输出(
-i)会清空video_codec走 ffmpeg 的 gif 管线; - 分辨率快捷标志实际取自 default_config.yml 的
resolution_options段:low: (854, 480)、med: (1280, 720)、high: (1920, 1080)、4k: (3840, 2160),这些值均可在自定义配置中覆盖。
六、custom_config.yml:三层配置合并机制
README 建议:“Take a look at custom_config.yml for further configuration”,并说明可以编辑仓库内的 custom_config.yml,或在你运行 manim 的目录下新建同名文件来覆盖默认值——3blue1brown 视频项目的配置就是这样做的。
从 config.py 的 initialize_manim_config() 可以确认合并规则,优先级从低到高为:
- manimlib/default_config.yml(包内置默认值);
- 当前工作目录下的
custom_config.yml; --config_file指定的文件。
三者通过 merge_dicts_recursively() 递归深度合并后,再叠加命令行参数的最终覆盖。default_config.yml 的主要配置段包括:
directories:mirror_module_path(是否让视频输出路径镜像源码目录结构)、base与subdirs(output: videos、raster_images、vector_images、three_d_models、sounds、data、downloads、latex_cache)、cache(TeX/Text 缓存位置,默认在appdirs.user_cache_dir("manim"));window:窗口位置(position_string: UR等)、显示器索引、是否全屏,也可用position: (x, y)、size: (W, H)精确指定;camera:resolution: (1920, 1080)、background_color: "#333333"、fps: 30、background_opacity,以及 GPU 性能开关bundle_draws/draw_together(关闭后每帧都重新绘制,便于排查渲染问题);file_writer:ffmpeg_bin、video_codec: libx264、pixel_format: yuv420p,注释中还给出了无损输出组合(libx264rgb+rgb24+crf: 0);scene:default_wait_time、preview_while_skipping等;vmobject/mobject/tex/text:默认描边宽度与颜色、Tex/Text 的字体(默认Consolas)与单位高度字号(144);sizes:frame_height: 8.0定义了 manim 坐标系相对画框的缩放,以及SMALL_BUFF等间距常量;key_bindings:窗口交互快捷键(f平移、r重置、d3D 平移、g抓取、t缩放、c改色、q+command 退出等);colors:完整色板(BLUE_E…GREY_A、GREEN_SCREEN等),场景代码中直接引用。
一个典型的自定义 custom_config.yml 示例(覆盖输出位置与默认质量):
directories:
base: /path/to/my/project
mirror_module_path: True
camera:
resolution: (1920, 1080)
background_color: "#1C1C1C"
text:
font: "STIX Two Math"
tex:
font_size_for_unit_height: 144
七、文档、贡献与许可
- 官方文档在制作用中(3b1b.github.io/manim),仓库内 docs/source 已含安装、快速上手、示例场景(getting_started)、动画/摄像机/Scene 等主题页(如 docs/source/documentation/animation/index.rst);另有社区维护的中文版文档。
- 贡献:README 说明社区版生态更活跃(有测试与 CI),但本仓库同样接受 PR,要求解释改动动机并给出效果示例。
- 许可:MIT License,见 LICENSE.md。
八、小结
ManimGL 的使用模型可以概括为三句话:一条命令驱动(manimgl file.py SceneName,可选参数控制输出形式、质量与渲染范围)、三层配置合并(default_config.yml → 工作目录 custom_config.yml → --config_file,命令行最终覆盖)、GPU 实时预览 + FFmpeg 落盘(OpenGL 渲染预览,-w/-o 经 libx264 输出 MP4,-t 输出透明 ProRes)。理解 config.py 中的参数解析与 extract_scene.py 中的场景装载逻辑后,你就能把示例场景替换为自己的数学内容,用 -n 3,6 这类参数高效迭代,并用 custom_config.yml 固化团队级的输出规范。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00