manim-storyboard MCP Server
manim-storyboard
将 Manim 场景中的每个动画视为一张带标签的缩略图总览表,并对照你编写的故事板进行检查。

一个 97 步场景的前 18 步。青色是实际渲染的内容,琥珀色是你计划中应有的内容。
为什么
Manim 只会告诉你场景已经渲染完成。它不会告诉你章节标题超出了右边缘,或者横幅落在了下方文本之上。这些只有通过查看才能发现,而查看意味着拖动 mp4 进度条,或猜测时间戳来抽取静帧。
猜测会浪费大量帧。两个段落之间的淡入淡出是一个黑帧,而手工挑选的时间戳约有四分之一会落在黑帧上。
有一个更好的来源。Manim 会将每次 self.play() 调用对应的一个剪辑写入 partial_movie_files/,并按顺序列出它们。取每个剪辑的最后一帧,你就能按顺序得到每个动画的一个稳定帧,没有任何浪费。这就是这里的全部思路。
安装
pip install manim-storyboard需要 ffmpeg 位于 PATH 中,或者 FFMPEG_EXECUTABLE 和 FFPROBE_EXECUTABLE 指向相应的二进制文件。这与 manim-mcp-server 使用的约定相同,因此现有环境可以直接使用。
使用
一个场景生成一张总览表:
manim-storyboard sheet scene.py MyScene97 panels -> storyboard_MyScene.png每个面板包含索引、在最终视频中的开始时间、持续时长以及实际运行的动画类:
#012 0:08.5 1.33s
LaggedStart[Write, FadeIn x2]分组会展开一层,这样你无需打开文件就能看到 LaggedStart 内部的内容。self.wait() 也会有自己的面板,因为 manim 会将其渲染为独立的剪辑。
大场景会分页:
manim-storyboard sheet scene.py MyScene --range 1-40 --columns 6已经通过 manim CLI 渲染完成,只想要总览表:
manim-storyboard sheet scene.py --from-media media/videos/scene/480p15/partial_movie_files/MyScene试一试
examples/ 中包含一个不需要 LaTeX、也没有资源文件的小场景,以及为其准备好的故事板:
manim-storyboard sheet examples/demo_scene.py DemoScene -s examples/storyboard.yaml
manim-storyboard check examples/demo_scene.py DemoScene -s examples/storyboard.yaml
故事板
故事板是一个 YAML 文件,用来描述每一步应该做什么。你可以在场景存在之前手动编写,也可以从一次渲染中搭建出来:
manim-storyboard plan scene.py MyScene # scaffold from what rendered
manim-storyboard plan scene.py MyScene --blank 40 # 40 empty steps to fill inscene: LarpGuide
steps:
- at: 1
section: cold open
intent: the overheard question fades up on an empty frame
expect: [FadeIn]
- at: 7
intent: the title writes on, RENT-A-GIRLFRIEND FAN
expect: [Write]
- at: 9
intent: pink flash pops on the word FAN
expect: [Flash]
- at: 11
intent: clear everything before chapter one
expect: [FadeOut]intent 是供你阅读的说明文字。expect 是你在该步骤中打算使用的动画类型,也是会被校验的内容:
manim-storyboard check scene.py MyScene -s storyboard.yamlstep 7: [drift] expected FadeIn but rendered Write
step 9: [drift] expected Circumscribe but rendered Flash
step 400: [missing] plan has step 400 but the render stopped at 97将故事板重新喂给 sheet 后,每个面板下方都会打印其 intent,偏离预期步骤会以红色轮廓标出:
manim-storyboard sheet scene.py MyScene -s storyboard.yaml值得了解的规则
次数是可选启用的。 expect: [FadeOut] 表示“这一步将物体淡出”,并且对任意数量都通过。一个清理舞台的辅助方法会淡出当前舞台上任意数量的 mobject,你不应该在每次添加一个物体时就更新计划。当确切数量才是关键时,写出 expect: [FadeOut x6],比较将变为严格且对顺序敏感。
部分计划没问题。 只有声明了 expect 的步骤才会被检查。计划可以只覆盖开场,而不提及其他部分。传入 --strict 还可以标记计划从未提及的已渲染步骤。
仅含说明文字的计划永远不会失败。 有 intent 而没有 expect 的步骤只是总览表上的标签,不是断言。
组内容会被忽略。 expect: [LaggedStart] 可以由 LaggedStart[Write, FadeIn x2] 满足。匹配的是外层包装,而不是其子项。
MCP
通过 MCP 提供同样的三个工具,让编写 Manim 的智能体可以查看自己的输出:
pip install "manim-storyboard[mcp]"
python -m manim_storyboard.mcp_server{
"mcpServers": {
"manim-storyboard": {
"command": "python",
"args": ["-m", "manim_storyboard.mcp_server"],
"env": {
"FFMPEG_EXECUTABLE": "C:\\ffmpeg\\bin\\ffmpeg.exe",
"FFPROBE_EXECUTABLE": "C:\\ffmpeg\\bin\\ffprobe.exe"
}
}
}
}暴露了 storyboard_sheet、storyboard_plan、storyboard_check 和 storyboard_from_media。要把它们挂接到你已经在运行的 manim MCP 服务器上:
from manim_storyboard.mcp_server import register
register(my_fastmcp_instance)Python
from pathlib import Path
from manim_storyboard import record, build, load, check
take = record(Path("scene.py"), "MyScene", quality="low_quality")
plan = load(Path("storyboard.yaml"))
for issue in check(plan, take.steps):
print(issue.index, issue.kind, issue.message)
build(take.steps, Path("sheet.png"), columns=6, plan=plan)record() 会在一次渲染期间包装 Scene.play,从而使清单与磁盘上的剪辑完全对应。之后它会恢复原始方法,即使在渲染抛出异常时也会恢复。
开发
pip install -e ".[dev]"
pytest计划匹配测试既不需要 manim,也不需要 ffmpeg。
许可证
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Generate on-brand images from your AI agent: design, edit, and render templates over MCP.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Tarunls/manim-storyboard'
If you have feedback or need assistance with the MCP directory API, please join our Discord server