gpt-image2-ppt skill
Generate visually striking PPT slides via OpenAI's gpt-image-2 -- use any style in styles/<collection>/STYLE_ID.md or mimic a user-supplied .pptx template; outputs high-res slide PNGs and a 16:9 .pptx. Use when the user asks to make a presentation, slides, deck, pitch deck, investor PPT, magazine-style PPT, or 做一份 PPT / 生成幻灯片 / 用 gpt-image 生成 PPT / 按这个模板生成 PPT.
Is the gpt-image2-ppt skill safe?
Clean: nothing in its files matched our rules. We read 6 files in the folder on 2026-09-28.
No findings.
Install the gpt-image2-ppt skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/JuneYaooo/gpt-image2-ppt-skills.git /tmp/gpt-image2-ppt-skills mkdir -p ~/.claude/skills cp -r /tmp/gpt-image2-ppt-skills/. ~/.claude/skills/gpt-image2-ppt
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
gpt-image2-ppt -- 用 gpt-image-2 生成 PPT
把一份 markdown 大纲(或 slides_plan.json)+ 一种视觉风格,直接喂给 OpenAI 官方 Images API(gpt-image-2),逐页出图,最后打包成 16:9 .pptx。
可用风格
所有可用风格都统一放在 styles/ 下并按来源分组,使用方式完全相同:initial/ 收录初始 10 套,featured/ 收录精选 22 套,xiamulingzi/ 收录设计师 @夏目玲子 提供的 233 套。目录索引见 styles/README.md;精选风格封面展示见 docs/distilled-styles.md。
风格选择原则:先根据内容场景在 styles/ 里选择最贴近的一套。技术类可优先看 dark-aurora / gradient-glass / data-science-consulting,商务类可优先看 clean-tech-blue / editorial-mono / eco-green-business-plan / investment-company-business-plan,文化生活类可优先看 japanese-wabi / vector-illustration / culinary-innovation / flowery,学术类可优先看 swiss-grid / geometric-duotone-thesis / final-year-project-thesis-defense,工作坊与培训类可优先看 hand-sketch / mind-maps-workshop-professional / mindfulness-in-the-classroom-breathing-techniques。
场景 recipes(可选起步模板)
examples/ 不是新的 skill,也不是运行时必须输入;它是当前 skill 的场景起步模板库,用来在用户只给出模糊需求时,帮助 agent 更快写出第一版 slides_plan.md。
触发规则:
- 用户已经提供完整大纲 / 完整 slidesplan.md / 完整 slidesplan.json 时,不要套 recipe,直接按用户内容走生成流程。
- 用户只说“做一份产品发布 PPT / 融资路演 / 周报 / 课程课件 / 论文答辩 / 读书分享”等常见场景,且没有给清晰页结构时,先查看 examples/ 是否有匹配 recipe。
- recipe 只作为结构参考:读取 examples//recipe.md 了解场景、推荐风格和注意事项,再参考 examples//slides_plan.md 的页序结构,改写成用户自己的主题与内容。
- 不要把示例里的虚构产品、公司、项目、数据直接当成用户成品;必须替换为用户提供的信息,或明确标注为占位内容并等待用户确认。
- 如果用户给了真实图片、logo、截图、论文图表或产品 UI,仍按“外部真实图片贴入”规则处理;recipe 只负责内容结构,不替代素材保真流程。
当前内置 recipes:
使用方式:
- 判断用户需求是否命中某个 recipe。
- 读取对应 recipe.md 和 slides_plan.md。
- 基于用户主题改写一份新的 slides_plan.md,不要直接改 recipe 源文件。
- 与用户确认页数、每页标题和关键内容。
- 用户确认后再执行 mdtoplan.py 转 json,并继续下面的指定风格或模板克隆流程。
内置风格的 layout bank sidecar(唯一运行格式)
内置风格采用“MD 给人看,JSON 给机器用”的双文件结构:
styles/<collection>/<style-id>.md # 风格说明、设计令牌、基础提示词
styles/<collection>/<style-id>.layouts.json # 必需;每页 layout bank,供自动分配页面形态generateppt.py 会把同名 .layouts.json 作为无 reference image 的 RuntimeProfile 使用:通过 assignlayouts() 分配不同 layout,把 visualsignature / contentcapacity / bestfor / avoidfor / variation_tags 写入 prompt,并把命中的 layout 精简信息写入 metadata.json。
当前所有 styles//.md 都必须配套同目录、同名的 .layouts.json。只有 Markdown、缺少 sidecar 的旧风格会在出图前直接报错,不再静默走旧 Prompt;先把它迁移为配对格式。以后蒸馏公开模板或新增内置风格时,必须同时产出 JSON sidecar;不要把多页 layout 只压缩进单个 MD 的“布局系统”文字段落。
统一 RuntimeProfile 运行内核
严格模板克隆和结构化 style sidecar 都先编译成同一种 RuntimeProfile,再统一经过 assign_layouts()、页面 Profile 附着、prompt 编译和 metadata 记录。入口适配器只保留必要差异:
- template-clone:来自 --template-profile 或模板 vision 分析;layout 可携带 reference_image,只有 --template-strict 才实际传入生图。
- distilled-style:来自 .md + .layouts.json;使用内容路由和多布局,不依赖原模板图片。
RuntimeProfile 统一记录 sourcekind、固定的 promptstrategy=layout-fields、layouts 和 capabilities(routing / evidence / reference / portability)。优先级固定为:有效模板 Profile > style RuntimeProfile;模板分析没有 layouts 时必须真正回退到结构化 style,而不是只打印提示。运行时不再包含 legacy-freeform 或 synthetic layout 分支。
模板克隆模式
直接给 skill 一个 .pptx 模板,后续所有页都仿这个模板。
# 一行:自动渲染 + 模板分析 + 出图。需本机有可用 PPTX 渲染后端
python3 scripts/generate_ppt.py \
--plan slides_plan.json \
--template-pptx ./company-template.pptx \
--template-strict--template-strict 表示每页都把模板对应页作为 image reference 喂给 gpt-image-2,仿真度最高。
模板渲染:本机不需要操作 PowerPoint
skill 自带 rendertemplate.py,把 .pptx 自动渲染成每页 PNG,存到 /templaterenders//page-NN.png。
Agent 前置检查(模板克隆时必须做)
在跑任何 --template-pptx 命令之前,你必须先检查本机是否有可用 PPTX 渲染后端。
检查方式:
- 首选:在 skill 目录运行 python3 scripts/render_template.py --check。它会验证后端是否真的可执行,而不是只看路径是否存在。
- macOS:优先检查 /Applications/Keynote.app 且 AppleScript 可执行;否则检查 libreoffice --version || soffice --version
- Windows:优先检查本机 PowerPoint COM 可启动;否则检查 libreoffice --version / soffice --version
- Linux / 兼容层:检查 libreoffice --version || soffice --version,不要只用 which
注意:鸿蒙 / Termux / 容器 / 特殊架构环境可能看起来像 Linux,但不能假设 Linux aarch64 的 LibreOffice 二进制可运行;必须以 render_template.py --check 或 soffice --version 的实际执行结果为准。不要把 aspose-slides 当默认兜底,它在很多移动/特殊 Python 环境没有可安装 wheel。
如果都没有可用后端,先告知用户模板渲染需要安装可执行的 LibreOffice,或让用户在桌面端手动把模板每页导出为 page-01.png、page-02.png 后通过 --template-images 传入。可选安装命令:
装完再次检查,确认存在可用渲染后端再继续后续流程。
注意:Windows 上 winget 是 Win10/11 自带,会弹 UAC 确认框,需要用户点确认;macOS 上 brew 需要先安装 Homebrew。
render_template.py 的渲染后端按优先级自动挑:
- Windows:PowerPoint COM(本机有 Office 时优先,直出 PNG,跳过 PDF 步骤)> LibreOffice
- macOS:Keynote AppleScript(本机有 Keynote 时优先,直出 PNG)> LibreOffice
- Linux / 兼容层:通过 --version 探测确认可运行的 LibreOffice / soffice 命令
- PDF -> PNG 走 pymupdf(已在 requirements);没装就用 pdf2image + poppler
跑 generate_ppt.py --template-pptx ... 时如果省略 --template-images 会自动调一次渲染;也可以手动先跑一次:
python3 scripts/render_template.py company-template.pptx
# -> <cwd>/template_renders/company_template/page-01.png ... page-NN.png仿模板的两层缓存
三者都在调用者 cwd 下,与项目自然同进退;建议把 templaterenders/、templatecache/、outputs/ 加进项目的 .gitignore。
模板看图分析(让 agent 自己判断要不要配 VISION)**:
- 当前 code agent 本身是多模态模型(例如 Claude Code 的多模态 Claude、Codex 的多模态 GPT):不需要额外配置 VISION。agent 直接读取 templaterenders//page-.png,按 templateanalyzer.py 的 TemplateProfile 结构生成 templateprofile.json,再用 --template-profile templateprofile.json 传给 generateppt.py。如果要配合 --template-strict,每个 layout 里要写 referenceimage(模板 PNG 的绝对路径或可访问路径)。
- 当前 code agent 是纯文本模型(例如只接入 DeepSeek 文本模型):它看不了模板截图,需要额外配置 VISIONBASEURL / VISIONAPIKEY / VISIONMODELNAME,让 template_analyzer.py 调一个独立的 OpenAI 兼容多模态端点做模板分析。
vision 分析与图片生成的 gpt-image-2 永远解耦——换 vision provider 不影响出图路径。
安装
git clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git
cd gpt-image2-ppt-skills
bash install_as_skill.sh --target claude # Claude Code
# 或
bash install_as_skill.sh --target codex # Codex
# API 直连所需密钥优先通过 agent 配置 / 系统环境变量注入环境变量注入(API 直连时)
不要把本 skill 的密钥写进调用者业务项目根目录的 .env,也不要为了出图去读取用户项目里的通用 .env。环境变量建议按 agent 框架的标准方式注入:
- 通用 / CI / 服务器:用系统环境变量、Docker Compose environment / env_file、Kubernetes Secret、CI Secret 等注入。
- Claude Code:用用户级 ~/.claude/settings.json 或项目级 .claude/settings.local.json 注入环境变量;命令行环境变量优先级最高。
- OpenClaw / 自定义 Agent:用框架配置里的 apiKey / env reference 引用系统环境变量,避免把 key 明文写进项目配置。
- 本地 standalone CLI fallback:可以设置 GPTIMAGE2PPT_ENV=/path/to/private.env,或使用 skill 安装目录下的 .env;这只是备用方式,不是业务项目 .env。
API 直连需要这些变量:
OPENAI_BASE_URL=https://api.openai.com # 或任意 OpenAI 兼容中转站
OPENAI_API_KEY=sk-...
GPT_IMAGE_MODEL_NAME=gpt-image-2
GPT_IMAGE_QUALITY=high # low / medium / high / auto
# 可选:模板克隆模式的 vision 分析 backend。
# 多模态 agent / 原生 Codex 可自己看图生成 --template-profile,不需要下面这组。
# 只有纯文本 agent(如 DeepSeek 文本模型)才需要外挂下面这组。
# 不内置默认 endpoint,请填你自己信任的服务,否则就别填。
# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1
# VISION_API_KEY=sk-...
# VISION_MODEL_NAME=gemini-3.1-pro-preview # 或 gpt-4o / claude-3.5-sonnet 等任意多模态 SKU配置优先级固定为:当前进程环境变量 > 平台注入的 gpt-image2-ppt 变量 > GPTIMAGE2PPTENV / skill 目录下的 .env;JULINGGPTIMAGE2 只作为没有对应 OPENAI 配置时的兼容 fallback,不会覆盖显式配置。
安全提示:脚本只读取当前进程环境、平台注入的 gpt-image2-ppt 变量、显式 GPTIMAGE2PPTENV,以及 skill 安装目录下的 .env fallback。脚本不会向上递归读取调用者项目目录里的 .env,避免误吃业务项目密钥。python3 scripts/render_template.py --check 会执行一个最小真实转换来验证回渲染后端。
如果你就是 Codex agent(原生 image_generation 出图 — 推荐)
如果你自己就是 Codex(正在运行本 skill 的 agent 就是 Codex CLI / Codex TUI),并且当前环境提供 imagegeneration tool 和 ChatGPT 登录态,此时不要用 generateppt.py 或 --backend codex 负责出图,直接用原生工具生成图片,最后只复用本仓库的 md 转换 / PPTX 打包逻辑即可。
关键边界:Python 脚本运行在子进程里,拿不到当前 agent 会话里的原生 tool。generateppt.py --backend codex 能做的只有再启动一个 codex exec 子进程,让另一个 Codex 去出图;它不是“复用当前 Codex 的 imagegeneration tool”。所以当前 agent 已经能原生出图时,出图动作必须由 agent 本身完成,而不是交给 generate_ppt.py。
如何判断
你能访问 imagegeneration tool,并且不需要手动配 OPENAIAPI_KEY 就能出图——满足这两个条件就走原生路径。若当前 Codex 会话没有这个 tool,就按普通 agent 处理:走 API 直连、--backend codex 备用后端,或让用户补齐环境。
出图流程(Codex 原生路径)
1. 准备 slides 数据