科学可视化 / Agent + Compiler
Manim Project · 科研动画工作台
用受约束的教学与科研管线生成动画,新增 Director 分镜、2–8 幕独立版本、局部重生成与整片合成。
- 项目范围
- 双路径 Animation Agent 工作台
- 当前状态
- 实验项目
- 我的角色
- 独立开发者

技术栈
- Next.js
- FastAPI
- Python
- AnimationIR
- ManimCE
- NumPy/SciPy
- Redis
- Docker
项目解决什么
科研动画不能把“让模型写一段 Manim Python”当成科学正确性的来源:轨迹、场、残差和数据点需要可追溯的计算产物,动画表达也需要可验证的中间表示。这个工作台新增 Animation Agent V2,把一句科研描述与可选 CSV 先解析为 IntentSpec,再调用白名单科学工具生成 ToolRun,构建 AnimationIR 2.0,并由确定性 Compiler 输出可审阅的 Preview;原有教学 Prompt → ContentPlan → CodeVersion 路径继续保留,二者共用版本、队列、沙箱与交付层。
核心功能
- 用一句科研描述和可选 CSV 创建动画任务
- 将模型输出限制为结构化 IntentSpec JSON
- 通过白名单科学工具生成可追溯 ToolRun
- 将 AnimationIR 2.0 编译为 Manim 与 Web JSON
- 以表达 critic 检查并最多修复一次 IR
- 用 Director 草拟 2–8 幕,逐幕生成并合成整片
使用流程
- 输入科研目标与可选资产
- 解析 Intent 并运行科学工具
- 构建并检查 AnimationIR
- 编译并渲染 Preview
用户从无需登录的本地工作台输入一句科研目标,并按需附上 CSV。系统将目标整理为可审阅的 domain、assumptions 和 tools_needed;未匹配封闭目录时返回 needs_confirmation,缺少必需数据时返回 asset_required,不自行补公式或伪造数据。匹配成功后,ToolRun 的输出进入 AnimationIR、critic 与 Compiler,再沿现有 Runner 和无网 Docker 渲染边界生成 Preview。
在封闭 P0 验收中,6 个可渲染纵向切片全部通过科学断言、确定性编译和首次 Docker 出片,论文+CSV 未满足封闭目录条件的样例正确暂停确认;这些是内部验收结果,不是通用生成成功率。
新增多场景工作流将 GlobalBrief 拆成 2–8 个独立版本的 SceneBlock。Director 可以从完整视频目标生成分镜草稿,用户应用草稿后才进入逐幕生成;它不输出 Python,也不提前调用科学工具或创建渲染任务。用户可逐幕选择教学或科研路径,绑定 CSV,最后按顺序硬切合成 MP4。
项目亮点
让模型规划意图,而不是编写自由 Scene
科研路径中,模型若启用也只能填写 IntentSpec JSON,不能输出 Scene Python、lambda 或自由 NumPy 表达式;没有模型配置时则回退到透明的关键词 Intent 目录。确定性 Compiler 负责把受限 IR lowering 为 Manim 代码,未知 capability 返回结构化错误与显式 fallback。教学路径也已收紧:模型填写 ContentPlan,公式和函数场景经 SceneStoryboard 确定性编译为 CodeVersion;不支持的表达式或缺少分镜的几何/3D 请求明确失败,不用纯文字视频代替。
把科学数值和来源锁进 ToolRun
轨迹、场和时间序列来自注册式 NumPy/SciPy/pandas 工具,而不是 Scene 运行时临场计算。ToolRun 记录参数、输入与输出哈希;AssetVersion 保存不可变资产来源,AnimationIR 只引用 artifact_ref。论文+CSV 复现目前只接受封闭的 Lotka–Volterra 目录和完整系数,其他论文明确进入 needs_confirmation。
P1 的 76 条内部黄金任务中有 58 条 ready;expected、science 与 provenance rate 均为 1.0,表达 critic 均值为 5.0,平均 IR repair 为 0。它证明的是封闭语料上的溯源与表达门禁,不是外部研究结论。
用同一份 IR 连接双 Backend 与修复闭环
AnimationIR 2.0 经过结构校验和 TIFA 风格表达 critic 后,最多执行一次 IR-level repair;同一份 IR 可以确定性 lowering 为 Manim Python 和 Web JSON,避免为不同预览端重新解释科学意图。Manim 结果进入现有无网 Render Sandbox,Web backend 只输出可检查的 JSON 预览,不冒充第二套视频渲染器。
P2 的 130 条内部 benchmark 中有 100 条 ready,science、expected 与 cross-backend rate 均为 1.0,非预期 FAILED rate 为 0;协议同时明确 external_user_study=false。
工作流在生成层之上复用版本化场景片段:修改一幕只重生成该幕,调整顺序只重新合成。缓存命中会重新验证归属、哈希、大小与可解码性;任何场景缺少资产或渲染失败时,保留已成功片段,但不交付残缺整片。仓库验收记录覆盖真实 Docker 场景合成与生产构建下的浏览器工作流;可重复的黑盒渲染使用确定性教学夹具,不代表任意模型提示词都能生成合格视频。
系统架构
Next.js 工作台把科研 Prompt 送入 Intent Resolver 和白名单 Compute Sandbox,ToolRun 与来源哈希进入 AnimationIR、critic 和一次 IR repair,再由确定性 Compiler 分发到 Manim 与 Web JSON backend。教学 ContentPlan / CodeVersion 经过独立安全预检后汇入同一 Runner。只有 Manim backend 进入无网络、非 root、资源受限的 Render Sandbox;Preview / Final 和 QualityReport 返回同一工作台。
上图展示单幕生成内核。新增编排层为 Director → 用户应用草稿 → GlobalBrief / SceneBlock → 逐幕生成 → Compose / Export;它复用既有生成与隔离渲染边界,不绕过这些约束。
项目边界
这是一个本地开发与验收工作台:科研路径只覆盖封闭的 Intent/工具目录,教学 ContentPlan 路径继续保留。P0/P1/P2 数字来自内部黄金集与实验室 harness,不代表外部科研用户研究或生产部署能力。多场景仅支持线性顺序与硬切,不提供自由 DAG、转场、音频或字幕;仓库仍记录部分教学场景公式重叠的已知问题。