起因很俗:想用 Manim ( 3Blue1Brown 那套数学动画引擎)做点东西,结果一晚上都耗在装环境上。Python 版本、pip 超时、LaTeX 几个 G 、Cairo/Pango 的二进制依赖、中文字体缺失 —— 每一环都能卡住,而这些跟"做动画"没有半毛钱关系。

后来想,这层能不能整个删掉。

左边是本地要凑齐的依赖链,右边是打开网页

做法

用 Pyodide 把 真的 Manim 本体( Manim Community 0.20.1 )搬进浏览器,不是重写一个近似引擎。跑不了的原生依赖逐个替掉:

  • cairo → Canvas2D shim
  • Pango → opentype.js (带 Noto Sans CJK SC 子集,中文和标点开箱即用)
  • LaTeX → MathJax (子式可寻址,set_color_by_tex / TransformMatchingTex 能用)
  • skia-pathops → 纯 Python polybool (布尔运算)
  • 导出走 ffmpeg.wasm ,单线程,所以不需要 COOP/COEP

渲染落 Canvas2D 而不是 WebGPU —— 这条是有意的,国内不少机器和浏览器还没 WebGPU ,微信里也开不了。代价是慢一些,换来的是真的能打开。

全部资源自托管、零 CDN 依赖,主要是为了国内可达性。

现在能干什么

浏览器里写 Scene → 运行 → 逐帧拖动检视 → 导出 MP4/GIF 。代码和渲染都在你自己机器上,不上传。写代码、渲染、导出不用登录。

编辑器 + 底部预览面板,跑完显示帧数和耗时

实测一段 ValueTracker 驱动切线的场景,480p15 渲染 90 帧约 2.6 秒。首次进页面要把引擎下载一遍(几十 MB 量级),之后走缓存。

也支持开本机文件夹( Chrome/Edge 桌面版的 File System Access ),可以一边在 VS Code 里改一边在网页里跑,改动自动存回原文件。

另外做了个 AI 助手:说一句话或者传一张题目照片,它写代码、在你浏览器里试跑、读 traceback 自己改。有意思的是视觉那条通道 —— 每次渲染成功后自动把整段动画均匀取 5 帧拼成接触表喂给模型,所以"跑通了但标签和圆重叠""文字出框"这种不报错的问题它也能发现。这部分要登录(有成本),其余不用。

已知的不足

  • 首次加载确实要等,网络差的时候更明显
  • 4K 长片这类重渲染,本地机器还是快得多
  • 移动端能看能跑,但编辑体验一般
  • 部分需要原生扩展的插件用不了

说白了它替代的是"入门到出片"这一段,不替代本地专业流程。

求拍砖

站在这儿: https://jizuobiao.xyz/workspace

打开点「直接开始写」就能跑,不用注册。想看看能做成什么样可以翻一下站内的作品页。

主要想问几件事:你们那边浏览器/机器上跑得动吗(尤其 Windows + 老一点的机器)、首次加载等多久、有没有哪个 Manim API 在这儿行为跟本地不一致。有 bug 直接说,我改。