# 数境 ShuJing > 中文数学动画引擎 · 基于 ManimGX · 极速 3D 数学动画 ManimGX 是一个面向 AI 智能体的自包含动画引擎:它从 Python 场景生成数学和 3D 视频。 场景使用 Manim Community Edition 的 API,ManimGX 为其全部标注了类型,因此类型检查器 能在渲染前发现错误。Rust 核心在 GPU 上绘制每一帧,用 Typst 排版文本和 LaTeX 数学公式, 并将视频及其声音编码为 MP4。动画在每一帧的时间点求值,基于时间的模拟使用独立于输出 帧率的固定时钟。逐帧回调应从时间或其他对象派生状态,而非计数帧。inspect 命令在不生成 视频的情况下运行场景,打印其时间线和布局问题(例如文本覆盖其他文本),并写出故事板。 在 Web 浏览器中,Pyodide 在 Web Worker 中运行相同的场景,核心的 WebAssembly 构建用 WebGPU 绘制它们。 以下是被要求用 ManimGX 制作视频的 AI 智能体的操作指南。请按顺序执行。 ## 1. 安装 ```sh uv tool install --python 3.14 manimgx # 将 `manimgx` 放到 PATH 上 manimgx --version ``` - 保留 `--python 3.14`:ManimGX 需要 Python 3.13 或 3.14,若机器上没有,uv 会下载一个。不加它,uv 会取机器的默认 Python(macOS 的是 3.9),然后找不到 `manimgx`。 - 没有 `uv`?安装它:`curl -LsSf https://astral.sh/uv/install.sh | sh`,然后 `source $HOME/.local/bin/env`(或调用 `~/.local/bin/uv`)。 - 不安装也能用:`uvx --python 3.14 manimgx <命令>` 运行相同的 CLI。 - pip 在 Python 3.13 或 3.14 的虚拟环境中可用(更旧的 Python 找不到 `manimgx`):`python3.14 -m venv .venv && .venv/bin/pip install manimgx`。 - ManimGX 不是 `manim` 包:不要安装 `manim`、ffmpeg 或 LaTeX,也不要 `import manim`。 - 它在 GPU 上绘制:macOS 用 Metal,Windows 用 Direct3D 12,Linux 用 Vulkan。没有 GPU 时(服务器、容器)在 CPU 上绘制,无需额外安装:Linux wheel 自带 Mesa 的 lavapipe。 ## 2. 编写场景 保存为 `scene.py`: ```python import manimgx as m class SquareToCircle(m.Scene): def construct(self) -> None: square = m.Square(side_length=3, color=m.BLUE, fill_opacity=0.5) circle = m.Circle(radius=1.6, color=m.PINK, fill_opacity=0.5) self.play(m.Create(square)) self.play(m.Transform(square, circle)) self.wait() ``` - API 是 Manim CE 的,每个名称都在包上:`m.Circle`、`m.MathTex`、`m.Create`、`m.UP`、`m.BLUE`。 - 时间只在 `self.play(...)`(默认 1 秒,可用 `run_time=` 指定)和 `self.wait(seconds)` 中流逝;`self.add(...)` 显示一个 mobject 但不动画。 - 画面为 14.2 × 8 单位,以原点为中心:将所有内容保持在 x ∈ [-7, 7]、y ∈ [-4, 4] 范围内。 ## 3. 检查,然后渲染 ```sh manimgx inspect scene.py # 故事板、时间线和 2D 布局检查;有问题则退出码为 1 manimgx render scene.py # 在 scene.py 旁写出 SquareToCircle.mp4 并打印其路径 ``` - `inspect` 采样 play 和 wait 的结束点。它列出每个 play 及其代码行号,报告 2D 布局问题,并写出 `.storyboard.png`,其中问题被勾勒并编号。如果能查看图片就看一看。修复问题后再次 inspect。3D 场景会得到故事板和时间线;布局检查被跳过。 - `manimgx inspect scene.py -t 1.5,end` 改为检查 1.5 秒和结尾处的帧。可重复 `-t` 或用逗号分隔时间;`-o detail.png` 命名输出。图片按时间顺序排列,每张六帧;多余的写到 `…-2.png`,以此类推。不加 `end` 时,检查在最后一个请求帧的 play 之后停止。只有被采样的时刻会被检查。 - `render` 生成 1920×1080、60 fps;`-r 1280x720 --fps 30` 更快,适合草稿。一个文件含多个场景时需要指定场景名:`manimgx render scene.py MyScene`。 - 出错时打印失败的场景代码行,对于名称错误还会给出提示(`ShowCreation is Create in ManimGX`)。 - `no GPU adapter` 表示命令在隐藏 GPU 的沙箱中运行:在沙箱外运行(如果你的工具需要批准,请询问用户)。 ## 4. 展示 为用户打开视频,并告知其路径:macOS 上 `open SquareToCircle.mp4`,Linux 上 `xdg-open SquareToCircle.mp4`。 ## 5. API 速查表 - 图形:`Square`、`Circle`、`Rectangle`、`Triangle`、`Polygon([x, y, 0], ...)`、`Line`、`Arrow`、`Dot`、`Brace(mob, m.DOWN)`、`NumberPlane`。点为 `[x, y, 0]`。 - 文本:`Text("纯文本")`、`MathTex(r"a^2 + b^2 = c^2")`(LaTeX 数学)、`Tex(r"文本和 $x^2$")`。使用原始字符串。 - 动画:`Create`、`Write`、`FadeIn(mob, shift=m.UP)`、`FadeOut`、`Transform`、`ReplacementTransform`、`TransformMatchingTex`、`GrowFromCenter`、`Indicate`、`Circumscribe`、`Rotate(mob, m.PI / 2)`;用 `AnimationGroup`、`LaggedStart`、`Succession` 组合。`mob.animate.shift(m.RIGHT).scale(2)` 为任意方法调用生成动画。 - 放置:`.to_edge(m.UP)`、`.next_to(other, m.RIGHT, buff=0.3)`、`.move_to([x, y, 0])`、`.shift(2 * m.LEFT)`、`.scale(k)`、`m.VGroup(a, b).arrange(m.DOWN)`。 - 样式:`color=m.YELLOW`、`fill_opacity=0.5`、`stroke_width=6`、`font_size=48`。白色背景:在 import 之后设 `m.config.background_color = m.WHITE`。 - 图表:`axes = m.Axes(x_range=[-3, 3], y_range=[-2, 2])`,然后 `axes.plot(lambda x: x**2, color=m.BLUE)`。 - 声音:`self.add_sound("click.wav")` 立即开始播放声音;`self.play(m.FadeIn(mob), m.Sound("whoosh.mp3"))` 随动画播放声音。 - 旁白:`self.say("[x 平方]的导数是[二 x]。", m.Indicate(a), m.Write(b))` 在方括号标记的词语期间说话并播放每个动画;场景的语音为 `voice = m.voices.Fal("<模型>", ...)`(fal.ai 的文本转语音,由环境变量 FAL_KEY 控制),默认为 ElevenLabs 的 Eleven v3,或任何从文本到 `m.Speech` 的函数。 - 幻灯片:在 play 之间用 `self.next_section("名称")`;`manimgx present scene.py` 在浏览器中打开。 ## 6. 查阅 文档如下,每页为 Markdown。用户指南讲述场景的工作方式。参考给出了每个类、其接受 的关键字和示例。画廊给出了三十部影片的代码。https://www.aipaikj.top/llms-full.txt 包含所有页面于一个文件中。 ## 用户指南 - [欢迎]() - [快速开始]() - [动画]() - [相机与 3D]() - [从 Manim CE 迁移而来]() - [图形]() - [数学对象]() - [位置]() - [渲染与分享]() - [声音与语音]() - [文本和数学]() - [基础]() - [更新器]() ## 参考 - [概览]() - [为变化添加动画]() - [出现与消失]() - [强调]() - [概览]() - [移动与变形]() - [速率函数]() - [同时与依次]() - [变换]() - [相机]() - [概览]() - [灯光与材质]() - [曲面与立体]() - [3D 场景]() - [标注]() - [颜色]() - [副本与状态]() - [坐标轴]() - [图表]() - [曲线]() - [概览]() - [数轴]() - [平面]() - [绘图]() - [向量场]() - [分组]() - [图像与 SVG]() - [概览]() - [矩阵与表格]() - [网络]() - [路径]() - [点云]() - [位置]() - [圆与弧]() - [组合形状]() - [概览]() - [线与箭头]() - [多边形]() - [尺寸与角度]() - [样式]() - [概览]() - [数学]() - [数字]() - [文本]() - [命令行]() - [配置]() - [从 Python]() - [概览]() - [概览]() - [现成场景]() - [场景]() - [概览]() - [语音]() - [概览]() - [值跟踪器]() ## 画廊 - [全部影片]() - [曼德博集合中的倍周期]() - [弯而不伸]() - [切伦科夫光]() - [展开圆周]() - [翻面的环面]() - [两木块数出 π]() - [复函数弯曲平面]() - [导数度量什么]() - [随机游走长成的珊瑚]() - [欧拉恒等式即一段行走]() - [圆周画出 π]() - [高尔顿钉板]() - [谐波驱动]() - [旋转陀螺]() - [希尔伯特空间填充曲线]() - [霍普夫纤维化]() - [球上的万花筒]() - [同步的萤火虫]() - [拉格朗日点]() - [时空中的生命游戏]() - [矩阵移动平面]() - [洛伦兹吸引子]() - [立方体与北极圈]() - [门格海绵中的星]() - [Miura 折叠]() - [网络解开螺旋]() - [用相位操控波束]() - [素数螺旋]() - [重排证明勾股定理]() - [二次公式]() - [矩形变为积分]() - [√z 住在哪里]() - [鲁珀特王子立方体]() - [噪声变字]() - [堆橘子]() - [圆还是方?]() - [公式生成地貌]() - [泰勒级数为何停止]() - [多项式逼近正弦]() - [网球拍翻转]() - [圆上的乘法表]() - [无中生有的交通堵塞]() - [环面上的图灵斑图]() - [圆周画出正弦与余弦]() - [范艾伦辐射带]() - [晶体与锥]() - [蛙跳烟环]() - [量子隧穿]() ## 可选 - [环境搭建]() - [文档]() - [引擎]() - [GitHub 工作流]() - [项目管理]() - [测试]() - [理解 ManimGX]() - [变更日志]()