Skip to content

API 参考:总览与入口 ​

manim-live 的全部公开接口按对象分成十二页:本页讲对象关系与入口工厂,其余各页讲一个对象的全部成员。每个成员给出类型定义、参数说明、返回值与可直接抄的例子。浏览器入口是 manim-live,不碰 DOM 的入口是 manim-live/node。第一次上手看快速开始,集成前必须知道的行为约定看行为契约。

页内容
渲染器warmup / check / createSurface / exporters / pyodideIndexURL / dispose
画布run / replay / createPlayback / createSession / canvas / isRendered / dispose
会话check / append / count / source / dispose:分步执行的持久上下文与段提交协议
时间轴回放createPlayback / seek / play / pause / step:整段代码收进一条可帧级定位的时间轴
钩子onLoading / onProgress / signal
环境状态environmentStatus / onEnvironmentStatus:能力 / 运行时 / KaTeX / 取包四组条件
导出Exporter 契约与内置逐帧导出;本机 CLI 导出 createLocalExport / createExportClient
本机探测probePlan / probeCheck:这台机器有没有 manim / FFmpeg / LaTeX
包管理createPackagesClient / createPyodideSupply:按需包的清单 / 预缓存 / 供给线
Node 入口不碰 DOM 的那一半:干跑预检与语料装载
语料与测试台语料格式函数与判定 / 统计 / 报告
低层导出实现零件,以及当前版本不提供的能力

对象关系 ​

三组入口:渲染器一棵树(页面内执行),其余两组是独立的工厂(各管一摊,互不依赖)。

createManimRenderer(options)          → ManimRenderer        一个页面通常一个
├─ warmup()                           → Promise<void>
├─ check(python)                      → Promise<CheckResult>
├─ createSurface(container, options)  → Promise<Surface>     一块画布一个
│  ├─ run(code, handlers)             → Promise<RunResult>
│  ├─ createSession()                 → Promise<Session>     分步执行(详见会话页)
│  │  ├─ check(code)                  → Promise<SessionVerdict>
│  │  ├─ append(code)                 → Promise<SessionAppend>
│  │  ├─ count                        → number               属性
│  │  ├─ source()                     → string
│  │  └─ dispose()                    → void
│  ├─ createPlayback(python)          → Promise<Playback>    整段收进时间轴(详见回放页)
│  │  ├─ seek(t) / play() / pause()   → void
│  │  ├─ step(frames?)                → void
│  │  └─ duration() / time() / state() / segments() / dispose()
│  ├─ replay()                        → Promise<void>
│  ├─ canvas()                        → HTMLCanvasElement | null
│  ├─ isRendered()                    → boolean
│  └─ dispose()                       → void
├─ exporters                          → readonly Exporter[]  属性,不是方法
│  └─ 每个 Exporter
│     ├─ id                           → string
│     ├─ label                        → string
│     ├─ probe()                      → Promise<{ ready, missing? }>
│     └─ run(request, signal)         → Promise<ExportResult>
├─ pyodideIndexURL()                  → string
└─ dispose()                          → void

createPackagesClient({ packagesUrl, cacheUrl })  → PackagesClient   包清单 / 预缓存 / 清缓存(浏览器侧)
createMachineClient({ environmentUrl })          → MachineClient   逐项问本机装没装(浏览器侧)

createPyodideSupply({ pyodideDir })              → PyodideSupply    供给线(Node 侧)
createLocalExport({ outputDir?, probe? })        → LocalExport      本机 CLI 导出 mp4(Node 侧)

四点读图说明:

  • Surface 只能从渲染器上拿到(createSurface()),不能单独构造;Exporter 从 renderer.exporters 上取,自带的那个始终在列表最前。
  • 渲染器上除 exporters 是数组属性,其余都是方法;Surface 的成员全是方法,只有会话的 count 是属性。
  • 状态不挂在对象属性上:一次运行的结论在 run() 的返回值里,画布有没有画面靠 isRendered() 查;过程信息有两个出口——per-call 的 onLoading,与模块级的环境状态。
  • 其余三组工厂彼此独立也独立于渲染器:它们的参数全是注入(路由地址、目录、探测函数),不读页面状态、可与渲染器分开使用。

createManimRenderer(options?) ​

包唯一的入口工厂,创建一个渲染器。一个页面通常只需要一个实例:多个实例共享同一个页面级运行时与执行队列。

ts
function createManimRenderer(options?: ManimRendererOptions): ManimRenderer

参数 options,四个字段全部可选:

字段类型默认作用不传的后果
pyodideIndexURLstring官方 CDNPyodide 本体与按需第三方包的取数根,两者共用这一个地址,按 pyodide-lock.json 的 sha256 校验走公网 CDN;内网或离线环境取不到运行时
katexBaseURLstring不注入katex.min.css 与字体所在目录,给了就注入一个 <link>(按 URL 去重)完全不碰 DOM;MathTex 排出的公式没有样式
onLoading(names: string[]) => void无按 import 取包时的进展回调,见钩子界面上没有「正在取包」提示
exportersExporter[]空追加导出接入者,排在自带逐帧导出之后,见导出只有自带的浏览器逐帧导出可用

返回 ManimRenderer,六个成员的用法见渲染器。

例子

ts
import { createManimRenderer } from 'manim-live'
import 'manim-live/style.css'   // 可选:只修正 canvas 的基线间隙

const renderer = createManimRenderer({
  katexBaseURL: '/assets/katex/',
  onLoading: (names) => console.log(names.length > 0 ? `取包:${names.join('、')}` : '取包结束'),
})

注意

  • 返回时就已经装好了 Pyodide 加载器,不等 createSurface()——因为 check() 可能在任何画布之前被调用。
  • 创建不会开始下载运行时,下载发生在 warmup() 或第一次 run()。

MIT licensed · Manim 与 Pyodide 各依其自身许可(见「安装」)