简介
wanim 让几乎无需修改的原版 manim Python 代码在浏览器中运行,轻量、快速、方便; 只需少量代码改动,就能把这些场景变成远比普通动画强大的交互演示。读者无需安装任何东西:不需要 Python、LaTeX、服务器, 也不需要数十 M 的 Pyodide 运行时。更多示例见画廊,也可以在 演练场中亲自试一试。
关于交互功能,请看交互控件。如果你想让 AI 编写 wanim 演示,请把该页复制给你的 LLM。
本站所有标记为 live 的代码块,都会在你的浏览器里编译并播放,用的正是你可以放进自己页面的同一套运行时。
使用播放器
本站每个 live 代码块都是一个播放器。有多页的场景会在画布右下角显示几个小按钮:
<回到上一页。↻重播本页。>进入下一页。在交互场景中,它会结束蓝图阶段并开始播放动画。
与当前页面无关的按钮会隐藏。
| 按键 | 操作 |
|---|---|
→ 或 Space | 下一页 |
← | 上一页 |
↑ | 重播本页 |
同一页面中有多个播放器时,快捷键作用于你最后点击的那个画布。
你能用它做什么
- 保留你的 manim 代码。 场景(Scene)、图形对象(mobject)、
self.play、.animate、ValueTracker、MathTex、ThreeDScene等都使用相同的名字和关键字参数。 画廊 会依次运行库里的一部分功能。 - 制作可交互的讲解。
InteractiveScene允许读者拖动滑块、拨动开关、在数字框里输入, 图形随之变化。读者准备好之后,场景再进入普通的动画部分。详见交互控件。 - 放到任何网页里。 可以在普通 HTML 中使用
<wanim-scene>元素;博客里可以用把代码放在 URL 里的<iframe>;也可以直接调用 JavaScript API,做自己的播放器或编辑器。详见使用 wanim。
工作原理(简述)
- 对 Python 源码做预处理:
manim、numpy、random、math、itertools的导入被映射为浏览器中的等价实现, 编译器无法解析的少数语法会被改写。 - 打过补丁的 rapydscript-ng 把结果转换为 JavaScript。
- 这段 JavaScript 运行在 wanim 的 TypeScript 版 manim 上,并通过 Canvas 2D 逐帧绘制。
全部过程都在页面内完成:Python 代码不会发送到服务器,它与页面上的其他脚本拥有相同的权限。 更多细节见开发者文档。
项目状态
wanim 目前是早期预览版。
- npm 包名为
@wanimjs/wanim。按子路径按需引入,例如用@wanimjs/wanim/bridge获取runPythonOnCanvas。 完整列表见使用 wanim。 - API 与 manim Community Edition 保持一致。若 wanim 有差异,文档会注明。如果某个在 manim 中能运行的场景在这里失败, 欢迎报告。
- 部分 manim 功能尚未实现,较少使用的 API 可能存在缺口。