首页
/ ManimGL 完整入门指南:安装、CLI 渲染参数与 custom_config.yml 配置机制

ManimGL 完整入门指南:安装、CLI 渲染参数与 custom_config.yml 配置机制

2026-09-03 15:18:48作者:管翌锬

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,而不是 manimmanimlib。这一点从 setup.cfg 可以得到源码级印证:

[metadata]
name = manimgl
version = 1.7.2
...
[options.entry_points]
console_scripts =
    manimgl = manimlib.__main__:main
    manim-render = manimlib.__main__:main

可以看到,manimglmanim-render 两个可执行命令实际上都指向同一个入口函数 manimlib/main.py 中的 main(),这也解释了 README 中 manimglmanim-render 可以互换使用的原因。

二、系统要求与依赖

ManimGL 的运行环境要求(以 README 与 setup.cfg 为准):

  • Python 3.10 或更高setup.cfgpython_requires = >=3.10,且 classifiers 声明支持 3.10 ~ 3.13;
  • FFmpeg:视频编码输出所必需;
  • OpenGL:ManimGL 的渲染后端(依赖 wgpuglfwrendercanvas 等包);
  • LaTeX(可选):仅当你要渲染 Tex 类数学公式时需要;
  • Linux 额外要求:Pango 及其开发头文件(libpango1.0-dev)。

Python 依赖由 requirements.txtsetup.cfginstall_requires 共同声明,主要包括 wgpuglfwrendercanvasmanimpango>=0.6.0numpyscipysympyPillowpydubsvgelementstrimeshmatplotlib 等。对 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)

  1. 安装系统依赖:
sudo apt update

sudo apt install ffmpeg
sudo apt install python3-pip
sudo apt install libpango1.0-dev
  1. 安装轻量 LaTeX 发行版(可选,用于 LaTeX 渲染):
sudo apt install texlive-science texlive-fonts-extra texlive-latex-extra

README 说明:这套轻量组合比 texlive-full 体积小得多,同时仍能覆盖绝大多数 Manim 项目所需。

  1. 克隆并安装 ManimGL:
git clone https://github.com/3b1b/manim.git
cd manim

python3 -m pip install -e .

manimgl example_scenes.py OpeningManimExample
  1. (可选)使用虚拟环境避免与系统包冲突:
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

  1. 安装 FFmpeg;
  2. 安装 LaTeX 发行版(README 推荐 MiKTeX);
  3. 安装 Python 包并试运行:
git clone https://github.com/3b1b/manim.git
cd manim
pip install -e .
manimgl example_scenes.py OpeningManimExample

3.4 macOS

  1. 用 Homebrew 安装 FFmpeg 与 LaTeX:
brew install ffmpeg mactex

若不想装约 6GB 的完整 MacTeX,可改装轻量的 BasicTeX,再按需逐步添加实际用到的 LaTeX 包。

  1. 若使用 ARM 架构(Apple Silicon)处理器,额外安装 Cairo:
arch -arm64 brew install pkg-config cairo
  1. 克隆并安装,运行示例:
git clone https://github.com/3b1b/manim.git
cd manim
pip install -e .
manimgl example_scenes.py OpeningManimExample

如果最后一条命令提示找不到,检查 pip 安装 manimgl 的那个目录是否已加入 PATH

3.5 Anaconda

  1. 按上述方式安装 LaTeX;
  2. conda create -n manim python=3.10 创建环境;
  3. conda activate manim 激活;
  4. pip install -e . 安装 manimgl。

四、跑起来:示例场景与执行链路

README 给出的第一个实战命令是:

manimgl example_scenes.py OpeningManimExample

这会弹出一个窗口播放一个简单场景。仓库根目录的 example_scenes.py 是官方的语法示例集(700 余行),OpeningManimExample 演示了 TextNumberPlaneIntegerMatrixComplexPlane 等 Mobject 与 WriteShowCreationFadeTransform 等动画的组合用法。

从源码看,这个命令的执行链路非常清晰:

  1. 控制台入口 manimglmanimlib/main.pymain():先打印版本,调用 parse_cli() 解析命令行,再进入 run_scenes()
  2. run_scenes() 循环调用 manimlib/extract_scene.pymain() 来装载用户模块、找出要渲染的 Scene 类,然后逐个 scene.run()
  3. 场景类若定义了模块级 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.pyupdate_file_writer_config() 会强制把编码器设为 prores_ks 并输出 .mov,因为 MP4/H.264 不支持 alpha 通道;
  • GIF 输出(-i)会清空 video_codec 走 ffmpeg 的 gif 管线;
  • 分辨率快捷标志实际取自 default_config.ymlresolution_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.pyinitialize_manim_config() 可以确认合并规则,优先级从低到高为:

  1. manimlib/default_config.yml(包内置默认值);
  2. 当前工作目录下的 custom_config.yml
  3. --config_file 指定的文件。

三者通过 merge_dicts_recursively() 递归深度合并后,再叠加命令行参数的最终覆盖。default_config.yml 的主要配置段包括:

  • directoriesmirror_module_path(是否让视频输出路径镜像源码目录结构)、basesubdirsoutput: videosraster_imagesvector_imagesthree_d_modelssoundsdatadownloadslatex_cache)、cache(TeX/Text 缓存位置,默认在 appdirs.user_cache_dir("manim"));
  • window:窗口位置(position_string: UR 等)、显示器索引、是否全屏,也可用 position: (x, y)size: (W, H) 精确指定;
  • cameraresolution: (1920, 1080)background_color: "#333333"fps: 30background_opacity,以及 GPU 性能开关 bundle_draws / draw_together(关闭后每帧都重新绘制,便于排查渲染问题);
  • file_writerffmpeg_binvideo_codec: libx264pixel_format: yuv420p,注释中还给出了无损输出组合(libx264rgb + rgb24 + crf: 0);
  • scenedefault_wait_timepreview_while_skipping 等;
  • vmobject / mobject / tex / text:默认描边宽度与颜色、Tex/Text 的字体(默认 Consolas)与单位高度字号(144);
  • sizesframe_height: 8.0 定义了 manim 坐标系相对画框的缩放,以及 SMALL_BUFF 等间距常量;
  • key_bindings:窗口交互快捷键(f 平移、r 重置、d 3D 平移、g 抓取、t 缩放、c 改色、q+command 退出等);
  • colors:完整色板(BLUE_EGREY_AGREEN_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 固化团队级的输出规范。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
980
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384