2026 年 10 月更新,基于 Manim Community Edition 0.21.0
大部分能跑。华为应用市场上的「Manim教程」App 内置的是 Manim 社区版 0.21.0,和pip install manim==0.21.0装出来的是同一个版本,Scene、MathTex、Axes、ValueTracker、ThreeDScene这些常用写法都不用改。要改的主要是四类:用了声音的、用了第三方插件的、指定 OpenGL 渲染器的、引用 JPEG 图片的。
这个 App 是我们做的。与其让大家粘进去试了才发现不行,不如把清单列清楚。
先确认你写的是社区版
Manim 有两支:3Blue1Brown 作者自己维护的 ManimGL(from manimlib import *),和社区维护的 Manim Community Edition(from manim import *)。两边的 API 已经差得挺远。App 里跑的是社区版,ManimGL 的代码要先按社区版的写法改过来。
另外,社区版各版本之间也有改动。如果你的代码是照着 0.17、0.18 时期的教程写的,在电脑上用 0.21.0 跑一遍,没问题的话放进 App 基本也没问题。
直接能跑的
| 类别 | 例子 |
|---|---|
| 场景类型 | Scene、MovingCameraScene、ThreeDScene |
| 基本图形 | Circle、Square、Polygon、Line、Arrow、Brace、VGroup |
| 动画 | Create、Write、Transform、FadeIn、TransformMatchingTex、.animate |
| 动态 | ValueTracker、always_redraw、add_updater |
| 坐标与图像 | Axes、NumberPlane、axes.plot()、函数图像 |
| 文字和公式 | Text、MarkupText(中英文都行),MathTex、Tex |
| 3D | 三维坐标轴、Surface、调相机视角 |
| 图和树 | Graph(依赖的 networkx 已经内置) |
| 素材 | SVGMobject,PNG 格式的ImageMobject |
| 多文件 | 项目里的.py文件互相import,相对路径引用素材 |
| 数值计算 | numpy |
代码里写的config.pixel_width、config.frame_rate这类设置会照常生效。也可以不写,在 App 的渲染设置里选画幅、分辨率和帧率。
要改一改的
声音。self.add_sound()目前不支持,会直接报错,不会悄悄把声音丢掉。建议先导出无声视频,配音和配乐放到剪辑软件里做。
第三方插件。manim-voiceover、manim-slides 这类插件没有内置。鸿蒙上的 App 也没法pip install新的包,用到插件的部分要去掉或者自己实现。
OpenGL 渲染器。--renderer=opengl和依赖 OpenGL 的交互窗口不支持,App 用的是 Manim 默认的 Cairo 渲染器。大多数代码本来就是 Cairo 渲染的,不受影响。
JPEG、WebP 图片。ImageMobject目前只认 PNG。手头是 JPG 的话,先转成 PNG 再导入项目。SVG 不受影响。
自定义 LaTeX 模板和宏包。App 不带完整的 LaTeX 发行版,常见的数学公式写法(分式、根号、求和、积分、矩阵、希腊字母、上下标)都能渲染,但\usepackage引的宏包、自定义TexTemplate用不了。中文别写进MathTex里,用Text写中文、MathTex写公式,排在一起就行。电脑上其实也推荐这么写,原因见我们另一篇讲公式的文章。
联网和外部程序。代码里用requests下载素材、用subprocess调别的程序,这些在 App 里都不行。素材请提前导入项目。
特殊文字。彩色 emoji、阿拉伯语这类需要复杂排版的文字不支持。中文排字用的是 App 自己的排版,不是电脑上的 Pango,换行和字距跟电脑上可能有细微差别。
特别长的场景。几分钟长、画面很复杂的场景,建议拆成几个 Scene 分开渲染。这个习惯在电脑上也省时间,每次调用manim render都有一段固定的启动开销,拆得合理、调用次数少,反而快。
一个搬过去的例子
下面这段是电脑上常见的写法,用ValueTracker让抛物线的开口跟着参数 a 变化。原样粘进 App 就能跑:
from manim import * class Parabola(Scene): def construct(self): a = ValueTracker(1) axes = Axes(x_range=[-3, 3, 1], y_range=[-3, 9, 2], x_length=6, y_length=6) curve = always_redraw( lambda: axes.plot(lambda x: a.get_value() * x**2, x_range=[-2, 2], color=BLUE) ) label = always_redraw( lambda: VGroup( MathTex("y="), DecimalNumber(a.get_value(), num_decimal_places=1), MathTex("x^2"), ).arrange(RIGHT, buff=0.1).to_corner(UR) ) self.play(Create(axes), Create(curve)) self.add(label) self.play(a.animate.set_value(2), run_time=2) self.play(a.animate.set_value(0.3), run_time=2) self.play(a.animate.set_value(-0.5), run_time=2) self.wait()如果原来的代码里有一句self.add_sound("bgm.mp3"),删掉就行;有ImageMobject("photo.jpg"),把图片转成photo.png,代码里的文件名跟着改。
怎么把代码弄进 App
几种方式都可以:直接在编辑器里新建文件粘贴;用系统的文件选择器导入.py和素材文件;或者先从课程里复制一个示例项目,在它的基础上改。项目里有多个 Scene 时,运行前选要渲染哪一个。
渲染出错,日志会显示完整的报错信息,点一下跳到对应行。也可以把报错交给 App 里的 AI 助手,让它改代码、再试着渲染一次。
常见问题
App 里的 Python 是哪个版本?Python 3.13。3.10 以后的写法,比如match、类型标注里的X | Y,都能用。
能装别的 Python 包吗?不能。App 里带了 Manim 和它运行需要的依赖,包括 numpy 和 networkx。
电脑上渲染的视频和 App 里的一样吗?几何图形、颜色、动画节奏是同一套 Manim 代码算出来的。文字排版和公式的实现跟电脑上不完全一样,个别字距、笔画粗细可能有细小差异。「我的 → 工具 → 渲染基准」可以把你设备上渲染的画面和 Mac 上原生 Manim 的结果放在一起比。
ManimGL 的代码能跑吗?不能直接跑,要先改成社区版的写法。
华为应用市场搜「Manim教程」就能找到。官网:mathanime.com