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