Manim 全面对比:3b1b 原版 vs 社区版,87k+39k star 的两个数学动画引擎怎么选

痛点切入

你看过 3Blue1Brown 的视频——那些丝滑的数学可视化动画,傅里叶变换在屏幕上旋转,线性代数的矩阵变换实时作用于几何图形。你想做类似的东西,但打开 PowerPoint 做不出来,用 After Effects 调参数调到崩溃,用 Blender 建模建到怀疑人生。

问题不是”哪个工具能做动画”,而是哪个工具能让你用代码精确描述”第 3 秒让这条曲线从蓝色渐变为红色,同时镜头从俯视旋转 45 度到侧视”这种事

Manim 就是为这个需求而生的。它是 3Blue1Brown 视频背后的那个引擎,87.8k GitHub star,MIT 协议,Python 写的。

项目简介

Manim 全称 Mathematical Animation Engine,由 Grant Sanderson(3Blue1Brown 频道主理人)开发。但”Manim”现在指两个不同的项目,这是新手最常踩的坑:

3b1b/manim(原版)ManimCommunity/manim(社区版)
Star87.8k39.1k
Fork7.3k2.9k
Watcher93352
提交数6,3696,264
pip 包名manimglmanim
渲染引擎OpenGL(GPU)Cairo(CPU),可选 OpenGL
语言占比Python 96.4%,GLSL 3.6%Python 98.2%,GLSL 1.6%
最新版本v1.7.2(2024-12)v0.20.1(2026-02)
发布数1333
文档基础,以示例为主完善,ReadTheDocs + 官网
测试无 CI完整 CI + Codecov
Docker官方镜像
Jupyter%%manim magic
协议MITMIT(双版权方)

简单说:3b1b/manim 是 Grant 自己用的版本,ManimCommunity/manim 是给社区用的版本。

2020 年社区 fork 出了 Manim Community Edition,目标是更稳定、测试更完善、社区贡献更友好。Grant 本人继续维护自己的版本,但社区版才是目前活跃开发的主流选择。

为什么是它

代码即动画:精确到像素的控制

Manim 的核心理念是用 Python 代码描述动画,而不是拖拽时间线。两个版本都支持:

  • 每个对象在每一帧的位置、颜色、缩放
  • 镜头运动的起止时间、插值方式、旋转角度
  • LaTeX 公式的逐符号高亮和变换
  • 3D 场景的相机轨迹和光照

这不是”做个动画”,而是”用代码描述一个数学对象在时间维度上的变化”。你写的不是脚本,是数学对象的行为定义。

渲染管线:OpenGL vs Cairo,核心分歧

这是两个版本最本质的区别:

3b1b/manim 用 OpenGL(GPU 渲染):

  • 实时预览窗口——写代码时直接看到动画效果,不用等渲染
  • GPU 加速——复杂场景渲染速度比 CPU 方案快一个数量级
  • GLSL 着色器——可以写自定义视觉效果,项目里 3.6% 的代码就是 GLSL
  • 代价:需要 OpenGL 支持,macOS ARM 需要额外装 Cairo,系统要求更高

ManimCommunity/manim 用 Cairo(CPU 渲染):

  • 跨平台兼容性更好——不需要 GPU 支持
  • 渲染结果更可预测——Cairo 的 2D 渲染一致性高
  • 可选 OpenGL 后端——社区版也支持切换到 OpenGL,但默认是 Cairo
  • 代价:渲染速度较慢,复杂场景可能需要等

选择建议: 如果你要做 3D 场景或需要实时预览,选 3b1b 版本。如果你主要做 2D 数学动画、看重稳定性,社区版更省心。

3Blue1Brown 的实战背书

3b1b/manim 的最大优势是经过真实项目验证。3Blue1Brown 的每一期视频都是用它做的,所有源代码在 3b1b/videos 开放。这意味着:

  • API 经过真实项目验证,不是理论设计
  • 有大量真实场景的代码参考
  • 作者自己在用,遇到问题会修

社区版的优势则是工程化程度更高:完整的 CI 流水线、Codecov 覆盖率、官方 Docker 镜像、Jupyter magic 命令、33 次发布(对比原版 13 次)。它更像一个”正经的开源项目”,而不是”某个人的工具刚好开源了”。

快速上手

3b1b 原版(ManimGL)

# 安装(注意包名是 manimgl)
pip install manimgl

# 运行示例
manimgl example_scenes.py OpeningManimExample

注意:系统依赖:FFmpeg、OpenGL、LaTeX(可选,用公式时需要)。macOS 用 homebrew 装:

brew install ffmpeg mactex
# ARM Mac 还需要装 Cairo
arch -arm64 brew install pkg-config cairo

社区版(ManimCE)

# 安装(注意包名是 manim)
pip install manim

# 运行示例
manim -p -ql example.py SquareToCircle

社区版的文档更完善,安装指南在 docs.manim.community。还支持 Docker 一键启动:

docker run -it -v "$PWD":/ manimcommunity/manim manim -p -ql example.py SquareToCircle

也支持 Jupyter Notebook 里直接用 %%manim magic 命令。

代码对比

两个版本的 API 有差异。同一个”正方形变圆”的动画:

3b1b 版本:

from manimlib import *

class SquareToCircle(Scene):
    def construct(self):
        circle = Circle()
        square = Square()
        square.flip(RIGHT)
        square.rotate(-3 * TAU / 8)
        circle.set_fill(PINK, opacity=0.5)

        self.play(ShowCreation(square))
        self.play(Transform(square, circle))
        self.play(FadeOut(square))

社区版:

from manim import *

class SquareToCircle(Scene):
    def construct(self):
        circle = Circle()
        square = Square()
        square.flip(RIGHT)
        square.rotate(-3 * TAU / 8)
        circle.set_fill(PINK, opacity=0.5)

        self.play(Create(square))
        self.play(Transform(square, circle))
        self.play(FadeOut(square))

注意区别:from manimlib import * vs from manim import *ShowCreation vs Create。两个版本的类名和方法名有差异,代码不能直接互换。

亮点代码

3b1b/videos 仓库里有所有 3Blue1Brown 视频的源代码。举个例子,《线性代数的本质》系列里,矩阵变换是这样实现的:

# 矩阵作用于平面的动画(简化版)
class MatrixTransformation(Scene):
    def construct(self):
        # 创建坐标平面
        plane = NumberPlane()
        
        # 创建一个向量
        vector = Arrow(ORIGIN, [2, 1, 0], color=YELLOW)
        
        # 矩阵变换:shear
        matrix = [[1, 1], [0, 1]]
        
        # 先显示平面和向量
        self.play(ShowCreation(plane))
        self.play(ShowCreation(vector))
        
        # 应用矩阵变换,整个平面跟着变
        self.play(plane.animate.apply_matrix(matrix))
        self.play(vector.animate.apply_matrix(matrix))
        self.wait()

这段代码做了什么:先显示一个坐标平面和一个向量,然后一个 shear 变换同时作用于平面和向量——观众能直观看到”矩阵就是空间的变换”。

更复杂的场景,比如《傅里叶变换》里的旋转矢量叠加,在 3b1b/videos 仓库里都有完整源码。那些视频里每一帧的数学精度、颜色搭配、镜头运动,全都是代码控制的。

两个版本怎么选

选 3b1b/manim 的情况

  • 你要做 3D 场景——OpenGL 渲染管线对 3D 支持更好
  • 你想复刻 3Blue1Brown 的风格——这就是原版,API 和视频源码完全对应
  • 你需要实时预览——写代码时直接弹窗看效果,不用等渲染
  • 你要写自定义 GLSL 着色器——项目本身就有 3.6% 的 GLSL 代码
  • 你愿意自己啃文档和源码——社区版的文档更全,但原版更灵活

选 ManimCommunity/manim 的情况

  • 你是新手——文档完善、安装简单、社区活跃
  • 你要稳定生产——33 次发布、完整 CI、Codecov 覆盖
  • 你需要Docker 部署——官方镜像开箱即用
  • 你要在Jupyter Notebook 里用——%%manim magic 命令直接跑
  • 你做2D 数学动画——Cairo 渲染足够,兼容性更好
  • 你想贡献代码——社区版的贡献流程更规范

不能混装

两个版本的 pip 包名不同(manimgl vs manim),import 路径不同(from manimlib import * vs from manim import *),部分 API 方法名不同(ShowCreation vs Create)。不要在同一环境里同时装两个版本,会冲突。

社区资源

适用场景与局限

适合用的场景:

  • 数学/物理教学视频——这是它的本职工作
  • 数据可视化的动画版本——比静态图表更有表现力
  • 科技媒体内容——YouTube/B 站的数学科普视频
  • 学术演示——用动画解释论文中的数学概念

不适合的场景:

  • 快速做个 GIF 发社交媒体——杀鸡用牛刀,用 ffmpeg + PIL 更快
  • 商业广告动画——Manim 的视觉风格偏学术,不适合商业审美
  • 实时交互应用——它是离线渲染引擎,不是游戏引擎
  • 非数学内容——为数学动画设计的 API,做其他事情会很别扭

踩坑提醒:

  • pip 包名是 manimgl,不是 manim。装错包会和社区版冲突
  • macOS ARM 需要额外装 Cairo,否则会报错
  • 3b1b 版本的文档不如社区版完善,遇到问题多看源码和 3b1b/videos 的示例
  • 代码从旧版本迁移到新版本可能有 breaking changes——3b1b/videos 仓库的 README 里提到了这一点

结论

Manim 不是”另一个动画库”。它是”用代码描述数学对象在时间中的行为”这个理念的最纯粹实现。87.8k + 39.1k 的双仓库 star 说明了一件事:数学可视化动画的需求是真实的,而且两个版本各自满足了不同的用户群体。

如果你想做 3Blue1Brown 风格的 3D 动画,愿意啃文档,选 manimgl。如果你是新手、做 2D 动画、看重稳定性和文档,选 manim(社区版)。

不管选哪个,第一步都是装好、跑一个 example scene,感受一下代码控制动画是什么体验。

仓库(原版):https://github.com/3b1b/manim 仓库(社区版):https://github.com/ManimCommunity/manim

相关文章

AntV Infographic:让 AI 生成真正可编辑的信息图

AntV Infographic:让 AI 生成真正可编辑的信息图

痛点切入 AI 生成信息图最尴尬的地方,不是它不会画,而是它画完以后很难改。 让模型直接生成一张图片,第一眼可能还行。可一旦你想改文案、换颜色、删掉一个模块、把第二步挪到第三步,马上就进入“ ...

Cowart:为 Codex 打造的本地无限画布,让 AI 编程看见你的想法

此项目建立的初衷 AI 编程工具发展到今天,已经能读懂代码、修改文件、运行命令。但有一个问题一直没被很好解决:AI 怎么理解你的视觉意图? 你做了一个 UI 设计,想让 AI 帮你实 ...

Cell Architecture Studio:用 3D 探索细胞,开源

生物课本有一个问题。 里面的图是平的。细胞器用箭头标注,三四个箭头指向同一个位置。内质网怎么包裹细胞核、线粒体怎么在细胞质里漂浮——这些空间关系,你得盯着静态插图读一段文字来理解。 Cell Ar ...

LongCat-Video:美团开源 13.6B 视频生成模型,长视频才是真正的战场

长视频生成为什么难 你可能已经体验过不少视频生成工具——Kling、Runway、Pika、Wan2.1……5 秒的片段看起来都不错。但当你尝试生成 30 秒甚至分钟级视频时,问题就来了。 ...

Claw Code:193K 星的开源 Agent Harness,AI 编程的下一个战场

Claw Code:193K 星的开源 Agent Harness,AI 编程的下一个战场

此项目建立的初衷 过去一年,AI 编程工具的变化非常快。 最早,开发者用 AI 主要是为了补全代码。后来,AI 开始进入聊天窗口,帮我们解释代码、生成函数、排查报错、写测试用例。再后来,Cu ...

Math-To-Manim:六个 AI Agent 推理链,把数学问题变成电影级动画

痛点切入 你是一个数学老师或物理科普作者。你有一个想法——"用动画解释傅里叶级数的旋转矢量叠加"。你打开 Manim,发现要写 200 行 Python 代码,调试相机角度、字体大小、动画时序 ...