关于 generate-images
generate-images 是一个依据项目 IMAGE_SPEC.md 调用 AI 图像生成 API 并保存 PNG 的媒体渲染技能,面向需要为项目生成图像的创作者。它支持批量或逐张审核,并根据生成结果维护项目图像阶段状态。
主要功能
- 01读取图像规格中的生成条目
- 02批量或逐张生成图像
- 03选择图像范围并覆盖已有文件
- 04逐张审核、重做或停止
- 05按结果更新图像阶段状态
适用场景
- 01为项目幻灯片生成指定图像
- 02仅补生成缺失或选定的图像
- 03逐张检查结果并决定是否重做
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ken-guru/ skills --skill generate-images安装后在 Claude Code 中输入/generate-images确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
PROVIDERS.mdevals/generate-images.jsonscripts/.gitignorecheck-bundle.mjspackage-lock.jsonpackage.jsonscripts/src/generate-images.js详细介绍
生成图像(Media Renderer)
读取 IMAGE_SPEC.md,将每个条目的提示词提交给 AI 图像生成 API,并将生成的 PNG 文件保存到项目的 images/ 文件夹。
输出语气
对范围问题、审核提示词和结果报告进行轻量润色,使其更自然。传递提示词和用户提供的 Media Intent 时保持原样,并确保文件名、路径、命令和状态值准确无误。在批准任何面向展示的文本前,必须调用独立的 unslop Skill,依据 DISCOVERY.json.editorialPreferences 进行完整编辑审核;在约定要求措辞准确的情况下,保留提示词和机器可读的媒体元数据。
协议:确定 Media Scope,默认采用 Batch(如有请求则采用 Interactive),审核并报告结果,仅更新所属的媒体阶段;取消或失败时保持待处理状态,并保留无关阶段记录。提供方设置仍在本地进行。
启动
继续之前:
- 确定项目文件夹:检查
DISCOVERY.json中的paths.imageSpec字段;如果不明确,则询问。 - 检查
IMAGE_SPEC.md是否存在。如果不存在:❌ 未找到
IMAGE_SPEC.md。请先创建并批准图像规范,再生成图像。 中止。 - 提供方和模型会在脚本中自动确定,依据为
--provider=/--model=标志、GEMINI_API_KEY/OPENAI_API_KEY,或PROJECT.json中之前保存的选择。此处无需单独检查:如果配置有误,脚本会退出并提供清晰、可执行的错误提示,指向 PROVIDERS.md。 - 检查是否可以使用
node:which node。如果找不到,则中止:❌ 未安装node。 - 确定当前调用的
SKILL.md所在的绝对目录。将运行时 包路径设为<skill-directory>/scripts/generate-images.js,并确认该 文件存在。调用时始终使用绝对路径并加引号。切勿根据 cwd 或 Agent 主目录惯例推断路径,也不要安装运行时依赖。
流程
第 1 步:确定范围,并在同一条提示中确认费用
解析 IMAGE_SPEC.md 中的所有条目。检查项目文件夹中已存在的文件名。
每次生成都会产生 API 费用,因此必须在一条消息中,通过且仅通过一个 Decision Prompt,以纯文本说明范围内的条目数,以及脚本将使用的提供方和模型(可由调用框架的结构化提问工具承载)。按脚本中的顺序确定:用户提供的 --provider=/--model= 标志;接着是保存在 PROJECT.json phases.images 中的标志选择(providerSource 或 modelSource 为 "flag");然后是 API 密钥已设置的提供方(如果两者都已设置,则使用 Gemini),以及该提供方在 PROVIDERS.md 中的默认模型。
-
已命名范围: 用户的请求或刚回答的 Decision Prompt,能明确对应到条目:幻灯片编号、文件名、"all"、"missing",或与某个条目完全匹配的描述。如果指定的幻灯片或文件名没有对应条目,需说明这一点,并将范围视为未知。否则,对于范围内每个已存在的文件,分别列出一行
Overwriting images/foo.png (Slide N),然后确认:💡 Generate N images with <provider>/<model>? (yes / one at a time / cancel) See PROVIDERS.md for pricing details. -
范围未知,且不存在图像: 范围为所有条目;使用相同的确认方式。
-
范围未知,且至少存在一张图像: 将范围与费用合并确认:
💡 images/: N of M present. Generate with <provider>/<model>? Already present: • images/foo.png (Slide 1 — Title) [...] Not yet generated: • images/bar.png (Slide 3 — Title) [...] A Missing only (M−N) B Everything (M) C Slides — e.g. "C 1 3" D Cancel Add "one at a time" to review each image. See PROVIDERS.md for pricing.C 从同一回复中获取幻灯片编号;只有用户仅回复 C 时,才询问“哪些幻灯片编号?(例如:
1 3 5)”,随后再次确认条目数。
回答 yes、A、B 或 C → Batch;回答包含 "one at a time" → Interactive;回答 cancel 或 D → 停止,不调用脚本;保持文件和 phases.images 不变。
步骤 2:生成
批量
node "<absolute skill directory>/scripts/generate-images.js" \
"<IMAGE_SPEC.md path>" [--force] [--slides=N,M,...] [--provider=<gemini|openai>] [--model=<id>] [--delay=<seconds>]
- 每个条目,或仅处理缺失项 → 不添加额外标志(脚本会跳过已有文件)
- 全部处理 → 添加
--force - 选择的幻灯片 → 添加
--slides=N,M,...;若要覆盖已有文件,再添加--force
交互式(一次一个)
对于范围内的每张图片,运行:
node "<absolute skill directory>/scripts/generate-images.js" \
"<IMAGE_SPEC.md path>" --slide=N --force [--provider=<gemini|openai>] [--model=<id>]
每次运行后,显示:
✅ Saved: images/foo.png (Slide N — Title)
Open to review, then choose:
N Next — accept and continue to the next image
R Redo — regenerate with the same prompt (different result)
S Stop — exit and keep what has been generated so far
注意:若要在重新生成前更改提示词,请先编辑 IMAGE_SPEC.md,然后选择 R。
R 重新运行相同的脚本调用。S 提前退出循环。
步骤 3:报告结果
显示脚本的摘要输出。如果失败,建议编辑 IMAGE_SPEC.md 中的提示词,然后使用 --slide=N 重试。
选项
generate-images.js 的标志。脚本本身不会显示提示。
| 标志 | 效果 |
|---|---|
--force | 覆盖已存在的图片 |
--slide=N | 仅生成第 N 张幻灯片 |
--slides=N,M,... | 仅生成这些幻灯片 |
--provider=<gemini|openai> | 覆盖自动检测到的提供方(参见 PROVIDERS.md) |
--model=<id> | 覆盖已解析提供方的默认模型(参见 PROVIDERS.md) |
--delay=<seconds> | 请求之间的暂停时间(默认:1s;增加此值以避免触发速率限制 — 参见 PROVIDERS.md) |
提供方
根据设置的密钥自动检测 — GEMINI_API_KEY 或 OPENAI_API_KEY。如果两者都已设置,则默认使用 Gemini。使用 --provider=gemini|openai 覆盖。有关设置和安全指南,请参见 PROVIDERS.md。
项目状态
从 DISCOVERY.json 读取 paths.imageSpec 和 paths.images,若未设置,则回退到
IMAGE_SPEC.md 和 images/。脚本会在解析出 provider、
providerSource、model 和 modelSource 后立即将其持久化到
PROJECT.json 的 phases.images 中(参见
docs/state-schema.md),不受生成结果影响。
所有选中的条目均成功后,将 phases.images.status 设为 "done",并
记录其完成时间戳。取消操作或任何条目失败时,不要将该阶段标记为已完成。