← 返回
未分类 Key

Gpt Image2 Ppt Skills

Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / W...
通过 OpenAI gpt‑image‑2 生成视觉冲击力强的 PPT,包含 10 种精选风格(空间玻璃、科技蓝、编辑单色、暗极光、里斯格等)。
juneyaooo
未分类 clawhub v1.1.1 3 版本 100000 Key: 需要
★ 0
Stars
📥 628
下载
💾 0
安装
3
版本
#deck#latest#openai-images#ppt#presentation#slides#template-clone

概述

gpt-image2-ppt -- 用 gpt-image-2 生成 PPT

把一份 markdown 大纲(或 slides_plan.json)+ 一种视觉风格,直接喂给 OpenAI 官方 Images API(gpt-image-2),逐页出图,最后拼成一个键盘可翻页的 HTML viewer + 16:9 .pptx。

十种内置风格

风格 ID一句话定位适用场景
---------
gradient-glassApple Vision OS / Spatial GlassAI 产品发布、技术分享、创意提案
clean-tech-blueStripe / Linear 级蓝白融资路演、商业计划书、企业战略
vector-illustration复古矢量插画 + 黑描边教育培训、品牌故事、社区分享
editorial-monoKinfolk / Monocle 编辑设计品牌发布、文化访谈、读书分享
dark-auroraLinear / Vercel 深色霓虹AI 产品、开发者工具、技术分享
risographRiso 双套色印刷 + 网点纹理创意工作室、文创品牌、独立 zine
japanese-wabi无印 / 原研哉式侘寂茶道、生活方式、奢侈品、文化讲座
swiss-gridBauhaus / Vignelli 国际主义网格学术报告、博物馆展陈、严肃汇报
hand-sketchSketchnote / 白板手绘工作坊、产品 brainstorming、培训
y2k-chromeY2K 千禧液态金属 + 蝴蝶贴纸潮牌、文娱、品牌联名、Z 世代营销

> 风格选择原则:技术类首选 dark-aurora / gradient-glass,商务类首选 clean-tech-blue / editorial-mono,文化生活类首选 japanese-wabi / vector-illustration,潮文娱类首选 risograph / y2k-chrome,学术类首选 swiss-grid,工作坊与早期创意类首选 hand-sketch

模板克隆模式

直接给 skill 一个 .pptx 模板,后续所有页都仿这个模板。

# 一行:自动渲染 + vision 抽风格 + 出图。本机有 LibreOffice 或 docker 镜像即可
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 自带 render_template.py,把 .pptx 自动渲染成每页 PNG,存到 /template_renders//page-NN.png

后端按优先级自动挑:

  1. 本机 libreoffice / soffice 命令(最快)
  2. 本机 docker + linuxserver/libreoffice 镜像(首次拉 ~2.5GB)
  3. PDF -> PNG 走 pymupdf(已在 requirements);没装就用 pdf2image + poppler

如果两种 LibreOffice 都没有,会让用户手动从 PowerPoint/Keynote/WPS 导出每页 PNG,命名 page-01.png 起按字典序对应页码。

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

仿模板的两层缓存

资料路径用途
---------
模板每页 PNG/template_renders//page-NN.pngLibreOffice 一次渲染长期复用
Vision 风格分析/template_cache/.jsongemini-3.1-pro-preview 一次分析长期复用
生成产物/outputs//每次新跑都新目录

三者都在调用者 cwd 下,与项目自然同进退;建议把 template_renders/template_cache/outputs/ 加进项目的 .gitignore

vision 模型(让 agent 自己判断要不要配)

  • 如果当前运行本 skill 的 agent 自己就是多模态的(Claude Code 走 Claude Opus/Sonnet 等多模态 SKU、codex 走 GPT 多模态 SKU 等),压根不用外挂 vision 模型:直接让 agent 自己 Read template_renders//page-.png,一次把风格抽出来写进 template_cache/.json 即可(schema 见 template_analyzer.py)。这是默认路径,不需要配 VISION_
  • 只有 agent 本身是纯文本模型(或你想强制用某个更强的 vision 做模板分析),才去配 VISION_*template_analyzer.py 走一个独立的 OpenAI 兼容多模态 chat completions 端点(Gemini / GPT / Claude 任选,不内置 default)。

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 直连模式时,再编辑对应目录下的 .env 填入 API_KEY

必需的环境变量

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。
# 默认让调用本 skill 的 agent 自己看图(多模态 Claude Code / 多模态 codex 皆可),
# 只有 agent 本身是纯文本模型时才需要外挂下面这组。
# 不内置默认 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

> 安全提示:脚本只从 /.env~/.codex/skills/.../.env~/.claude/skills/.../.env~/skills/.../.env 与显式 GPT_IMAGE2_PPT_ENV 加载凭据,不会向上递归读取项目目录里的 .env,避免误吃无关密钥。

如果你就是 Codex agent(原生 image_generation 出图 — 推荐)

如果你自己就是 Codex(正在运行本 skill 的 agent 就是 Codex CLI / Codex TUI),你自带 image_generation tool 和 ChatGPT 登录态。此时不要generate_ppt.py,直接用原生工具完成整个 pipeline——零依赖、零 API Key、零套娃。

如何判断

你能访问 image_generation tool,并且不需要手动配 OPENAI_API_KEY 就能出图——满足这两个条件就走原生路径。

出图流程(Codex 原生路径)

1. 准备 slides 数据

如果还没有 slides_plan.json,先按下面「生成流程」第 2-3 步写 slides_plan.mdpython3 scripts/md_to_plan.py ... 转 json。

2. 读风格模板

styles/.md,取 ## 基础提示词模板 section 作为 base prompt。

3. 构造每页 prompt

参考 generate_ppt.pygenerate_prompt() 逻辑,核心规则:

  • 封面(cover/slide 1):标题/副标题为视觉焦点
  • 数据页(data/最后一页):突出关键数字、对比或结论
  • 内容页(content/其余页):按层级、对齐、留白结构化呈现
  • 所有文字必须简体中文,字体用思源黑体/苹方,严禁草书/艺术字
  • 16:9 横版宽屏(landscape, widescreen),prompt 里明确说"宽度明显大于高度、绝对不要方图"
{style 基础提示词模板}

---

现在请生成本组中的【{封面页/内容页/数据页}】,{对应 hint}
本页要呈现的内容如下(请按本风格美学重新设计版式):

{slide content}

【强制语言与字体要求】
1. 所有文字必须使用简体中文,严禁英文(专有名词除外)
2. 中文字体使用思源黑体或苹方,严禁草书、艺术字
3. 标题粗体,正文常规,字号对比清晰

【画面比例 — 强制】16:9 横版宽屏 (landscape, widescreen),宽度明显大于高度,绝对不要方图或竖图。

4. 调 image_generation tool 出图

对每页调你的 image_generation tool:

  • prompt: 上面拼好的完整 prompt
  • output_format: png
  • 将返回的图片保存到 outputs//images/slide-NN.png(NN 为两位页码)

可以并发(建议 ≤4 并发,避免限流)。

5. 生成 HTML viewer

templates/viewer.html,把 / IMAGE_LIST_PLACEHOLDER / 替换为 'images/slide-01.png', 'images/slide-02.png', ...,写到 outputs//index.html

6. 打包 PPTX(可选)

python3 -c "
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]
import os, glob
for p in sorted(glob.glob('outputs/<timestamp>/images/slide-*.png')):
    slide = prs.slides.add_slide(blank)
    slide.shapes.add_picture(p, 0, 0, width=prs.slide_width, height=prs.slide_height)
prs.save('outputs/<timestamp>/<title>.pptx')
print('done')
"

模板克隆模式(Codex 原生路径)

你自己就是多模态 agent——直接 Read 模板每页 PNG 抽取视觉风格,写到 template_cache/.json(schema 见 template_analyzer.py 里的 TemplateProfile),然后按上面流程出图时把对应模板页作为 reference image 传给 image_generation tool。

不需要配 VISION_*——你就是 vision。

与下面「--backend codex」的区别

原生路径(本节)--backend codex
---------
适用场景你就是 Codex agent你是 Claude Code / 其他 agent,借用本机 codex CLI
调用方式直接调 image_generation toolspawn codex exec --full-auto 子进程
出图层数1 层2 层(agent → python → codex exec)
速度几秒/张30-60s/张
可靠性tool 参数精确自然语言 relay,偶发失败
需要 API Key不需要不需要

可选:走 codex CLI 出图(--backend codex,非 Codex caller 用)

> 如果你就是 Codex agent,不要走这条路——用上一节的「原生路径」代替。

当你用 Claude Code / OpenClaw / 其他 agent 运行本 skill,但本机装了 codex CLI 且已登录(codex login),可以借用它的凭据出图,省掉配 OPENAI_API_KEY

python3 scripts/generate_ppt.py --plan slides_plan.json --style styles/editorial-mono.md --backend codex

默认后端仍是 openai(直调 API,快、并发稳、每页 3-10s)。--backend codex 是逃生口,适合"只跑 1-2 张图试水、不想配 key"的场景。

Tradeoffs

  • ✅ 不需要在本 skill 配 OPENAI_API_KEY
  • ⚠️ 慢:每页多一层 agent loop,单页 30-60s+,10 页可能 5-10 分钟
  • ⚠️ 计费不变:gpt-image-2 是按图计费,不在 ChatGPT 订阅内,codex 只是代你刷额度
  • ⚠️ 可控性差:aspect_ratio / quality / reference_image 靠自然语言指令让 codex 转发,偶发失败

相关 env(都可选):

CODEX_CMD="codex exec --full-auto"   # 覆盖 codex 调用方式(默认这串)
CODEX_IMAGE_MODEL=gpt-image-2        # 传给 codex 的目标模型
CODEX_TIMEOUT_SECS=900               # 单页超时
GPT_IMAGE_BACKEND=codex              # 不想每次敲 --backend 就设这个

模板克隆的 vision 分析同理——当 caller agent 自己是多模态时(Claude Code / 多模态 codex),可以直接 Read 模板 PNG 抽取风格,不用配 VISION_*;只有 caller agent 是纯文本模型时才需要外挂 vision provider。

生成流程(内置风格)

先 md 后 json:md 给人看、方便 diff / review / 改文案;json 由 md 派生,喂给 generate_ppt.py,标为 generated,不手改。

  1. 用户给一份大纲 / 已有的 slides_plan.json
  2. Claude 按下面 md 规范写一份 slides_plan.md,与用户确认文案:

````markdown

---

title: MediWise Health Suite 商业计划书

---

## 1. [cover] MediWise Health Suite

副标题:家庭健康管理智能平台

年份:2026

## 2. [content] 市场痛点:健康管理的两类割裂

痛点一:高频无深度

...

## 6. [data] 效率对比:使用 MediWise 前后

...

````

  • h2 格式:## N. [page_type, layout=layout-05] 本页标题行
  • N. 可省(按出现顺序自动编号);[page_type] 可省(默认 content);layout= 只在模板克隆模式需要
  • page_type: cover / content / data
  • h2 标题行 → json 里 content 的第一行;下面的正文 → 正文
  1. 用户 OK 后,转 json:

```bash

python3 scripts/md_to_plan.py slides_plan.md -o slides_plan.json

```

  1. 选风格:从上面 10 套里挑一个,对应 styles/.md
  2. 调脚本:

```bash

python3 scripts/generate_ppt.py --plan slides_plan.json --style styles/editorial-mono.md

```

  1. 产物在 /outputs//
    • images/slide-XX.png -- 每页 PNG(16:9,1536x1024)
    • index.html -- HTML viewer,方向键翻页、空格自动播放、ESC 全屏
    • prompts.json -- 每页用到的完整 prompt(便于复盘 / 二次微调)
    • .pptx</code> -- 16:9 整页填充图片的 .pptx,分享 / 投影直接用</li></ul></ol><h2>生成流程(模板克隆)</h2><ol><li><strong>拿到模板 .pptx</strong>(用户提供 / 内部模板库 / 网络下载)</li><li><strong>(可选)先单独渲染并人工挑选</strong>----大模板(>15 页)建议先 <code>python3 scripts/render_template.py xxx.pptx</code>,再从 <code>template_renders/<stem>/</code> 里挑 8-12 张代表页复制到 <code>template_renders/<stem>_curated/</code>,供 vision 分析。页数越精,layout 命中越准</li><li><strong>生成 slides_plan.md → 转 slides_plan.json</strong>(见内置风格流程第 2-3 步)。每页 <code>slide_number</code> / <code>page_type</code> (<code>cover</code> / <code>content</code> / <code>data</code> / 等) / <code>content</code>;想精准对位时在 h2 里加 <code>layout=layout-NN</code>(NN = 模板第 N 页 / 你期望对应的模板页编号)</li><li><strong>跑 generate_ppt.py</strong>:</li></ol><p> ```bash</p><p> python3 scripts/generate_ppt.py \</p><p> --plan slides_plan.json \</p><p> --template-pptx xxx.pptx \</p><p> --template-images template_renders/xxx_curated \</p><p> --template-strict --slides 1</p><p> ```</p><p> 先 <code>--slides 1</code> 出封面冒烟,效果 OK 再跑全量</p><ol><li><strong>告知用户产物路径</strong></li></ol><h3>模板页面挑选 / 复用原则</h3><p><strong>核心原则:尽量做到 1 page : 1 layout</strong>----同一份 deck 里每个 slide 用不同的模板页作 reference,观众会觉得每页都是新内容;如果同一个独特 layout 出现 2-3 次,观众下意识会想"为什么又是这页"。</p><p>vision 分析时会给每个 layout 标 <code>reuse_friendly</code>:</p><table><thead><tr><th>reuse_friendly</th><th>典型 layout</th><th>多次使用的代价</th></tr></thead><tbody><tr><td>---</td><td>---</td><td>---</td></tr><tr><td><code>false</code>(不可复用,(!) 强警告)</td><td>封面、3 个具名角色插画页、独特场景图(雪山/广播塔/复古收音机)、5 步骤 zigzag 各步独有图标、novelty 数据中央装置</td><td>视觉重复非常明显,观众会困惑</td></tr><tr><td><code>true</code>(可复用,但仍建议错开,(i) 弱提示)</td><td>纯文字、卡片网格、通用列表、章节小节标题</td><td>不致命,但平白浪费模板里的其它好版式</td></tr></tbody></table><p>Claude 在搭 plan 时的执行策略:</p><ol><li><strong>优先把模板里 N 个不同 layout 分配给 N 页 slide</strong>(N 不够就在 SKILL 里看 reuse_friendly=true 的部分挑能复用的)</li><li><strong>如果 plan 里某页内容结构非常相似(比如多个"5 步骤流程"),先尝试改写内容用不同 layout 表达</strong>(4 步骤 + 5 步骤分别用不同流程页),而不是同一个 zigzag 用两次</li><li><strong>冒烟跑完后,看 <code>Layout 复用检测</code> 那段输出</strong>:(!) 必须改,(i) 看情况改;改 plan 里相应 slide 的 <code>layout_id</code> 即可</li><li><strong>看完 cache JSON 选 layout</strong>:<code>cat <cwd>/template_cache/<sha256>.json | jq '.layouts[] | {id, page_type, reuse_friendly, summary}'</code> 一眼看清模板有哪些版式可挑</li></ol><p><code>generate_ppt.py</code> 在派发任务前会自动跑一次复用检测,把警告打到终端,不阻塞执行。</p><h2>Skill 调用规范</h2><p>当用户说"做一份 PPT" / "生成幻灯片"时:</p><ol><li><strong>先问三件事</strong>(不要直接动手):</li><ul><li>内容 / 页数 / 观众是谁?</li><li>风格偏好?按"十种内置风格"表的场景类目映射推荐 1-2 个;<strong>或者用户上传自己的 .pptx 模板</strong>(走 <code>--template-pptx</code>,自动渲染)</li><li>是否需要单页测试一张图先看效果(<code>--slides 1</code>)</li></ul><li><strong>先写 slides_plan.md</strong> 给用户确认文案(md 是 source of truth,人审阅友好)</li><li><strong>转 slides_plan.json</strong>:<code>python3 scripts/md_to_plan.py slides_plan.md -o slides_plan.json</code>(json 标为 generated,不手改;要改文案回到 md 改再转)</li><li><strong>跑 generate_ppt.py</strong>,先 <code>--slides 1</code> 出封面冒烟,效果 OK 再跑全量</li><li><strong>告知用户产物路径</strong>,让他在浏览器打开 <code>outputs/<timestamp>/index.html</code> 或者 <code><title>.pptx</code></li></ol><h2>仅生成部分页</h2><pre><code>python3 scripts/generate_ppt.py --plan my_plan.json --style styles/dark-aurora.md --slides 1,3,5 </code></pre><p>跑过的页有同名 PNG 时会自动跳过,方便逐页迭代。</p><h2>文件结构</h2><pre><code>gpt-image2-ppt-skills/ |---- SKILL.md # 本文件(Claude Code skill 入口) |---- AGENTS.md # codex / aider / cursor 等 agent 的薄索引,指向本文件 |---- README.md # 项目说明 |---- scripts/ # 所有 Python 脚本 | |---- generate_ppt.py # 主入口(CLI) | |---- md_to_plan.py # slides_plan.md -> slides_plan.json 转换器(CLI) | |---- render_template.py # PPTX -> 每页 PNG 的辅助脚本(CLI + library) | |---- image_generator.py # gpt-image-2 wrapper(支持 reference image,openai backend) | |---- codex_backend.py # 可选:走 codex CLI 出图(--backend codex) | \---- template_analyzer.py # PPT 模板剖析器(vision + 缓存) |---- styles/ # 10 套内置风格 | |---- gradient-glass.md dark-aurora.md | |---- clean-tech-blue.md risograph.md | |---- vector-illustration.md japanese-wabi.md | |---- editorial-mono.md swiss-grid.md | |---- hand-sketch.md y2k-chrome.md |---- templates/viewer.html # HTML viewer 模板 |---- docs/README.en.md # 英文 README |---- install_as_skill.sh # 一键安装到 ~/.claude/skills/ |---- requirements.txt # requests + python-dotenv + python-pptx + jsonschema + pymupdf \---- .env.example </code></pre><p>调用时产生的运行时目录都在 <code><cwd></code> 下:</p><pre><code><your-project>/ |---- template_renders/<stem>/page-NN.png # PPTX 渲染(render_template.py) |---- template_cache/<sha256>.json # vision 风格分析缓存 \---- outputs/<timestamp>/ # 每次生成产物 </code></pre><h2>License</h2><p>Apache License 2.0.</p></div> </div> </div> <div id="tab-versions" class="detail-content"> <div class="detail-section"> <h2>版本历史</h2> <p style="margin-bottom:12px;font-size:14px;color:#94a3b8;">共 3 个版本</p> <ul class="version-list"> <li> <div> <span class="version-tag">v1.1.1</span> <span style="font-size:11px;color:#5b6abf;margin-left:8px;background:#eef0ff;padding:1px 8px;border-radius:10px;">当前</span> </div> <div style="font-size:12px;color:#94a3b8;"> 2026-05-21 13:04 安全 安全 </div> </li> <li> <div> <span class="version-tag">v1.1.0</span> </div> <div style="font-size:12px;color:#94a3b8;"> 2026-05-11 04:39 安全 安全 </div> </li> <li> <div> <span class="version-tag">v1.0.4</span> </div> <div style="font-size:12px;color:#94a3b8;"> 2026-05-07 13:49 安全 </div> </li> </ul> </div> </div> <div id="tab-security" class="detail-content"> <div class="detail-section"> <h2>安全检测</h2> <div class="sec-grid"> <div class="sec-card"> <h4>腾讯云安全 (Keen)</h4> <div class="sec-status sec-safe"> 安全,无风险 </div> <a href="https://tix.qq.com/search/skill?keyword=939b563607372a623dea1efc48b74728" target="_blank">查看报告</a> </div> <div class="sec-card"> <h4>腾讯云安全 (Sanbu)</h4> <div class="sec-status sec-safe"> 安全,无风险 </div> <a href="https://static.cloudsec.tencent.com/html-report-v2/2026/05/26/444086_2d1d047f1336cbcc6248216e1048d82f.html?q-sign-algorithm=sha1&q-ak=AKID8JMG1bzBC1dz96qNhssfFftujT1NCoFi&q-sign-time=1782904707%3B1814440707&q-key-time=1782904707%3B1814440707&q-header-list=host&q-url-param-list=&q-signature=182e7f663646e86e2636d9762d9d419b55718360" target="_blank">查看报告</a> </div> </div> </div> </div> <!-- Recommended Skills --> <div style="margin-top:24px;"> <h2 style="font-size:18px;font-weight:600;margin-bottom:16px;">🔗 相关推荐</h2> <div class="rec-grid"> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;">office-efficiency</span> <h3><a href="/s/excel-xlsx">Excel / XLSX</a></h3> <div class="rec-owner">ivangdavila</div> <div class="rec-desc">创建、检查和编辑 Microsoft Excel 工作簿及 XLSX 文件,支持可靠的公式、日期、类型、格式、重算及模板保留功能。</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 399</span> <span style="color:#5b6abf;">📥 149,704</span> </div> </div> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;">office-efficiency</span> <h3><a href="/s/gog">Gog</a></h3> <div class="rec-owner">steipete</div> <div class="rec-desc">Google Workspace 命令行工具,支持 Gmail、日历、云端硬盘、通讯录、表格和文档。</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 937</span> <span style="color:#5b6abf;">📥 187,716</span> </div> </div> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;">office-efficiency</span> <h3><a href="/s/word-docx">Word / DOCX</a></h3> <div class="rec-owner">ivangdavila</div> <div class="rec-desc">创建、检查和编辑 Microsoft Word 文档及 DOCX 文件,支持样式、编号、修订记录、表格、分节符及兼容性检查等功能。</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 475</span> <span style="color:#5b6abf;">📥 157,505</span> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded',function(){ document.querySelectorAll('.detail-tab').forEach(function(btn){ btn.addEventListener('click',function(e){ var tab = this.getAttribute('data-tab'); document.querySelectorAll('.detail-tab').forEach(function(b){b.classList.remove('active')}); document.querySelectorAll('.detail-content').forEach(function(c){c.classList.remove('active')}); this.classList.add('active'); var el = document.getElementById('tab-'+tab); if(el) el.classList.add('active'); }); }); }); </script> <div class="footer"> <p>Skill工具集 © 2026</p> </div></body> </html>