manim-web:把 Manim 数学动画搬进浏览器,用 WebGL 实时渲染

前端
开源
可视化
动画
数学
Manim
2026/9/29
·

阅读时间: 大约 6 分钟

manim-web:把 Manim 数学动画搬进浏览器,用 WebGL 实时渲染

manim-web 官方文档首页:定位为"面向 Web 的数学动画",用 TypeScript 移植 Python Manim,基于 WebGL(Three.js)

3Blue1Brown 带火的 Manim 是程序员做数学动画的事实标准,但它有个门槛:你得在本地装好 Python 环境、写脚本、再渲染成视频。manim-web 想把这件事彻底网页化——用 TypeScript 把 Manim 重写一遍,底层跑在 WebGL(Three.js)上,打开浏览器就能实时渲染,不生成视频。本文基于其官方文档站分析。

一、它是什么

官方文档一句话定位:“Mathematical animations for the web — a TypeScript port of the Python Manim library that runs entirely in the browser using WebGL (Three.js).”

它提供基于场景(scene-based)的 API:你描述对象(形状、文字、图形)和作用于它们的动画(create、fade、transform、move),其余由渲染器处理。关键区别在于:

  • 真·实时渲染:用 WebGL 逐帧绘制,而不是像 Python 版那样离线编码成 mp4;
  • 无服务器、无视频编码、无 Python:整个库跑在浏览器里。

二、能力清单(文档可核实)

官方列出的特性:

  • 形状与几何:圆、矩形、多边形、线、弧、箭头,以及形状布尔运算;
  • 图形与绘图:坐标轴、函数曲线、面积图、黎曼和(Riemann sums)、虚线;
  • 文字与数学:自定义字体文本,通过 KaTeX 渲染 LaTeX 公式;
  • 动画库:Create、FadeIn、FadeOut、Transform、Write、MoveAlongPath、Rotating 等;
  • Updaters:给对象挂逐帧更新的动态行为;
  • ValueTracker:平滑地动画化数值;
  • 框架集成:一等公民的 React 与 Vue 组件。

快速示例:

import { Scene, Circle, Create, FadeOut, BLACK } from 'manim-web';
const scene = new Scene(container, { width: 800, height: 450, backgroundColor: BLACK });
const circle = new Circle({ radius: 1.5 });
await scene.play(new Create(circle));
await scene.wait(1);
await scene.play(new FadeOut(circle));

可以看到,Scene、Circle、Create、FadeOut 这套命名与 Python Manim 高度一致——这意味着熟悉 Manim 的人迁移成本很低。

三、口径偏差与局限

  1. “Port”是兼容子集,不是 1:1 移植:它覆盖的是文档列出的常用对象与动画,Python Manim 庞大的生态(第三方插件、复杂 3D、视频管线)未必都搬过来了;“迁移成本不高”针对的是基础场景。
  2. 实时渲染 ≠ 任意复杂都流畅:WebGL 实时绘制在简单场景下远胜”渲染成视频再播”,但文档未给出复杂场景的帧率基线——项目库点评也提醒,复杂场景的 WebGL 性能消耗与移动端兼容性需要实测。
  3. LaTeX 靠 KaTeX:与 Python Manim 用的 LaTeX 引擎在渲染细节上可能有差异,极复杂公式的排版不必完全一致。
  4. 年轻项目:文档站自建(Docusaurus),API Reference 由 TypeDoc 生成,生态、素材、社区教程尚在早期。

四、适用 / 不适用

适合:

  • 想在网页/交互课件里直接嵌数学动画、不想让观众等视频渲染的教育场景;
  • 已熟悉 Manim、想把动画做成交互式(可暂停、可参数化)的开发者;
  • React/Vue 项目里需要程序化动画的前端团队。

不适合:

  • 已经依赖 Python Manim 复杂插件或 3D 场景的工作流;
  • 需要导出高质量 mp4 用于视频发布、且对渲染管线有严格要求的场景;
  • 对移动端性能敏感、还没实测过目标机型的项目。

五、它意味着什么

manim-web 的价值主张很清晰:把数学动画从”离线渲染视频”变成”网页里的实时交互”。一旦 WebGL 实时渲染在复杂场景下足够稳,它的使用面会远超 Python 版——文档里直接可运行、可改参数、可嵌进教学页。它现在最大的问号不是 API 设计(那部分很 Manim),而是性能与兼容性这条工程曲线能不能打磨到移动端也稳。如果能,它会是交互式数学教育的一大利器。

参考来源