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

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐