11 个图像来源,以及为什么 ManimCE 被放进了这张表
翻 OpenMontage 的 README,看到 Supported Providers 折叠块里的图像生成表,第一反应大概率是数错了:前十行都是正经的图像来源,最后一行冒出来一个 ManimCE,Type 标 Local,Notes 只有三个词——Mathematical animations。数学动画怎么会算”图像生成”?
这不是排版顺手粘错了,也不是把视频那栏的东西错放了一行。把这张表按类型拆开看,它反映的是这个项目对”图像”这一栏的定义方式,而这个定义方式会直接影响你在没配任何视频密钥时能做出什么。
先把这 11 行摆全
README 在这一节的标题写的是 11 tools/providers,表格实际也是 11 行(以下 Notes 一栏全部是 README 自己的措辞,不是我们的评价):
| Provider | Type | README 的 Notes |
|---|---|---|
| FLUX | Cloud API | State-of-the-art quality |
| Google Imagen | Cloud API | Imagen 4 — high-quality, multiple aspect ratios |
| Grok Imagine Image | Cloud API | Strong image edits, style transfer, and multi-image compositing |
| GPT Image 2 | Cloud API | OpenAI’s image model |
| Recraft | Cloud API | Design-focused generation |
| Kling Official | Cloud API | Official direct API for Kling image generation and reference workflows |
| Local Diffusion | Local GPU | Stable Diffusion, free |
| Pexels | Stock | Free stock images |
| Pixabay | Stock | Free stock images |
| Unsplash | Stock | Free stock images |
| ManimCE | Local | Mathematical animations |
这里必须先说死一件事:State-of-the-art quality、high-quality、Design-focused 这些词是 README 描述的,我们没有调用过其中任何一个 API,没有生成过任何一张图,也没有验证过任何一条 Notes。所以本文不会拿这些形容词给你排名,也不会说”要画质就选 FLUX”。README 在这一节顶部把完整配置指南(含定价和免费额度)指向了 docs/PROVIDERS.md,那份文档我们没有读过,同样不展开。
按 Type 数一遍,这张表就分成了四种东西
从表里数出来:6 个 Cloud API、1 个 Local GPU、3 个 Stock、1 个 Local。
这四类在你的实际处境里不是同一种资源:
- Cloud API(6 个)——要密钥、要联网、要花钱。这一档能不能用,取决于你
.env里配了什么。 - Local GPU(1 个)——Local Diffusion,README 的注释是 Stable Diffusion, free。这里的”free”指的是不用付 API 费用,代价换成了你自己的显卡。
- Stock(3 个)——Pexels、Pixabay、Unsplash,都标 Free stock images。这一档严格说不是”生成”,是从现成素材库里取。它们在
.env密钥矩阵里各占一项:PEXELS_API_KEY、PIXABAY_API_KEY、UNSPLASH_ACCESS_KEY;README 的零密钥能力表把这三家归在 Extra stock 一行,注明”开发者密钥可免费申请”。 - Local(1 个)——ManimCE。
.env的密钥矩阵里没有与它对应的条目。
看清这个分类逻辑,ManimCE 的位置就不奇怪了。这张表分的不是”用什么技术做出来的”,而是”这一格能不能给流水线交出一份静态视觉素材”。三条路的前置条件差别很大——Stock 要的是可免费申请的开发者密钥,Local Diffusion 要的是显卡,ManimCE 的 Type 只标了 Local——但输出物在流水线眼里占的是同一个能力槽位。
顺带一个可以对照的细节:这 11 行里的 Pexels 和 Pixabay,在 README 的视频生成表里也各出现一次(那边标的是 Free stock footage);Unsplash 只出现在图像这张表里。Kling Official 也是两张表都在——图像这边 README 写的是 image generation and reference workflows。视频那张 15 行的表本文不铺开,我们另有一篇专门讲。
ManimCE 这一行对应到仓库里的哪个文件
光看 README 的三个词判断不了什么,得往仓库里落。这一行对应的是 skills/creative/manim-usage.md 这个 skill 文件——注意它落在 skills/creative/ 下,而不是 skills/core/。
README 把知识分成三层:Layer 1 是 tools/ + pipeline_defs/(“What exists”),Layer 2 是 skills/(“How to use it”,即 OpenMontage 自己的约定与质量标准),Layer 3 是 .agents/skills/(“How it works”,外部技术知识包)。ManimCE 这一行落在 Layer 2 里,而 Layer 2 又分四个分区:core/、creative/、meta/、pipelines/。我们实读了这几个目录:skills/core/ 只有 6 个文件(color-grading.md、ffmpeg.md、hyperframes.md、remotion.md、subtitle-sync.md、whisperx.md),manim-usage.md 不在其中,而是和 image-gen-usage.md、image-provider-usage.md、stock-sourcing-usage.md、diagram-gen-usage.md、typography.md、video-gen-prompting.md 这些文件一起待在 creative/ 下。
单看文件名,前面那张表里的几类来源在 skills/creative/ 里大都能找到名字对得上的文件——image-gen-usage.md 与 image-provider-usage.md 对图像生成、stock-sourcing-usage.md 对素材库、manim-usage.md 对 ManimCE。这些文件的正文我们一个都没有读过,这里只按实读到的路径和文件名说明它们的位置,不描述里面写了什么。
再往 README 的架构图上对一眼,tools/graphics/ 那一行的原文是 “9 image/graphics generation tools + diagrams, code snippets, math”。这句话里”图表(diagrams)、代码片段(code snippets)、数学(math)“是和图像并列写出来的三类。换句话说,graphics 这一栏本来就不止管”画图”,数学动画在这一栏里有明确位置。
这里也有一处可核实的数字差异:provider 表标的是 11,架构图里 tools/graphics/ 标的是 9 个工具。 两处不是同一个计数口径——一个数的是 provider/来源,一个数的是 Python 工具文件,而且架构图那句还在 9 之外用加号另挂了三类。我们只陈述这个差异,不推断哪个数字更准、也不拿它评价这个项目。同一张 README 里这类口径差不止一处:TTS 那节表格列了 5 个 provider,架构图里 tools/audio/ 写的是 4 TTS providers;Node.js 前置条件写的是 18+,而 HyperFrames 那行标的是 Node.js ≥ 22。都是文本之间的差异,说到这儿为止。
为什么静态图这一栏值得你认真配
如果你把 OpenMontage 当成”文字生成视频”的工具,图像 provider 看上去只是配角。但 README 在 Composition & Rendering 那张表里给 Remotion 写了一句很关键的话(原文大意照录):当没有配置任何视频生成 provider 时,agent 生成静态图,再由 Remotion 把它们变成完全动起来的视频。
这句话把图像这一栏的地位抬起来了。在一个密钥都没配、或者只配了图像密钥的环境里,这 11 行就不是备选项,而是主路径——素材从这里出,动效交给 Remotion 的程序化场景去补。README 的零密钥能力表里,与静态素材直接相关的那两行是 Extra stock(Pexels + Unsplash + Pixabay,注明开发者密钥可免费申请)和 Composition (React)(Remotion);.env 那一段的头一行注释原文是 # .env — every key is optional, add what you have。这条路径在什么条件下走得通,你对着这张表数一下自己手上有几格就知道了。
需要提醒的是,这条”静态图 + Remotion”的路,走的是 README 那张表里的两套合成运行时之一。另一套 HyperFrames 标的是 Local (Node.js ≥ 22),通过 npx hyperframes 使用,不需要 checkout 整个 monorepo。README 给这两套运行时配了一条硬治理规则:运行时在提案阶段就被选定,记为 render_runtime,并通过 edit_decisions 锁定;在运行时之间静默切换是一次治理违规(governance violation)。完整的决策矩阵 README 指向 skills/core/hyperframes.md,那份文件我们没有读过,不描述它的内容。与之呼应的是 AGENT_GUIDE.md 里那节标题——“Present Both Composition Runtimes (HARD RULE)“,两套运行时都得摆给用户看。
怎么查你自己这 11 格里点亮了几个
不要靠数 .env 里写了几个密钥来猜。README 和 AGENT_GUIDE.md 给的办法是问 registry:
python -c "from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.provider_menu(), indent=2))"
python -c "from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.support_envelope(), indent=2))"
AGENT_GUIDE.md 的 Mandatory Preflight 一节给这两条命令各配了一句注释:前者是按能力分组的可用/不可用完整菜单;后者是每个工具的完整契约,原文明确警告 慢、输出量大,只用于调试。所以日常想知道”图像这一栏我有几格”,用第一条就够,第二条别顺手跑。这两条命令照抄自仓库文档,我们没有执行过,返回里到底有哪些字段我们也没有读过 tools/tool_registry.py,不做描述——实际输出以你本地跑出来的为准。
AGENT_GUIDE.md 的 “What Not To Do” 里有两条正好卡在这张表上:不要硬编码 provider 名、API key 名或安装 URL,要从 registry 的 install_instructions 和 dependencies 字段读;不要孤立地呈现单个不可用工具,要永远展示完整能力图景,用 “X of Y providers configured for this capability.” 这种说法。第二条落到图像这一栏就是:不管你配了几个,agent 该告诉你的是”11 个里配好了几个”,而不是只说”FLUX 用不了”。同一节里还有一条:preflight 时不许跳过 Provider Menu,原文的说法是用户必须看到自己有什么以及还能解锁什么。
最后一句关于密钥:Kling 在这套体系里出现两次,一次经 fal.ai 网关,一次是官方直连(provider 名 kling_official),对应 .env 里 FAL_KEY 与 KLING_API_KEY 两个独立的密钥项。配的时候别把它们当成同一个东西。本文所有密钥一律写成 $FAL_KEY、<YOUR_API_KEY> 这样的占位符,真实值只放在你自己的 .env 里。
本文依据 OpenMontage 官方仓库(github.com/calesthio/OpenMontage)的 README、
AGENT_GUIDE.md、config.yaml、pipeline_defs/ 与 lib/ 下的治理模块整理,核对日 2026-08-09。
本文内容为仓库源码与文档口径,我们没有安装或运行过该系统,也没有调用过其中任何一个 provider API,
文中出现的成本数字均为项目方在 README 中自行标注的金额,非我们的实测结果。
该项目以 AGPL-3.0 发布,部分流水线在 manifest 中自标 stability: beta,请以仓库最新内容为准。
安全相关做法请结合自身环境评估,本文不构成安全方案建议。