{"id":"67c249da-3d6e-4f55-ae39-56b664b3673a","entityType":"agent","slug":"clawhub-juneyaooo-gpt-image2-ppt","name":"Gpt Image2 Ppt Skills","canonicalUrl":"https://www.xpersona.co/agent/clawhub-juneyaooo-gpt-image2-ppt","canonicalPath":"/agent/clawhub-juneyaooo-gpt-image2-ppt","generatedAt":"2026-10-11T03:55:34.875Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T01:17:06.374Z","emptyReason":null},"description":"Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / W... Skill: Gpt Image2 Ppt Skills Owner: juneyaooo Summary: Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / W... Tags: deck:1.0.4, latest:1.1.1, openai-images:1.0.4, ppt:1.0.4, presentation:1.0.4, slides:1.0.4, template-clone:1.0.4 Version history: v1.1.1 | 2026-05-11T11:29:03.697Z | user - fix: add .gitattributes t","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17110xxjryky6mk3d7dykc7kx83rv19:gpt-image2-ppt","sourceUrl":"https://clawhub.ai/juneyaooo/gpt-image2-ppt","homepage":"https://clawhub.ai/juneyaooo/skills/gpt-image2-ppt","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/juneyaooo/gpt-image2-ppt","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/juneyaooo/skills/gpt-image2-ppt","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / W..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:17:06.374Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:17:06.374Z","emptyReason":null},"stars":null,"forks":null,"downloads":1208,"packageName":null,"latestVersion":"1.1.1","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T01:17:06.295Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T01:17:06.374Z","lastCrawledAt":"2026-10-11T01:17:06.295Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T01:17:06.295Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.1","createdAt":"2026-05-11T11:29:03.697Z","changelog":"- fix: add .gitattributes to prevent CRLF corruption of shell scripts on Windows - fix: probe standard LibreOffice install paths on Windows (shutil.which misses them) - fix: use platform-aware viewer open command (start on Windows, open on macOS/Linux) - fix: normalize backslashes in Docker volume mount paths on Windows - fix: disable POSIX mode in shlex.split on Windows (backslash = path separator)","fileCount":31,"zipByteSize":90050},{"version":"1.1.0","createdAt":"2026-05-09T12:38:26.263Z","changelog":"Add 3 new styles: dark-dashboard, magazine-minimal, nature-cinematic; add generate_ppt.py","fileCount":30,"zipByteSize":87890},{"version":"1.0.4","createdAt":"2026-04-22T13:30:02.421Z","changelog":"Strip non-ASCII fancy punctuation (em/en dashes, arrows, ⚠/ℹ, box-drawing) across all .md / .py / .yaml files to clear ClawHub's wide unicode-control-chars heuristic. CJK preserved.","fileCount":23,"zipByteSize":67582},{"version":"1.0.3","createdAt":"2026-04-22T13:26:09.550Z","changelog":"ASCII-only punctuation in SKILL.md (replaced em/en dashes, arrows, ▶, ⚠/ℹ, box-drawing, × with ASCII) to clear ClawHub's unicode-control-chars heuristic. CJK content preserved verbatim.","fileCount":23,"zipByteSize":67771},{"version":"1.0.2","createdAt":"2026-04-22T13:20:37.731Z","changelog":"Removed unscoped load_dotenv() in image_generator.py (was loading .env from cwd at import time, contradicting SKILL.md safety claim). Removed unscoped fallback load_dotenv() in generate_ppt.py — now if no scoped .env found, falls through to process env vars only, never walks cwd/parents.","fileCount":23,"zipByteSize":67793},{"version":"1.0.1","createdAt":"2026-04-22T13:15:36.857Z","changelog":"Security hardening: removed third-party VISION default endpoint, scoped .env loading (no parent walk), download size cap + content-type check, English-first description, scrubbed unicode invisibles, added agents/openclaw.yaml for ClawHub display.","fileCount":23,"zipByteSize":67538},{"version":"1.0.0","createdAt":"2026-04-22T13:04:19.005Z","changelog":"首发：10 套精选风格 + 模板克隆模式 + LibreOffice 自动渲染 + layout 复用检测","fileCount":22,"zipByteSize":65594}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17110xxjryky6mk3d7dykc7kx83rv19:gpt-image2-ppt","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T03:55:34.868Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-juneyaooo-gpt-image2-ppt/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T01:17:06.374Z","emptyReason":null},"readme":"Skill: Gpt Image2 Ppt Skills\n\nOwner: juneyaooo\n\nSummary: Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / W...\n\nTags: deck:1.0.4, latest:1.1.1, openai-images:1.0.4, ppt:1.0.4, presentation:1.0.4, slides:1.0.4, template-clone:1.0.4\n\nVersion history:\n\nv1.1.1 | 2026-05-11T11:29:03.697Z | user\n\n- fix: add .gitattributes to prevent CRLF corruption of shell scripts on Windows\n- fix: probe standard LibreOffice install paths on Windows (shutil.which misses them)\n- fix: use platform-aware viewer open command (start on Windows, open on macOS/Linux)\n- fix: normalize backslashes in Docker volume mount paths on Windows\n- fix: disable POSIX mode in shlex.split on Windows (backslash = path separator)\n\nv1.1.0 | 2026-05-09T12:38:26.263Z | user\n\nAdd 3 new styles: dark-dashboard, magazine-minimal, nature-cinematic; add generate_ppt.py\n\nv1.0.4 | 2026-04-22T13:30:02.421Z | user\n\nStrip non-ASCII fancy punctuation (em/en dashes, arrows, ⚠/ℹ, box-drawing) across all .md / .py / .yaml files to clear ClawHub's wide unicode-control-chars heuristic. CJK preserved.\n\nv1.0.3 | 2026-04-22T13:26:09.550Z | user\n\nASCII-only punctuation in SKILL.md (replaced em/en dashes, arrows, ▶, ⚠/ℹ, box-drawing, × with ASCII) to clear ClawHub's unicode-control-chars heuristic. CJK content preserved verbatim.\n\nv1.0.2 | 2026-04-22T13:20:37.731Z | user\n\nRemoved unscoped load_dotenv() in image_generator.py (was loading .env from cwd at import time, contradicting SKILL.md safety claim). Removed unscoped fallback load_dotenv() in generate_ppt.py — now if no scoped .env found, falls through to process env vars only, never walks cwd/parents.\n\nv1.0.1 | 2026-04-22T13:15:36.857Z | user\n\nSecurity hardening: removed third-party VISION default endpoint, scoped .env loading (no parent walk), download size cap + content-type check, English-first description, scrubbed unicode invisibles, added agents/openclaw.yaml for ClawHub display.\n\nv1.0.0 | 2026-04-22T13:04:19.005Z | user\n\n首发：10 套精选风格 + 模板克隆模式 + LibreOffice 自动渲染 + layout 复用检测\n\nArchive index:\n\nArchive v1.1.1: 31 files, 90050 bytes\n\nFiles: AGENTS.md (2857b), agents/openclaw.yaml (992b), docs/install.md (4450b), docs/README.en.md (6595b), generate_ppt.py (14803b), install_as_skill.sh (5969b), README.md (8205b), requirements.txt (81b), scripts/codex_backend.py (6678b), scripts/generate_ppt.py (22761b), scripts/image_generator.py (17921b), scripts/md_to_plan.py (5935b), scripts/render_template.py (7022b), scripts/template_analyzer.py (30593b), skill-card.md (2517b), SKILL.md (19096b), styles/clean-tech-blue.md (2862b), styles/dark-aurora.md (2903b), styles/dark-dashboard.md (2170b), styles/editorial-mono.md (2828b), styles/gradient-glass.md (2576b), styles/hand-sketch.md (2948b), styles/japanese-wabi.md (2844b), styles/magazine-minimal.md (2000b), styles/nature-cinematic.md (2286b), styles/risograph.md (2972b), styles/swiss-grid.md (2776b), styles/vector-illustration.md (2724b), styles/y2k-chrome.md (2950b), templates/viewer.html (9723b), _meta.json (133b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: gpt-image2-ppt\ndescription: Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Retro Vector) plus a template-clone mode that mimics any user-supplied .pptx; ships an HTML viewer 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.\n---\n\n# gpt-image2-ppt -- 用 gpt-image-2 生成 PPT\n\n把一份 markdown 大纲（或 `slides_plan.json`）+ 一种视觉风格，直接喂给 OpenAI 官方 Images API（`gpt-image-2`），逐页出图，最后拼成一个键盘可翻页的 HTML viewer + 16:9 .pptx。\n\n## 十种内置风格\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n> 风格选择原则：技术类首选 `dark-aurora` / `gradient-glass`，商务类首选 `clean-tech-blue` / `editorial-mono`，文化生活类首选 `japanese-wabi` / `vector-illustration`，潮文娱类首选 `risograph` / `y2k-chrome`，学术类首选 `swiss-grid`，工作坊与早期创意类首选 `hand-sketch`。\n\n## 模板克隆模式\n\n直接给 skill 一个 .pptx 模板，后续所有页都仿这个模板。\n\n```bash\n# 一行：自动渲染 + vision 抽风格 + 出图。本机有 LibreOffice 或 docker 镜像即可\npython3 scripts/generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict\n```\n\n`--template-strict` 表示每页都把模板对应页作为 image reference 喂给 gpt-image-2，仿真度最高。\n\n### 模板渲染：本机不需要操作 PowerPoint\n\nskill 自带 `render_template.py`，把 .pptx 自动渲染成每页 PNG，存到 `<cwd>/template_renders/<stem>/page-NN.png`。\n\n后端按优先级自动挑：\n1. 本机 `libreoffice` / `soffice` 命令（最快）\n2. 本机 docker + `linuxserver/libreoffice` 镜像（首次拉 ~2.5GB）\n3. PDF -> PNG 走 `pymupdf`（已在 requirements）；没装就用 `pdf2image` + poppler\n\n如果两种 LibreOffice 都没有，会让用户手动从 PowerPoint/Keynote/WPS 导出每页 PNG，命名 `page-01.png` 起按字典序对应页码。\n\n跑 `generate_ppt.py --template-pptx ...` 时如果省略 `--template-images` 会自动调一次渲染；也可以手动先跑一次：\n\n```bash\npython3 scripts/render_template.py company-template.pptx\n# -> <cwd>/template_renders/company_template/page-01.png ... page-NN.png\n```\n\n### 仿模板的两层缓存\n\n| 资料 | 路径 | 用途 |\n| --- | --- | --- |\n| 模板每页 PNG | `<cwd>/template_renders/<stem>/page-NN.png` | LibreOffice 一次渲染长期复用 |\n| Vision 风格分析 | `<cwd>/template_cache/<sha256>.json` | gemini-3.1-pro-preview 一次分析长期复用 |\n| 生成产物 | `<cwd>/outputs/<timestamp>/` | 每次新跑都新目录 |\n\n三者都在调用者 cwd 下，与项目自然同进退；建议把 `template_renders/`、`template_cache/`、`outputs/` 加进项目的 `.gitignore`。\n\n**vision 模型(让 agent 自己判断要不要配)**：\n\n- **如果当前运行本 skill 的 agent 自己就是多模态的**（Claude Code 走 Claude Opus/Sonnet 等多模态 SKU、codex 走 GPT 多模态 SKU 等），**压根不用外挂 vision 模型**：直接让 agent 自己 `Read` `template_renders/<stem>/page-*.png`，一次把风格抽出来写进 `template_cache/<sha256>.json` 即可(schema 见 `template_analyzer.py`)。这是默认路径,不需要配 `VISION_*`。\n- **只有 agent 本身是纯文本模型**(或你想强制用某个更强的 vision 做模板分析)，才去配 `VISION_*` 让 `template_analyzer.py` 走一个独立的 OpenAI 兼容多模态 chat completions 端点(Gemini / GPT / Claude 任选,不内置 default)。\n\nvision 分析与图片生成的 `gpt-image-2` 永远解耦——换 vision provider 不影响出图路径。\n\n## 安装\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh --target claude   # Claude Code\n# 或\nbash install_as_skill.sh --target codex    # Codex\n# 仅当你走 API 直连模式时，再编辑对应目录下的 .env 填入 API_KEY\n```\n\n## 必需的环境变量\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # 或任意 OpenAI 兼容中转站\nOPENAI_API_KEY=sk-...\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                     # low / medium / high / auto\n\n# 可选：模板克隆模式的 vision 分析 backend。\n# 默认让调用本 skill 的 agent 自己看图（多模态 Claude Code / 多模态 codex 皆可）,\n# 只有 agent 本身是纯文本模型时才需要外挂下面这组。\n# 不内置默认 endpoint，请填你自己信任的服务,否则就别填。\n# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\n# VISION_API_KEY=sk-...\n# VISION_MODEL_NAME=gemini-3.1-pro-preview   # 或 gpt-4o / claude-3.5-sonnet 等任意多模态 SKU\n```\n\n> **安全提示**：脚本只从 `<script_dir>/.env`、`~/.codex/skills/.../.env`、`~/.claude/skills/.../.env`、`~/skills/.../.env` 与显式 `GPT_IMAGE2_PPT_ENV` 加载凭据，**不会**向上递归读取项目目录里的 `.env`，避免误吃无关密钥。\n\n## 如果你就是 Codex agent（原生 image_generation 出图 — 推荐）\n\n**如果你自己就是 Codex**（正在运行本 skill 的 agent 就是 Codex CLI / Codex TUI），你自带 `image_generation` tool 和 ChatGPT 登录态。此时**不要**跑 `generate_ppt.py`，直接用原生工具完成整个 pipeline——零依赖、零 API Key、零套娃。\n\n### 如何判断\n\n你能访问 `image_generation` tool，并且不需要手动配 `OPENAI_API_KEY` 就能出图——满足这两个条件就走原生路径。\n\n### 出图流程（Codex 原生路径）\n\n**1. 准备 slides 数据**\n\n如果还没有 `slides_plan.json`，先按下面「生成流程」第 2-3 步写 `slides_plan.md` → `python3 scripts/md_to_plan.py ...` 转 json。\n\n**2. 读风格模板**\n\n读 `styles/<id>.md`，取 `## 基础提示词模板` section 作为 base prompt。\n\n**3. 构造每页 prompt**\n\n参考 `generate_ppt.py` 的 `generate_prompt()` 逻辑，核心规则：\n\n- 封面（cover/slide 1）：标题/副标题为视觉焦点\n- 数据页（data/最后一页）：突出关键数字、对比或结论\n- 内容页（content/其余页）：按层级、对齐、留白结构化呈现\n- **所有文字必须简体中文**，字体用思源黑体/苹方，严禁草书/艺术字\n- **16:9 横版宽屏**（landscape, widescreen），prompt 里明确说\"宽度明显大于高度、绝对不要方图\"\n\n```text\n{style 基础提示词模板}\n\n---\n\n现在请生成本组中的【{封面页/内容页/数据页}】，{对应 hint}\n本页要呈现的内容如下（请按本风格美学重新设计版式）：\n\n{slide content}\n\n【强制语言与字体要求】\n1. 所有文字必须使用简体中文，严禁英文（专有名词除外）\n2. 中文字体使用思源黑体或苹方，严禁草书、艺术字\n3. 标题粗体，正文常规，字号对比清晰\n\n【画面比例 — 强制】16:9 横版宽屏 (landscape, widescreen)，宽度明显大于高度，绝对不要方图或竖图。\n```\n\n**4. 调 image_generation tool 出图**\n\n对每页调你的 `image_generation` tool：\n\n- `prompt`: 上面拼好的完整 prompt\n- `output_format`: `png`\n- 将返回的图片保存到 `outputs/<timestamp>/images/slide-NN.png`（NN 为两位页码）\n\n可以并发（建议 ≤4 并发，避免限流）。\n\n**5. 生成 HTML viewer**\n\n读 `templates/viewer.html`，把 `/* IMAGE_LIST_PLACEHOLDER */` 替换为 `'images/slide-01.png', 'images/slide-02.png', ...`，写到 `outputs/<timestamp>/index.html`。\n\n**6. 打包 PPTX（可选）**\n\n```bash\npython3 -c \"\nfrom pptx import Presentation\nfrom pptx.util import Inches\nprs = Presentation()\nprs.slide_width = Inches(13.333)\nprs.slide_height = Inches(7.5)\nblank = prs.slide_layouts[6]\nimport os, glob\nfor p in sorted(glob.glob('outputs/<timestamp>/images/slide-*.png')):\n    slide = prs.slides.add_slide(blank)\n    slide.shapes.add_picture(p, 0, 0, width=prs.slide_width, height=prs.slide_height)\nprs.save('outputs/<timestamp>/<title>.pptx')\nprint('done')\n\"\n```\n\n### 模板克隆模式（Codex 原生路径）\n\n你自己就是多模态 agent——直接 `Read` 模板每页 PNG 抽取视觉风格，写到 `template_cache/<sha256>.json`（schema 见 `template_analyzer.py` 里的 `TemplateProfile`），然后按上面流程出图时把对应模板页作为 reference image 传给 `image_generation` tool。\n\n**不需要配 `VISION_*`**——你就是 vision。\n\n### 与下面「--backend codex」的区别\n\n| | 原生路径（本节） | --backend codex |\n|---|---|---|\n| 适用场景 | **你就是** Codex agent | 你是 Claude Code / 其他 agent，借用本机 codex CLI |\n| 调用方式 | 直接调 `image_generation` tool | spawn `codex exec --full-auto` 子进程 |\n| 出图层数 | 1 层 | 2 层（agent → python → codex exec） |\n| 速度 | 几秒/张 | 30-60s/张 |\n| 可靠性 | tool 参数精确 | 自然语言 relay，偶发失败 |\n| 需要 API Key | 不需要 | 不需要 |\n\n---\n\n## 可选：走 codex CLI 出图（--backend codex，非 Codex caller 用）\n\n> **如果你就是 Codex agent，不要走这条路——用上一节的「原生路径」代替。**\n\n当你用 Claude Code / OpenClaw / 其他 agent 运行本 skill，但本机装了 codex CLI 且已登录（`codex login`），可以借用它的凭据出图，省掉配 `OPENAI_API_KEY`：\n\n```bash\npython3 scripts/generate_ppt.py --plan slides_plan.json --style styles/editorial-mono.md --backend codex\n```\n\n默认后端仍是 `openai`（直调 API，快、并发稳、每页 3-10s）。`--backend codex` 是逃生口，适合\"只跑 1-2 张图试水、不想配 key\"的场景。\n\n**Tradeoffs**：\n- ✅ 不需要在本 skill 配 `OPENAI_API_KEY`\n- ⚠️ 慢：每页多一层 agent loop，单页 30-60s+，10 页可能 5-10 分钟\n- ⚠️ 计费不变：gpt-image-2 是按图计费，不在 ChatGPT 订阅内，codex 只是代你刷额度\n- ⚠️ 可控性差：aspect_ratio / quality / reference_image 靠自然语言指令让 codex 转发，偶发失败\n\n相关 env（都可选）：\n\n```bash\nCODEX_CMD=\"codex exec --full-auto\"   # 覆盖 codex 调用方式（默认这串）\nCODEX_IMAGE_MODEL=gpt-image-2        # 传给 codex 的目标模型\nCODEX_TIMEOUT_SECS=900               # 单页超时\nGPT_IMAGE_BACKEND=codex              # 不想每次敲 --backend 就设这个\n```\n\n模板克隆的 vision 分析同理——当 caller agent 自己是多模态时（Claude Code / 多模态 codex），可以直接 `Read` 模板 PNG 抽取风格，不用配 `VISION_*`；只有 caller agent 是纯文本模型时才需要外挂 vision provider。\n\n## 生成流程（内置风格）\n\n**先 md 后 json**：md 给人看、方便 diff / review / 改文案；json 由 md 派生，喂给 `generate_ppt.py`，标为 generated，不手改。\n\n1. 用户给一份大纲 / 已有的 slides_plan.json\n2. Claude 按下面 md 规范写一份 `slides_plan.md`，与用户确认文案：\n   ````markdown\n   ---\n   title: MediWise Health Suite 商业计划书\n   ---\n\n   ## 1. [cover] MediWise Health Suite\n   副标题：家庭健康管理智能平台\n   年份：2026\n\n   ## 2. [content] 市场痛点：健康管理的两类割裂\n   痛点一：高频无深度\n   ...\n\n   ## 6. [data] 效率对比：使用 MediWise 前后\n   ...\n   ````\n   - h2 格式：`## N. [page_type, layout=layout-05] 本页标题行`\n   - `N.` 可省（按出现顺序自动编号）；`[page_type]` 可省（默认 `content`）；`layout=` 只在模板克隆模式需要\n   - `page_type`: `cover` / `content` / `data`\n   - h2 标题行 → json 里 `content` 的第一行；下面的正文 → 正文\n3. 用户 OK 后，转 json：\n   ```bash\n   python3 scripts/md_to_plan.py slides_plan.md -o slides_plan.json\n   ```\n4. 选风格：从上面 10 套里挑一个，对应 `styles/<id>.md`\n5. 调脚本：\n   ```bash\n   python3 scripts/generate_ppt.py --plan slides_plan.json --style styles/editorial-mono.md\n   ```\n6. 产物在 `<cwd>/outputs/<timestamp>/`：\n   - `images/slide-XX.png` -- 每页 PNG（16:9，1536x1024）\n   - `index.html` -- HTML viewer，方向键翻页、空格自动播放、ESC 全屏\n   - `prompts.json` -- 每页用到的完整 prompt（便于复盘 / 二次微调）\n   - `<title>.pptx` -- 16:9 整页填充图片的 .pptx，分享 / 投影直接用\n\n## 生成流程（模板克隆）\n\n1. **拿到模板 .pptx**（用户提供 / 内部模板库 / 网络下载）\n2. **（可选）先单独渲染并人工挑选**----大模板（>15 页）建议先 `python3 scripts/render_template.py xxx.pptx`，再从 `template_renders/<stem>/` 里挑 8-12 张代表页复制到 `template_renders/<stem>_curated/`，供 vision 分析。页数越精，layout 命中越准\n3. **生成 slides_plan.md → 转 slides_plan.json**（见内置风格流程第 2-3 步）。每页 `slide_number` / `page_type` (`cover` / `content` / `data` / 等) / `content`；想精准对位时在 h2 里加 `layout=layout-NN`（NN = 模板第 N 页 / 你期望对应的模板页编号）\n4. **跑 generate_ppt.py**：\n   ```bash\n   python3 scripts/generate_ppt.py \\\n     --plan slides_plan.json \\\n     --template-pptx xxx.pptx \\\n     --template-images template_renders/xxx_curated \\\n     --template-strict --slides 1\n   ```\n   先 `--slides 1` 出封面冒烟，效果 OK 再跑全量\n5. **告知用户产物路径**\n\n### 模板页面挑选 / 复用原则\n\n**核心原则：尽量做到 1 page : 1 layout**----同一份 deck 里每个 slide 用不同的模板页作 reference，观众会觉得每页都是新内容；如果同一个独特 layout 出现 2-3 次，观众下意识会想\"为什么又是这页\"。\n\nvision 分析时会给每个 layout 标 `reuse_friendly`：\n\n| reuse_friendly | 典型 layout | 多次使用的代价 |\n| --- | --- | --- |\n| `false`（不可复用，(!) 强警告） | 封面、3 个具名角色插画页、独特场景图（雪山/广播塔/复古收音机）、5 步骤 zigzag 各步独有图标、novelty 数据中央装置 | 视觉重复非常明显，观众会困惑 |\n| `true`（可复用，但仍建议错开，(i) 弱提示） | 纯文字、卡片网格、通用列表、章节小节标题 | 不致命，但平白浪费模板里的其它好版式 |\n\nClaude 在搭 plan 时的执行策略：\n1. **优先把模板里 N 个不同 layout 分配给 N 页 slide**（N 不够就在 SKILL 里看 reuse_friendly=true 的部分挑能复用的）\n2. **如果 plan 里某页内容结构非常相似（比如多个\"5 步骤流程\"），先尝试改写内容用不同 layout 表达**（4 步骤 + 5 步骤分别用不同流程页），而不是同一个 zigzag 用两次\n3. **冒烟跑完后，看 `Layout 复用检测` 那段输出**：(!) 必须改，(i) 看情况改；改 plan 里相应 slide 的 `layout_id` 即可\n4. **看完 cache JSON 选 layout**：`cat <cwd>/template_cache/<sha256>.json | jq '.layouts[] | {id, page_type, reuse_friendly, summary}'` 一眼看清模板有哪些版式可挑\n\n`generate_ppt.py` 在派发任务前会自动跑一次复用检测，把警告打到终端，不阻塞执行。\n\n## Skill 调用规范\n\n当用户说\"做一份 PPT\" / \"生成幻灯片\"时：\n\n1. **先问三件事**（不要直接动手）：\n   - 内容 / 页数 / 观众是谁？\n   - 风格偏好？按\"十种内置风格\"表的场景类目映射推荐 1-2 个；**或者用户上传自己的 .pptx 模板**（走 `--template-pptx`，自动渲染）\n   - 是否需要单页测试一张图先看效果（`--slides 1`）\n2. **先写 slides_plan.md** 给用户确认文案（md 是 source of truth，人审阅友好）\n3. **转 slides_plan.json**：`python3 scripts/md_to_plan.py slides_plan.md -o slides_plan.json`（json 标为 generated，不手改；要改文案回到 md 改再转）\n4. **跑 generate_ppt.py**，先 `--slides 1` 出封面冒烟，效果 OK 再跑全量\n5. **告知用户产物路径**，让他在浏览器打开 `outputs/<timestamp>/index.html` 或者 `<title>.pptx`\n\n## 仅生成部分页\n\n```bash\npython3 scripts/generate_ppt.py --plan my_plan.json --style styles/dark-aurora.md --slides 1,3,5\n```\n\n跑过的页有同名 PNG 时会自动跳过，方便逐页迭代。\n\n## 文件结构\n\n```\ngpt-image2-ppt-skills/\n|---- SKILL.md                # 本文件（Claude Code skill 入口）\n|---- AGENTS.md               # codex / aider / cursor 等 agent 的薄索引，指向本文件\n|---- README.md               # 项目说明\n|---- scripts/                # 所有 Python 脚本\n|   |---- generate_ppt.py         # 主入口（CLI）\n|   |---- md_to_plan.py           # slides_plan.md -> slides_plan.json 转换器（CLI）\n|   |---- render_template.py      # PPTX -> 每页 PNG 的辅助脚本（CLI + library）\n|   |---- image_generator.py      # gpt-image-2 wrapper（支持 reference image，openai backend）\n|   |---- codex_backend.py        # 可选：走 codex CLI 出图（--backend codex）\n|   \\---- template_analyzer.py    # PPT 模板剖析器（vision + 缓存）\n|---- styles/                 # 10 套内置风格\n|   |---- gradient-glass.md           dark-aurora.md\n|   |---- clean-tech-blue.md          risograph.md\n|   |---- vector-illustration.md      japanese-wabi.md\n|   |---- editorial-mono.md           swiss-grid.md\n|   |---- hand-sketch.md              y2k-chrome.md\n|---- templates/viewer.html   # HTML viewer 模板\n|---- docs/README.en.md       # 英文 README\n|---- install_as_skill.sh     # 一键安装到 ~/.claude/skills/\n|---- requirements.txt        # requests + python-dotenv + python-pptx + jsonschema + pymupdf\n\\---- .env.example\n```\n\n调用时产生的运行时目录都在 `<cwd>` 下：\n```\n<your-project>/\n|---- template_renders/<stem>/page-NN.png   # PPTX 渲染（render_template.py）\n|---- template_cache/<sha256>.json          # vision 风格分析缓存\n\\---- outputs/<timestamp>/                  # 每次生成产物\n```\n\n## License\n\nApache License 2.0.\n\nFile v1.1.1:README.md\n\n<div align=\"center\">\n\n# gpt-image2-ppt-skills\n\n**用 OpenAI `gpt-image-2` 一键生成视觉强烈的 PPT。**\n\nClaude Code / Codex / OpenClaw Skill。装进 agent 后，用一句自然语言生成 16:9 高清图片 + 可键盘翻页的 HTML viewer + 打包好的 `.pptx`，也可以仿任意 `.pptx` 模板出全新内容。\n\n[![GitHub stars](https://img.shields.io/github/stars/JuneYaooo/gpt-image2-ppt-skills?style=flat)](https://github.com/JuneYaooo/gpt-image2-ppt-skills/stargazers)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](./LICENSE)\n[![Python](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-Skill-orange.svg)](https://www.anthropic.com/claude-code)\n[![gpt-image-2](https://img.shields.io/badge/OpenAI-gpt--image--2-black.svg)](https://platform.openai.com/docs/guides/images)\n\n🌐 **English** → [docs/README.en.md](./docs/README.en.md)\n\n</div>\n\n---\n\n## 🎬 效果演示：喂一张模板，仿出一套新内容\n\n<table>\n<tr>\n<th width=\"50%\">输入：任意一页参考模板（.pptx / 图片）</th>\n<th width=\"50%\">输出：本 skill 仿制 + 换内容</th>\n</tr>\n<tr>\n<td><img src=\"docs/assets/template-demo-input.jpg\" width=\"100%\" alt=\"input template\"></td>\n<td><img src=\"docs/assets/template-demo-output.jpg\" width=\"100%\" alt=\"generated output\"></td>\n</tr>\n<tr>\n<td align=\"center\"><sub>英文信息图模板（Mass Media Infographics）</sub></td>\n<td align=\"center\"><sub>同一版式 / 同一配色 / 同一插画语汇，内容换成「普通人怎么用 AI 做自媒体」</sub></td>\n</tr>\n</table>\n\n---\n\n## ✨ 能做什么\n\n- 🎨 **十套精选风格** — Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Riso / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Vector Illustration，每套都细分 `cover` / `content` / `data` 三种构图\n- 🪄 **模板克隆模式** — 丢一个 `.pptx` 进去，自动渲染 + vision 抽风格 + JSON Schema 复刻，像上面那张图一样仿版式换内容\n- 🎮 **HTML viewer + `.pptx` 双产出** — 键盘翻页 / 空格自动播放 / ESC 全屏 / 触摸滑动，同时打包成 16:9 `.pptx` 直接用\n- ⚡ **默认 10 路并发出图** — 10 页 ~30 秒出完\n- 🔁 **双后端** — `openai` 直调（需 key）或 `codex` CLI（复用 codex 登录，无需在本 skill 配 key）\n- 🤖 **官方 OpenAI Images API** — 模型 `gpt-image-2`，`base_url` 可换任意 OpenAI 兼容中转\n\n## 🎨 十种内置风格\n\n> 下图为 10 套风格在同一主题「**如何用 gpt-image-2 做 PPT**」下各生成一张封面的对照。全部由 `gpt-image-2` 直出，未经 PS。\n\n![10 种风格封面对照 · 同一主题直出](docs/assets/style-gallery.jpg)\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n---\n\n## 🚀 安装\n\n### 方式一：让 AI 自己装（推荐）\n\n把下面这段 prompt 丢给你的 AI 助手（Claude Code / OpenClaw / Codex / Cursor / Trae / Hermes Agent 都行），它会自动完成安装：\n\n```\n帮我安装 gpt-image2-ppt-skills：\nhttps://raw.githubusercontent.com/JuneYaooo/gpt-image2-ppt-skills/main/docs/install.md\n```\n\nagent 会自己 clone 仓库、按当前运行环境选择安装目标、提示你重启。\n\n### 方式二：手动安装\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh --target claude   # Claude Code\n# 或\nbash install_as_skill.sh --target codex    # Codex\n```\n\n脚本会把 skill 装到对应 agent 的目录：\n\n- Claude Code: `~/.claude/skills/gpt-image2-ppt-skills/`\n- Codex: `~/.codex/skills/gpt-image2-ppt-skills/`\n\n如果你走 API 直连模式，再填一个 key 就能用：\n\n```bash\n# Claude Code:\n# ~/.claude/skills/gpt-image2-ppt-skills/.env\n#\n# Codex:\n# ~/.codex/skills/gpt-image2-ppt-skills/.env\nOPENAI_BASE_URL=https://api.openai.com    # 或任意 OpenAI 兼容中转\nOPENAI_API_KEY=sk-...                     # 必需\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n```\n\n> 在 **Codex** 里如果当前 agent 自带原生图片生成能力，可以直接走 `SKILL.md` 里的原生路径，**不必配置 `OPENAI_API_KEY`**。\n>\n> 🔒 **不会误吃密钥**：只从 skill 自己目录的 `.env` 或显式 `GPT_IMAGE2_PPT_ENV` 加载，**不会**向上递归读项目目录的 `.env`。\n>\n> 🪄 模板克隆模式额外需要本机 `libreoffice` 或 docker `linuxserver/libreoffice` 镜像（用来把 `.pptx` 渲染成 PNG）。\n\n### 模板克隆的 Vision 分析（可选）\n\n模板克隆模式下，skill 需要先\"看懂\"你的 `.pptx` 模板的视觉风格。**如果你的 AI 助手本身就是多模态的**（Claude Code 走 Claude Opus/Sonnet，Codex 走 GPT 多模态等），agent 会直接自己看图抽取风格，**不需要额外配置**。\n\n只有当你用的 agent 是纯文本模型时，才需要配下面这组环境变量，走一个独立的多模态模型来分析模板：\n\n```bash\n# 可选：模板克隆的 vision 分析（仅纯文本 agent 需要，多模态 agent 不用配）\nVISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\nVISION_API_KEY=sk-...\nVISION_MODEL_NAME=gemini-3.1-pro-preview   # 或 gpt-4o / claude-3.5-sonnet 等任意多模态 SKU\n```\n\n> 支持任意兼容 OpenAI `/v1/chat/completions` 格式的多模态模型（Gemini / GPT-4o / Claude 等），与图片生成的 `gpt-image-2` 完全解耦——换 vision provider 不影响出图。\n\n---\n\n## 🛠 在 Claude Code 里怎么用\n\n装完直接跟 Claude 说人话就行：\n\n> 帮我用 **gpt-image2-ppt** 生成一份关于 **[你的主题]** 的 5 页 PPT，风格用 `dark-aurora`。\n\n仿模板同理：\n\n> 我这有一个 `company-template.pptx`，帮我按这个模板做一份关于 **[你的主题]** 的 5 页 PPT。\n\nClaude 会自己写 `slides_plan`、先出一页封面让你确认、再跑全量，把 HTML viewer + `.pptx` 路径告诉你。\n\n> 🧑‍💻 想自己写脚本调 CLI 而不走 agent？看 [`SKILL.md`](./SKILL.md)，CLI 参数、文件布局都在那。\n\n---\n\n## 🙏 致谢\n\n- [op7418/NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) — 风格 prompts 与 viewer 模板的原始作者。本项目把图片后端从 Nano Banana Pro 换成了 OpenAI gpt-image-2，重写了继承自上游的 3 套风格并新增 7 套（共 10 套），另加入模板克隆模式（vision 抽风格仿任意 `.pptx`）、md-first 编排流程、`.pptx` 自动打包、codex CLI 备用后端等新功能。\n- [lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) — Claude Code skill SKILL.md frontmatter 写法参考。\n\n## 💬 Community\n\n[**LINUX DO — 中文开发者社区**](https://linux.do/)\n\n### 微信交流群\n\n欢迎大家有问题一起交流讨论。\n\n<img src=\"docs/assets/wechat.jpg\" width=\"300\" alt=\"微信交流群\">\n\n## ⭐ Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=JuneYaooo/gpt-image2-ppt-skills&type=Date)](https://star-history.com/#JuneYaooo/gpt-image2-ppt-skills&Date)\n\n---\n\n## License\n\nApache License 2.0，详见 [LICENSE](./LICENSE)。\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn76gz2yb53tdjgpmb3ydjexax82g5yr\",\n  \"slug\": \"gpt-image2-ppt\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1778498943697\n}\n\nFile v1.1.1:AGENTS.md\n\n# AGENTS.md -- 给 codex / aider / cursor 等 agent 的入口说明\n\n本仓库是一个用 OpenAI `gpt-image-2` 生成 PPT 幻灯片的工具包，**权威文档在 [`SKILL.md`](./SKILL.md)**。任何涉及\"做一份 PPT / 生成幻灯片 / 出图 / 改风格 / 按模板仿作\"的请求，都先完整读 `SKILL.md` 再动手，不要凭本文件的摘要就开跑 -- 下面只是索引。\n\n## 一分钟索引\n\n- **主入口 CLI**：`python3 scripts/generate_ppt.py --plan slides_plan.json --style styles/<id>.md`\n- **内容源稿**：先写 `slides_plan.md`（人审阅），再 `python3 scripts/md_to_plan.py slides_plan.md -o slides_plan.json`；json 标为 derived，不手改\n- **十种内置风格**：见 `styles/` 目录 + `SKILL.md` 顶部表格\n- **模板克隆**：`--template-pptx path/to/xxx.pptx --template-strict`，vision 分析 + 缓存细节在 `SKILL.md` 的\"模板克隆模式\"一节；**如果你自己就是多模态 agent**(多模态 Claude / GPT / 等)，可以直接 `Read` `template_renders/<stem>/page-*.png` 自己抽风格写 `template_cache/<sha256>.json`，不用外挂 `VISION_*`\n- **冒烟策略**：先 `--slides 1` 出封面，确认后再跑全量\n- **产物**：`<cwd>/outputs/<timestamp>/{images/, index.html, prompts.json, <title>.pptx}`\n\n## 调用规范（对 agent 的硬约束）\n\n1. **先问三件事**：内容 / 观众、风格偏好（或是否带 .pptx 模板）、是否先 `--slides 1` 冒烟\n2. **永远先 md 后 json**：用户改文案改 md，不手改 json\n3. **先冒烟再全量**：`--slides 1` 的封面效果用户认可后再跑余下页\n4. **告知产物路径**：跑完把 `outputs/<timestamp>/index.html` 和 `.pptx` 路径明确告诉用户\n\n## 凭据 / backend\n\n- 默认后端 `openai`，需在 scoped 位置（`<script_dir>/.env`、`~/.codex/skills/.../.env`、`~/.claude/skills/.../.env` 或 `$GPT_IMAGE2_PPT_ENV`）配 `OPENAI_API_KEY`\n- **如果你就是 codex**：走「原生 image_generation 出图」路径——直接用你自带的 `image_generation` tool 出图，**不要**跑 `generate_ppt.py --backend codex`（那是给 Claude Code 等非 codex caller 用的，会 spawn 一个多余的 codex 子进程）。完整流程见 `SKILL.md` 的「如果你就是 Codex agent」一节\n- 脚本**不会**向上递归读取项目目录的 `.env`，避免误吃无关密钥\n\n## 不要做的事\n\n- 不要手改 `slides_plan.json`（改 md 再转）\n- 不要跳过 `SKILL.md`\"模板页面挑选 / 复用原则\"直接用同一个 layout 给多页 slide 当 reference\n- 不要在没有 `OPENAI_API_KEY` 且没有本地 codex CLI 的情况下强跑 -- 先检查环境\n\n## 同步提醒\n\n本文件是薄索引。如果 `SKILL.md` 有新增章节或流程变更，只在 `SKILL.md` 里维护，本文件的锚点列表按需补；**正文描述不要复制到这里**，避免两边漂移。\n\nFile v1.1.1:docs/install.md\n\n# gpt-image2-ppt-skills 安装指南（给 AI agent 读）\n\n> 本文档是**让 AI 助手自动完成安装**的可执行指引。Claude Code / OpenClaw / Codex / Cursor / Trae / Hermes Agent 等任一 agent 按以下步骤执行即可。\n>\n> 人类用户请**不要**手动照抄下面的步骤，直接把这份 URL 扔给你的 AI 助手，它自己会跑通。\n\n## 项目一句话介绍\n\n`gpt-image2-ppt-skills` 是一个 Claude Code / Codex / OpenClaw Skill，用 OpenAI `gpt-image-2` 生成视觉强烈的 PPT（10 套内置风格 + 支持仿任意 `.pptx` 模板），产出 HTML viewer + 16:9 `.pptx`。\n\n仓库：https://github.com/JuneYaooo/gpt-image2-ppt-skills\n\n## 前置依赖（agent 请先检查）\n\n- **必需**：`git`、`python3`（3.8+）、`pip`\n- **可选**：`libreoffice` 本机命令，或 `docker` + `linuxserver/libreoffice` 镜像（仅模板克隆模式需要，用来把 `.pptx` 渲染成 PNG）\n\n如果缺 `git` / `python3`，先用系统包管理器装好；`libreoffice` 可以留到用户要用模板克隆模式时再装。\n\n## 安装步骤\n\n### 1. 克隆仓库到临时目录\n\n```bash\ngit clone https://github.com/JuneYaooo/gpt-image2-ppt-skills.git /tmp/gpt-image2-ppt-skills\ncd /tmp/gpt-image2-ppt-skills\n```\n\n### 2. 跑安装脚本\n\n```bash\n# Claude Code\nbash install_as_skill.sh --target claude\n\n# Codex\nbash install_as_skill.sh --target codex\n```\n\n这一步会：\n- 把项目文件拷贝到对应 agent 的 skill 目录\n- `pip install -r requirements.txt` 装齐 Python 依赖\n- 从 `.env.example` 生成对应目录下的 `.env` 骨架\n\n安装脚本是**交互式**的，如果目标目录已存在会问是否覆盖；agent 可以用 `yes | bash install_as_skill.sh` 自动选\"是\"，或先检查目录是否存在再决定。\n\n### 3. 只有在走 API 直连时才配置 .env\n\n如果当前 agent 就是带原生图片生成能力的 Codex，可以跳过这一步，直接重启后走 `SKILL.md` 里的原生出图路径。\n\n否则，agent 需要主动问用户要 API key 并写进 `.env`：\n\n> 请提供你的 OpenAI API key（或任意 OpenAI 兼容中转的 base_url + key）。\n\n然后把以下内容写进对应目录下的 `.env`（保留已有注释，只填值）：\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # 或用户提供的兼容中转 URL\nOPENAI_API_KEY=sk-...                     # 用户提供的 key（必需）\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n```\n\n> 如果用户没有 OpenAI 官方 key，agent 可以告诉用户：本 skill 也支持 `--backend codex` 复用本地 codex CLI 登录，不需要在本 skill 配 key；或者用任意 OpenAI 兼容中转站（把 `OPENAI_BASE_URL` 改成中转站地址即可）。\n\n### 4. 提示用户重启 agent\n\n装完之后，告诉用户：\n\n> 已安装完成。请**重启当前 agent**（Claude Code / Codex / 其它）让 skill 生效。\n\n### 5.（可选）清理临时目录\n\n```bash\nrm -rf /tmp/gpt-image2-ppt-skills\n```\n\n## 冒烟测试（用户重启 agent 后）\n\n告诉用户直接跟 agent 说：\n\n> 帮我用 **gpt-image2-ppt** 生成一份关于「猫为什么是液体」的 3 页 PPT，风格用 `gradient-glass`。\n\n正常的话 agent 会自己写 `slides_plan.json`、跑 `scripts/generate_ppt.py --slides 1` 先出封面、再跑全量，最后给出 HTML viewer 和 `.pptx` 的路径。\n\n## 常见问题（给 agent 参考）\n\n- **`ModuleNotFoundError: pymupdf`** → 在实际安装目录里重跑 `pip install -r requirements.txt`\n- **`libreoffice: command not found`**（仅模板克隆模式）→ Linux: `apt install libreoffice`；macOS: `brew install --cask libreoffice`；或让用户切换到内置 10 套风格之一，不走模板克隆\n- **`OPENAI_API_KEY 未设置`** → 如果你不是走 Codex 原生路径，回到步骤 3，检查 `.env` 文件路径和内容\n- **agent 识别不到 skill** → 确认目录装到了对应 agent 的技能目录，并且完全重启过当前 agent\n\n## 完成标志\n\n以下三条都满足即视为安装成功：\n\n1. 对应安装目录下的 `SKILL.md` 存在\n2. 如果走 API 直连模式，对应安装目录下的 `.env` 存在且包含可用 `OPENAI_API_KEY`\n3. agent 重启后，用户用自然语言要求生成 PPT 时能触发本 skill\n\n装完不用逐字读 `SKILL.md`，但需要告诉用户：\"你可以直接用自然语言要 PPT，也可以把任意 `.pptx` 模板丢给我做克隆。\"\n\nFile v1.1.1:docs/README.en.md\n\n<div align=\"center\">\n\n# gpt-image2-ppt-skills\n\n**Generate visually striking PPT decks with OpenAI `gpt-image-2` in one shot.**\n\nA Claude Code / OpenClaw Skill. Once installed in your agent, a single natural-language prompt yields 16:9 high-res images + a keyboard-navigable HTML viewer + a ready-to-send `.pptx` — or clones any reference `.pptx` template and reskins it with new content.\n\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](../LICENSE)\n[![Python](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-Skill-orange.svg)](https://www.anthropic.com/claude-code)\n[![gpt-image-2](https://img.shields.io/badge/OpenAI-gpt--image--2-black.svg)](https://platform.openai.com/docs/guides/images)\n\n🌐 **中文** → [../README.md](../README.md)\n\n</div>\n\n---\n\n## 🎬 Demo: feed one template, get a fresh deck in that style\n\n<table>\n<tr>\n<th width=\"50%\">Input: any reference template (.pptx / image)</th>\n<th width=\"50%\">Output: cloned layout + new content</th>\n</tr>\n<tr>\n<td><img src=\"assets/template-demo-input.jpg\" width=\"100%\" alt=\"input template\"></td>\n<td><img src=\"assets/template-demo-output.jpg\" width=\"100%\" alt=\"generated output\"></td>\n</tr>\n<tr>\n<td align=\"center\"><sub>English infographic template (Mass Media Infographics)</sub></td>\n<td align=\"center\"><sub>Same layout / palette / illustration vocabulary, content swapped to \"how normal people make AI-powered social content\"</sub></td>\n</tr>\n</table>\n\n---\n\n## ✨ What it does\n\n- 🎨 **10 curated styles** — Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Vector Illustration, each with `cover` / `content` / `data` composition rules\n- 🪄 **Template-clone mode** — drop in any `.pptx` and the skill auto-renders it, asks a vision model to extract style + JSON Schema, then reproduces the layout with your new content (like the demo above)\n- 🎮 **HTML viewer + `.pptx`, both shipped** — arrow-key navigation / space to autoplay / ESC fullscreen / swipe on touch, plus a 16:9 `.pptx` you can send as-is\n- ⚡ **10-way concurrency by default** — a 10-page deck finishes in ~30s\n- 🔁 **Two backends** — `openai` direct (needs key) or `codex` CLI (reuses your codex login, no key configured in this skill)\n- 🤖 **Official OpenAI Images API** — model `gpt-image-2`; `base_url` can point at any OpenAI-compatible relay\n\n## 🎨 The 10 built-in styles\n\n> Below: the 10 styles each generating one cover under the same topic — \"**How to make a PPT with gpt-image-2**\". All covers are raw `gpt-image-2` output, no PS.\n\n![10 styles · same topic, raw gpt-image-2 output](assets/style-gallery.jpg)\n\n| Style ID | One-liner | Use cases |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI product launches, technical talks, creative pitches |\n| `clean-tech-blue` | Stripe / Linear-grade blue & white | Investor decks, business plans, corporate strategy |\n| `vector-illustration` | Retro vector + black outlines | Education, brand storytelling, community sharing |\n| `editorial-mono` | Kinfolk / Monocle editorial | Brand reveals, cultural interviews, book talks |\n| `dark-aurora` | Linear / Vercel dark neon | AI products, dev tools, technical talks |\n| `risograph` | Riso 2-spot-color print + halftone | Creative studios, indie zines, design agencies |\n| `japanese-wabi` | Muji / Hara Kenya wabi-sabi | Tea ceremony, lifestyle, luxury, cultural lectures |\n| `swiss-grid` | Bauhaus / Vignelli international grid | Academic reports, museum exhibits, serious dashboards |\n| `hand-sketch` | Sketchnote / whiteboard | Workshops, product brainstorming, training |\n| `y2k-chrome` | Y2K liquid chrome + butterfly stickers | Streetwear, entertainment, brand collabs, Gen-Z marketing |\n\n---\n\n## 🚀 Install\n\n### Option 1: let your AI install it (recommended)\n\nPaste this prompt into your AI assistant (Claude Code / OpenClaw / Codex / Cursor / Trae / Hermes Agent — all work) and it will handle the install:\n\n```\nPlease install gpt-image2-ppt-skills for me:\nhttps://raw.githubusercontent.com/JuneYaooo/gpt-image2-ppt-skills/main/docs/install.md\n```\n\nThe agent will clone the repo, run the install script, ask you for an API key, and tell you to restart.\n\n### Option 2: manual install\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh\n```\n\nThe script installs the skill to `~/.claude/skills/gpt-image2-ppt-skills/`; Claude Code picks it up after restart.\n\nThen drop in one key and you're ready:\n\n```bash\n# ~/.claude/skills/gpt-image2-ppt-skills/.env\nOPENAI_BASE_URL=https://api.openai.com    # or any OpenAI-compatible relay\nOPENAI_API_KEY=sk-...                     # required\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n```\n\n> 🔒 **Won't accidentally eat your secrets**: only loads `.env` from the skill's own directory or an explicit `GPT_IMAGE2_PPT_ENV` path. It does **not** walk up into project directories.\n>\n> 🪄 Template-clone mode additionally needs native `libreoffice` or the docker `linuxserver/libreoffice` image (to render `.pptx` → PNG).\n\n---\n\n## 🛠 How to use inside Claude Code\n\nOnce installed, just say it in plain English:\n\n> Use **gpt-image2-ppt** to make a 5-slide deck about **[your topic]**, style = `dark-aurora`.\n\nTemplate clone, same shape:\n\n> I have a `company-template.pptx` — make a 5-slide deck about **[your topic]** using that template.\n\nClaude will write the `slides_plan`, generate a cover first for you to approve, then run the full deck and hand back the HTML viewer + `.pptx` paths.\n\n> 🧑‍💻 Prefer to call the CLI yourself instead of going through an agent? See [`SKILL.md`](../SKILL.md) — CLI flags and file layout live there.\n\n---\n\n## 🙏 Acknowledgements\n\n- [op7418/NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) — original author of the style prompts and viewer template. This project swaps the image backend from Nano Banana Pro to OpenAI gpt-image-2, rewrites the 3 inherited styles and adds 7 new ones (10 total), and layers on template-clone mode (vision-based style extraction from any user `.pptx`), an md-first authoring flow, automatic `.pptx` packaging, and a codex CLI fallback backend.\n- [lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) — reference for the Claude Code skill `SKILL.md` frontmatter.\n\n## License\n\nApache License 2.0 — see [LICENSE](../LICENSE).\n\nFile v1.1.1:skill-card.md\n\n## Description:\n\nGenerates visually styled presentation decks with OpenAI gpt-image-2 from slide outlines or reference PPTX templates, including built-in styles, an HTML viewer, and a 16:9 PPTX.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[juneyaooo](https://clawhub.ai/user/juneyaooo)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, creators, and presentation authors use this skill to turn a slide outline or reference PPTX template into image-backed decks for pitches, reports, lectures, and marketing presentations.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The optional Codex backend can delegate untrusted slide text to a full-auto Codex subprocess with broad local authority.\n\nMitigation: Use the default direct API or native image path when possible, and enable the Codex backend only after reviewing the slide content and local execution context.\n\nRisk: Configured API endpoints can route image generation or vision analysis through unexpected services.\n\nMitigation: Review `OPENAI_BASE_URL` and `VISION_BASE_URL` before use, and keep credentials in a scoped `.env` rather than a project-wide environment file.\n\nRisk: The legacy root `generate_ppt.py` contradicts the stated credential-scoping behavior.\n\nMitigation: Use `scripts/generate_ppt.py` as the active entry point and do not run the legacy root script.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/juneyaooo/skills/gpt-image2-ppt)\n- [Artifact README](artifact/README.md)\n- [English README](artifact/docs/README.en.md)\n- [Install guide](artifact/docs/install.md)\n- [OpenAI Images API guide](https://platform.openai.com/docs/guides/images)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance, files]\n\n**Output Format:** [Markdown guidance with inline shell commands; generated artifacts include PNG images, JSON prompts, an HTML viewer, and a 16:9 PPTX.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Supports curated style selection, template-clone workflows, optional single-slide smoke tests, and output directories under the caller workspace.]\n\n## Skill Version(s):\n\n1.1.1 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.1.1:styles/clean-tech-blue.md\n\n# 清爽科技蓝 / Stripe-grade Blue\n\n## 风格ID\nclean-tech-blue\n\n## 风格名称\n清爽科技蓝 / Stripe-grade Blue\n\n## 风格描述\n对标 Stripe / Linear / Notion 官网与 Pitch 路演 deck 的高级蓝白风：纯白背景 + 克制蓝调 + 大留白 + 精致网格。比传统 McKinsey 蓝更现代、更产品化，比 SaaS landing 更适合长篇内容。适合融资路演、商业计划书、企业战略汇报。\n\n## 基础提示词模板\n\n你是一位顶级商业演示设计师，对标 Stripe / Linear / Notion 官网与 a16z / Sequoia 路演 deck。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：纯白 #FFFFFF，绝不使用深色背景；可在大块区域用极淡冰蓝 #F4F7FF 区分。\n- 主蓝：Stripe 紫蓝 #635BFF 或皇家蓝 #1E40AF，作为标题、强调数字、品牌色块。\n- 次蓝：浅蓝 #93C5FD 用于柔性强调；冰蓝 #E0EAFF 用于卡片背景。\n- 中性：标题深墨 #0F172A、正文 #334155、辅助 #64748B。\n- 卡片：超浅冰蓝底 + 1px 蓝灰描边 #E2E8F0 + 极淡阴影；圆角 12px，朴素克制，绝不带光晕。\n- 装饰：背景可极淡的 8% opacity 蓝色网格点阵或细线（几乎不可见），仅用于呼吸感；偶尔在角落放一个浅蓝色磨砂玻璃几何体（透明度 25-35%），保持与白底自然融合。\n\n【字体】\n- 标题：思源黑体 Bold / 苹方 Bold（粗壮、不夸张）\n- 正文：思源黑体 Regular（行高 1.5-1.6）\n- 数字：思源黑体 Heavy 或等宽数字字体，强调时字号 4-6x于正文\n\n【封面页构图】\n左 60% 放主标题（深墨黑超大粗体，2-3 行内）+ 下方副标题（中蓝标准字重）+ 底部 1 行 tagline；右 40% 放一个浅蓝色简洁 3D 几何体（棱柱、球、抽象 SaaS 图形），透明度 30%，绝不喧宾夺主。顶部或底部一条 4px 高的蓝色渐变细带作为品牌锚点。\n\n【内容页构图】\n顶部留 1 行小标题 + 1 条蓝色细分隔线；主体 3 列卡片或 2 列文字+图表布局；每张卡片白底浅蓝描边、左侧 3px 实心蓝色边作为 accent；要点用蓝色实心圆点 / 短横线，绝不用 emoji。整页留白占 45% 以上。\n\n【数据页构图】\n关键数字超大（占页面高度 25-30%）深蓝粗体居中或左对齐，数字下方一行小字解释含义；旁边或下方放简洁柱状图 / 折线图 / 环形图，配色用蓝色 5 阶渐变（#1E40AF -> #93C5FD），对照组用浅灰 #E2E8F0。每个数据点必须有清晰标签，绝不裸图。\n\n【禁止】\n- 别用霓虹色、赛博朋克、深黑背景、彩虹渐变\n- 别用立体阴影、玻璃拟态过度装饰\n- 别堆图标，每页图标数量 ≤ 4 个\n- 字号对比要明确，不要全篇 18pt 平铺\n\n## 适用场景\n融资路演、商业计划书、企业战略汇报、SaaS 产品发布、董事会汇报、咨询报告。\n\nFile v1.1.1:styles/dark-aurora.md\n\n# 深色霓虹 / Dark Aurora\n\n## 风格ID\ndark-aurora\n\n## 风格名称\n深色霓虹 / Dark Aurora\n\n## 风格描述\n对标 Linear / Vercel / Cursor / Arc Browser 官网的高级深色风：深空底 + 极光弧光 + 半透明玻璃卡片 + 极细发光描边。区别于俗气的\"赛博朋克\"，强调克制与高级。适合 AI 产品、开发者工具、技术分享、新一代 SaaS。\n\n## 基础提示词模板\n\n你是一位顶级深色模式 UI 设计师，对标 Linear / Vercel / Cursor / Arc Browser 的官网视觉。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：深空黑 #0A0A0F，叠加极淡的径向渐变（中心稍亮 #14142A -> 边缘 #06060C），整体保持冷调。\n- 极光：背景隐藏 1-2 道弧形或斜向光带，颜色 #7B5BFF（紫）/ #00D4FF（青）/ #FF7AB6（粉）任选，强度 25-40%，模糊扩散，作为氛围而非主体。\n- 卡片：半透明玻璃 rgba(255,255,255,0.05-0.10) + 1px 顶部高光 rgba(255,255,255,0.15) + 极淡内阴影；圆角 16px。\n- 文字色：白 #FFFFFF（标题）/ 暖灰 #C8C8D8（正文）/ 灰 #6B6B7E（辅助）。\n- 强调：仅在关键数字、按钮、装饰光带使用极光色。\n- 装饰：可有极细 1px 发光描边几何（圆环、网格、星图），仅作背景气氛；可点缀 1-2 个微小光点（\"星尘\"），位置随机但克制。\n\n【字体】\n- 标题：思源黑体 SemiBold / Inter Display SemiBold，字号大但不溢出\n- 正文：思源黑体 Regular（光照下白字略减字重，避免刺眼）\n- 数字：等宽数字字体（如 JetBrains Mono），强调时配 1 道下方 1px 极光下划线\n\n【封面页构图】\n居中或左对齐主标题，下方副标题降一档；标题正后方有一道斜向极光光带横穿（紫->青渐变）；底部一行品牌信息或日期，配 1 个直径 6px 的发光小圆点作为锚点。整页极少元素，氛围感优先。\n\n【内容页构图】\n2x2 或 3 列玻璃卡片网格，每张卡片：顶部一行短标题 + 中间 2-3 行说明 + 左上角 1 个发光线性图标（描边 1.5px，颜色取自极光）；卡片之间间距 24px；右上角或左下角点缀一处极光光晕（直径占画面 15-25%，模糊扩散）。\n\n【数据页构图】\n关键数字超大居中或左对齐（白色），数字下方 1 行说明 + accent 色短下划线；右侧或下方一个发光环形图 / 折线图（线宽 2-3px，端点带光晕）；图例用极小字号 + 发光圆点。整体保留大块深色留白。\n\n【禁止】\n- 严禁使用刺眼正红、正绿、纯蓝；霓虹色只用极光色板\n- 严禁深色背景 + 高饱和卡通图标\n- 严禁背景完全黑（#000000），必须 #0A0A0F 起，留呼吸感\n- 别堆光晕，每页 ≤ 2 处发光区\n\n## 适用场景\nAI 产品发布、开发者工具、技术分享、深色主题 SaaS、新世代品牌发布、Cyber 但克制的演示。\n\nFile v1.1.1:styles/dark-dashboard.md\n\n# 暗色数据仪表盘风格\n\n## 风格ID\ndark-dashboard\n\n## 风格名称\n暗色数据仪表盘风格PPT\n\n## 适配模型\n- GPT Vision Image 2 (gpt-vision-image-2)\n\n## 风格描述\n深色背景配发光数据可视化，适合数据驱动的技术汇报和分析报告。灵感来自 Bloomberg Terminal、Grafana 仪表盘和航天器控制台。\n\n## 基础提示词模板\n\n你是一位专家级数据可视化设计师。请生成一张 16:9 的暗色数据仪表盘风格演示文稿幻灯片图片。\n\n视觉风格：深色主题数据仪表盘设计，灵感来自专业金融终端和航天器控制台。整体氛围科技、精准、数据驱动。\n\n配色方案：背景使用深黑色(#0D1117)到深灰蓝(#161B22)的微妙渐变。数据高光使用发光的渐变霓虹色：电光蓝(#58A6FF)、翡翠绿(#3FB950)、琥珀黄(#D29922)、珊瑚红(#F85149)。所有发光元素带有柔和的光晕效果(glow)。\n\n布局系统：仪表盘卡片式布局，每个数据模块在独立的深色圆角卡片中，卡片边框使用 1px 的半透明亮色线条(rgba(255,255,255,0.1))。卡片之间 8-16px 间距。\n\n数据可视化：折线图带有渐变填充区域和发光节点。柱状图使用圆角顶部和渐变填充。环形图带有发光描边。数字使用等宽字体并带有微光效果。\n\n字体：标题和数字使用 monospace 等宽字体风格。标签使用小号无衬线字体，颜色为半透明白色。\n\n## 页面类型模板\n\n### 封面页模板\n构图逻辑：深黑背景，中央放置项目/报告标题，使用发光的渐变色文字效果。背景有隐约的数据网格线和流动的粒子效果。底部可有一条薄薄的数据趋势线作为装饰。\n\n### 内容页模板\n构图逻辑：3-4 个仪表盘卡片的网格布局。每个卡片内有一个迷你图表或关键数字 + 简短说明。卡片内的小标题使用半透明白色，关键数据使用发光的强调色。\n\n### 数据页模板\n构图逻辑：一个大型数据可视化图表占据画面 60-70%（折线图、面积图或多维柱状图）。旁边 2-3 个 KPI 卡片展示关键指标。底部可有时间轴或数据来源标注。\n\nFile v1.1.1:styles/editorial-mono.md\n\n# 黑白杂志 / Editorial Mono\n\n## 风格ID\neditorial-mono\n\n## 风格名称\n黑白杂志 / Editorial Mono\n\n## 风格描述\n对标《Kinfolk》《Monocle》《纽约时报》周末版的杂志编辑设计：黑 + 白 + 一种克制 accent，巨大衬线标题，不对称版式，奢侈的留白，引文与脚注并存。适合品牌发布、读书分享、文化访谈、长文摘要。\n\n## 基础提示词模板\n\n你是一位顶级杂志艺术总监，对标 Kinfolk / Monocle / The New Yorker / 纽约时报周末版的版面设计。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：暖白 #FAF8F2 或墨黑 #1A1A1A（每份 deck 选一种，不混用）；整页见微弱纸张颗粒。\n- 文字：暖白底用炭黑 #0F0F0F，墨黑底用米白 #F4F1E8。\n- ACCENT（每份 deck 只允许一种 accent 色）：编辑红 #C8102E、橄榄绿 #5D6D3F、深芥末 #B8860B、午夜蓝 #2A3D5F；只用于：1 个引号、1 行小标题、1 条细分隔线、1 个角注。\n\n【字体】\n- 主标题：思源宋体 Heavy / Noto Serif TC Black，字号巨大（占封面高度 18-25%），字距 -2%，可换行 2-3 行。\n- 副标题/小标题：思源黑体 Light + 全大写 + 字距 +20%（spacing letter）。\n- 正文：思源宋体 Regular，行高 1.65，两端对齐或左对齐，绝不居中。\n- 引文：思源宋体 Italic，超大字号，挂角引号 \"\" 或 「」。\n\n【封面页构图】\n不对称布局：主标题占左上 60% 区域（贴左边 column），下方一行小标题（全大写、accent 色）；右侧或下方留出大块留白，仅放一个细长 accent 色边线 + 一行编号 / 期号 / 日期（如 \"01 / 普通人指南 / Apr 2026\"）。底部最右角放一个小尺寸图片或几何符号作为视觉钩子。\n\n【内容页构图】\n经典杂志双栏：左 1/3 column 放小标题（全大写 + 上方一条 1px 短线）+ accent 色编号；右 2/3 放正文，首字母用大号 drop cap（4 行高），段落之间用空行隔开。或采用\"引文页\"变体：整页中央一句巨大斜体引文 + 下方小字署名。每页只承载 1 个核心观点，绝不堆砌。\n\n【数据页构图】\n极简：1 个超大数字（占画面高度 40%）放左侧或居中，下方 1 行解释 + 1 行来源；旁边放一段 80-120 字的散文式解读（不要点状列表）。如果要图表，必须用最简的细线折线图或单色横条，无渐变、无填色面积、无图例。\n\n【禁止】\n- 严禁使用任何 emoji、卡通图标、3D 元素、渐变、阴影\n- 严禁使用 sans-serif 作为主标题\n- 严禁使用 2 种以上 accent 色\n- 严禁居中所有文字、严禁卡片化布局\n\n## 适用场景\n品牌发布、读书分享会、文化访谈、品牌故事、人物专访、生活方式杂志型 PPT、艺术展陈、慢公司汇报。\n\nFile v1.1.1:styles/gradient-glass.md\n\n# 渐变玻璃 / Spatial Glass\n\n## 风格ID\ngradient-glass\n\n## 风格名称\n渐变玻璃 / Spatial Glass\n\n## 风格描述\n对标 Apple Vision OS 与现代 SaaS 产品的玻璃质感设计：极光渐变 + 磨砂玻璃卡片 + 柔和 3D 物体，氛围高级、洁净、有空间深度。适合 AI 产品发布、创意提案、技术分享。\n\n## 基础提示词模板\n\n你是一位顶级空间计算与 SaaS 产品演示设计师。请生成 16:9 横版幻灯片，对标 Apple Vision OS / Linear / Cursor 官网的视觉调性。\n\n【核心视觉】\n- 背景：深空黑 #0A0A12 或珠光白 #F8F9FB（二选一），叠加微弱的径向极光（紫 #7B5BFF / 青 #00D4FF / 粉 #FF7AB6 -> 透明），强度控制在背景 15-25%，绝不抢主体。\n- 卡片：磨砂玻璃材质，rgba(255,255,255,0.08-0.16) + 1px 内白边 + 柔投影，圆角 24px。深色背景下玻璃略带霓虹反射；浅色背景下玻璃几乎透明、边缘见光。\n- 强调色：极光渐变只用于关键数字、按钮、装饰光带，正文一律保持高对比中性色（深色底用 #E8E8F0，浅色底用 #1A1A24）。\n- 装饰：可放 1 个抛光金属 / 透明亚克力 / 流体硅胶质感的 3D 物体作为视觉锚点，体积小而精，避免占满画面。\n\n【字体】\n- 标题：思源黑体 Heavy / 苹方 Heavy，字号巨大（占封面高度 12-18%）\n- 正文：思源黑体 Regular，1.4 行高\n- 数字：等宽数字字体（如 SF Mono / 思源等宽），方便对齐\n\n【封面页构图】\n左对齐或居中放标题，副标题降一档字号；同侧或对角放一个直径占画面 30-45% 的 3D 玻璃物体（球、胶囊、莫比乌斯环、流体）；背后有一道极光弧线穿过；底部 1 行简短 tagline。\n\n【内容页构图】\n2x2 或 3 列玻璃卡片网格（不要硬塞 6 个，3-4 个最舒服），每张卡片含 1 行短标题 + 2-3 行说明 + 1 个发光小图标；卡片之间留出 32px 以上间距；右上或左下点缀 1 处极光高光。\n\n【数据页构图】\n左 40% 文本（结论 + 1-2 行解释），右 60% 大型发光 3D 数据可视化（甜甜圈 / 胶囊进度条 / 悬浮数字塔）；图表色用极光渐变，背景保留克制。\n\n【禁止】\n- 别堆 Bento 网格塞 6+ 卡片\n- 别用 cliché 词汇式装饰：火焰、闪电、彩虹光晕\n- 别用低分辨率噪点或老式金属拉丝纹理\n- 不要把 3D 物体做成\"水晶球 + 莲花 + 小球\"那种俗气组合\n\n## 适用场景\nAI 产品发布、技术分享、创意提案、Spatial / VisionOS 主题、设计奖参赛级视觉。\n\nArchive v1.1.0: 30 files, 87890 bytes\n\nFiles: AGENTS.md (2857b), agents/openclaw.yaml (992b), docs/install.md (4450b), docs/README.en.md (6595b), generate_ppt.py (14727b), install_as_skill.sh (5969b), README.md (7232b), requirements.txt (81b), scripts/codex_backend.py (6655b), scripts/generate_ppt.py (22693b), scripts/image_generator.py (17921b), scripts/md_to_plan.py (5935b), scripts/render_template.py (6322b), scripts/template_analyzer.py (30593b), SKILL.md (19096b), styles/clean-tech-blue.md (2862b), styles/dark-aurora.md (2903b), styles/dark-dashboard.md (2170b), styles/editorial-mono.md (2828b), styles/gradient-glass.md (2576b), styles/hand-sketch.md (2948b), styles/japanese-wabi.md (2844b), styles/magazine-minimal.md (2000b), styles/nature-cinematic.md (2286b), styles/risograph.md (2972b), styles/swiss-grid.md (2776b), styles/vector-illustration.md (2724b), styles/y2k-chrome.md (2950b), templates/viewer.html (9723b), _meta.json (133b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: gpt-image2-ppt\ndescription: Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Retro Vector) plus a template-clone mode that mimics any user-supplied .pptx; ships an HTML viewer 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.\n---\n\n# gpt-image2-ppt -- 用 gpt-image-2 生成 PPT\n\n把一份 markdown 大纲（或 `slides_plan.json`）+ 一种视觉风格，直接喂给 OpenAI 官方 Images API（`gpt-image-2`），逐页出图，最后拼成一个键盘可翻页的 HTML viewer + 16:9 .pptx。\n\n## 十种内置风格\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n> 风格选择原则：技术类首选 `dark-aurora` / `gradient-glass`，商务类首选 `clean-tech-blue` / `editorial-mono`，文化生活类首选 `japanese-wabi` / `vector-illustration`，潮文娱类首选 `risograph` / `y2k-chrome`，学术类首选 `swiss-grid`，工作坊与早期创意类首选 `hand-sketch`。\n\n## 模板克隆模式\n\n直接给 skill 一个 .pptx 模板，后续所有页都仿这个模板。\n\n```bash\n# 一行：自动渲染 + vision 抽风格 + 出图。本机有 LibreOffice 或 docker 镜像即可\npython3 scripts/generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict\n```\n\n`--template-strict` 表示每页都把模板对应页作为 image reference 喂给 gpt-image-2，仿真度最高。\n\n### 模板渲染：本机不需要操作 PowerPoint\n\nskill 自带 `render_template.py`，把 .pptx 自动渲染成每页 PNG，存到 `<cwd>/template_renders/<stem>/page-NN.png`。\n\n后端按优先级自动挑：\n1. 本机 `libreoffice` / `soffice` 命令（最快）\n2. 本机 docker + `linuxserver/libreoffice` 镜像（首次拉 ~2.5GB）\n3. PDF -> PNG 走 `pymupdf`（已在 requirements）；没装就用 `pdf2image` + poppler\n\n如果两种 LibreOffice 都没有，会让用户手动从 PowerPoint/Keynote/WPS 导出每页 PNG，命名 `page-01.png` 起按字典序对应页码。\n\n跑 `generate_ppt.py --template-pptx ...` 时如果省略 `--template-images` 会自动调一次渲染；也可以手动先跑一次：\n\n```bash\npython3 scripts/render_template.py company-template.pptx\n# -> <cwd>/template_renders/company_template/page-01.png ... page-NN.png\n```\n\n### 仿模板的两层缓存\n\n| 资料 | 路径 | 用途 |\n| --- | --- | --- |\n| 模板每页 PNG | `<cwd>/template_renders/<stem>/page-NN.png` | LibreOffice 一次渲染长期复用 |\n| Vision 风格分析 | `<cwd>/template_cache/<sha256>.json` | gemini-3.1-pro-preview 一次分析长期复用 |\n| 生成产物 | `<cwd>/outputs/<timestamp>/` | 每次新跑都新目录 |\n\n三者都在调用者 cwd 下，与项目自然同进退；建议把 `template_renders/`、`template_cache/`、`outputs/` 加进项目的 `.gitignore`。\n\n**vision 模型(让 agent 自己判断要不要配)**：\n\n- **如果当前运行本 skill 的 agent 自己就是多模态的**（Claude Code 走 Claude Opus/Sonnet 等多模态 SKU、codex 走 GPT 多模态 SKU 等），**压根不用外挂 vision 模型**：直接让 agent 自己 `Read` `template_renders/<stem>/page-*.png`，一次把风格抽出来写进 `template_cache/<sha256>.json` 即可(schema 见 `template_analyzer.py`)。这是默认路径,不需要配 `VISION_*`。\n- **只有 agent 本身是纯文本模型**(或你想强制用某个更强的 vision 做模板分析)，才去配 `VISION_*` 让 `template_analyzer.py` 走一个独立的 OpenAI 兼容多模态 chat completions 端点(Gemini / GPT / Claude 任选,不内置 default)。\n\nvision 分析与图片生成的 `gpt-image-2` 永远解耦——换 vision provider 不影响出图路径。\n\n## 安装\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh --target claude   # Claude Code\n# 或\nbash install_as_skill.sh --target codex    # Codex\n# 仅当你走 API 直连模式时，再编辑对应目录下的 .env 填入 API_KEY\n```\n\n## 必需的环境变量\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # 或任意 OpenAI 兼容中转站\nOPENAI_API_KEY=sk-...\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                     # low / medium / high / auto\n\n# 可选：模板克隆模式的 vision 分析 backend。\n# 默认让调用本 skill 的 agent 自己看图（多模态 Claude Code / 多模态 codex 皆可）,\n# 只有 agent 本身是纯文本模型时才需要外挂下面这组。\n# 不内置默认 endpoint，请填你自己信任的服务,否则就别填。\n# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\n# VISION_API_KEY=sk-...\n# VISION_MODEL_NAME=gemini-3.1-pro-preview   # 或 gpt-4o / claude-3.5-sonnet 等任意多模态 SKU\n```\n\n> **安全提示**：脚本只从 `<script_dir>/.env`、`~/.codex/skills/.../.env`、`~/.claude/skills/.../.env`、`~/skills/.../.env` 与显式 `GPT_IMAGE2_PPT_ENV` 加载凭据，**不会**向上递归读取项目目录里的 `.env`，避免误吃无关密钥。\n\n## 如果你就是 Codex agent（原生 image_generation 出图 — 推荐）\n\n**如果你自己就是 Codex**（正在运行本 skill 的 agent 就是 Codex CLI / Codex TUI），你自带 `image_generation` tool 和 ChatGPT 登录态。此时**不要**跑 `generate_ppt.py`，直接用原生工具完成整个 pipeline——零依赖、零 API Key、零套娃。\n\n### 如何判断\n\n你能访问 `image_generation` tool，并且不需要手动配 `OPENAI_API_KEY` 就能出图——满足这两个条件就走原生路径。\n\n### 出图流程（Codex 原生路径）\n\n**1. 准备 slides 数据**\n\n如果还没有 `slides_plan.json`，先按下面「生成流程」第 2-3 步写 `slides_plan.md` → `python3 scripts/md_to_plan.py ...` 转 json。\n\n**2. 读风格模板**\n\n读 `styles/<id>.md`，取 `## 基础提示词模板` section 作为 base prompt。\n\n**3. 构造每页 prompt**\n\n参考 `generate_ppt.py` 的 `generate_prompt()` 逻辑，核心规则：\n\n- 封面（cover/slide 1）：标题/副标题为视觉焦点\n- 数据页（data/最后一页）：突出关键数字、对比或结论\n- 内容页（content/其余页）：按层级、对齐、留白结构化呈现\n- **所有文字必须简体中文**，字体用思源黑体/苹方，严禁草书/艺术字\n- **16:9 横版宽屏**（landscape, widescreen），prompt 里明确说\"宽度明显大于高度、绝对不要方图\"\n\n```text\n{style 基础提示词模板}\n\n---\n\n现在请生成本组中的【{封面页/内容页/数据页}】，{对应 hint}\n本页要呈现的内容如下（请按本风格美学重新设计版式）：\n\n{slide content}\n\n【强制语言与字体要求】\n1. 所有文字必须使用简体中文，严禁英文（专有名词除外）\n2. 中文字体使用思源黑体或苹方，严禁草书、艺术字\n3. 标题粗体，正文常规，字号对比清晰\n\n【画面比例 — 强制】16:9 横版宽屏 (landscape, widescreen)，宽度明显大于高度，绝对不要方图或竖图。\n```\n\n**4. 调 image_generation tool 出图**\n\n对每页调你的 `image_generation` tool：\n\n- `prompt`: 上面拼好的完整 prompt\n- `output_format`: `png`\n- 将返回的图片保存到 `outputs/<timestamp>/images/slide-NN.png`（NN 为两位页码）\n\n可以并发（建议 ≤4 并发，避免限流）。\n\n**5. 生成 HTML viewer**\n\n读 `templates/viewer.html`，把 `/* IMAGE_LIST_PLACEHOLDER */` 替换为 `'images/slide-01.png', 'images/slide-02.png', ...`，写到 `outputs/<timestamp>/index.html`。\n\n**6. 打包 PPTX（可选）**\n\n```bash\npython3 -c \"\nfrom pptx import Presentation\nfrom pptx.util import Inches\nprs = Presentation()\nprs.slide_width = Inches(13.333)\nprs.slide_height = Inches(7.5)\nblank = prs.slide_layouts[6]\nimport os, glob\nfor p in sorted(glob.glob('outputs/<timestamp>/images/slide-*.png')):\n    slide = prs.slides.add_slide(blank)\n    slide.shapes.add_picture(p, 0, 0, width=prs.slide_width, height=prs.slide_height)\nprs.save('outputs/<timestamp>/<title>.pptx')\nprint('done')\n\"\n```\n\n### 模板克隆模式（Codex 原生路径）\n\n你自己就是多模态 agent——直接 `Read` 模板每页 PNG 抽取视觉风格，写到 `template_cache/<sha256>.json`（schema 见 `template_analyzer.py` 里的 `TemplateProfile`），然后按上面流程出图时把对应模板页作为 reference image 传给 `image_generation` tool。\n\n**不需要配 `VISION_*`**——你就是 vision。\n\n### 与下面「--backend codex」的区别\n\n| | 原生路径（本节） | --backend codex |\n|---|---|---|\n| 适用场景 | **你就是** Codex agent | 你是 Claude Code / 其他 agent，借用本机 codex CLI |\n| 调用方式 | 直接调 `image_generation` tool | spawn `codex exec --full-auto` 子进程 |\n| 出图层数 | 1 层 | 2 层（agent → python → codex exec） |\n| 速度 | 几秒/张 | 30-60s/张 |\n| 可靠性 | tool 参数精确 | 自然语言 relay，偶发失败 |\n| 需要 API Key | 不需要 | 不需要 |\n\n---\n\n## 可选：走 codex CLI 出图（--backend codex，非 Codex caller 用）\n\n> **如果你就是 Codex agent，不要走这条路——用上一节的「原生路径」代替。**\n\n当你用 Claude Code / OpenClaw / 其他 agent 运行本 skill，但本机装了 codex CLI 且已登录（`codex login`），可以借用它的凭据出图，省掉配 `OPENAI_API_KEY`：\n\n```bash\npython3 scripts/generate_ppt.py --plan slides_plan.json --style styles/editorial-mono.md --backend codex\n```\n\n默认后端仍是 `openai`（直调 API，快、并发稳、每页 3-10s）。`--backend codex` 是逃生口，适合\"只跑 1-2 张图试水、不想配 key\"的场景。\n\n**Tradeoffs**：\n- ✅ 不需要在本 skill 配 `OPENAI_API_KEY`\n- ⚠️ 慢：每页多一层 agent loop，单页 30-60s+，10 页可能 5-10 分钟\n- ⚠️ 计费不变：gpt-image-2 是按图计费，不在 ChatGPT 订阅内，codex 只是代你刷额度\n- ⚠️ 可控性差：aspect_ratio / quality / reference_image 靠自然语言指令让 codex 转发，偶发失败\n\n相关 env（都可选）：\n\n```bash\nCODEX_CMD=\"codex exec --full-auto\"   # 覆盖 codex 调用方式（默认这串）\nCODEX_IMAGE_MODEL=gpt-image-2        # 传给 codex 的目标模型\nCODEX_TIMEOUT_SECS=900               # 单页超时\nGPT_IMAGE_BACKEND=codex              # 不想每次敲 --backend 就设这个\n```\n\n模板克隆的 vision 分析同理——当 caller agent 自己是多模态时（Claude Code / 多模态 codex），可以直接 `Read` 模板 PNG 抽取风格，不用配 `VISION_*`；只有 caller agent 是纯文本模型时才需要外挂 vision provider。\n\n## 生成流程（内置风格）\n\n**先 md 后 json**：md 给人看、方便 diff / review / 改文案；json 由 md 派生，喂给 `generate_ppt.py`，标为 generated，不手改。\n\n1. 用户给一份大纲 / 已有的 slides_plan.json\n2. Claude 按下面 md 规范写一份 `slides_plan.md`，与用户确认文案：\n   ````markdown\n   ---\n   title: MediWise Health Suite 商业计划书\n   ---\n\n   ## 1. [cover] MediWise Health Suite\n   副标题：家庭健康管理智能平台\n   年份：2026\n\n   ## 2. [content] 市场痛点：健康管理的两类割裂\n   痛点一：高频无深度\n   ...\n\n   ## 6. [data] 效率对比：使用 MediWise 前后\n   ...\n   ````\n   - h2 格式：`## N. [page_type, layout=layout-05] 本页标题行`\n   - `N.` 可省（按出现顺序自动编号）；`[page_type]` 可省（默认 `content`）；`layout=` 只在模板克隆模式需要\n   - `page_type`: `cover` / `content` / `data`\n   - h2 标题行 → json 里 `content` 的第一行；下面的正文 → 正文\n3. 用户 OK 后，转 json：\n   ```bash\n   python3 scripts/md_to_plan.py slides_plan.md -o slides_plan.json\n   ```\n4. 选风格：从上面 10 套里挑一个，对应 `styles/<id>.md`\n5. 调脚本：\n   ```bash\n   python3 scripts/generate_ppt.py --plan slides_plan.json --style styles/editorial-mono.md\n   ```\n6. 产物在 `<cwd>/outputs/<timestamp>/`：\n   - `images/slide-XX.png` -- 每页 PNG（16:9，1536x1024）\n   - `index.html` -- HTML viewer，方向键翻页、空格自动播放、ESC 全屏\n   - `prompts.json` -- 每页用到的完整 prompt（便于复盘 / 二次微调）\n   - `<title>.pptx` -- 16:9 整页填充图片的 .pptx，分享 / 投影直接用\n\n## 生成流程（模板克隆）\n\n1. **拿到模板 .pptx**（用户提供 / 内部模板库 / 网络下载）\n2. **（可选）先单独渲染并人工挑选**----大模板（>15 页）建议先 `python3 scripts/render_template.py xxx.pptx`，再从 `template_renders/<stem>/` 里挑 8-12 张代表页复制到 `template_renders/<stem>_curated/`，供 vision 分析。页数越精，layout 命中越准\n3. **生成 slides_plan.md → 转 slides_plan.json**（见内置风格流程第 2-3 步）。每页 `slide_number` / `page_type` (`cover` / `content` / `data` / 等) / `content`；想精准对位时在 h2 里加 `layout=layout-NN`（NN = 模板第 N 页 / 你期望对应的模板页编号）\n4. **跑 generate_ppt.py**：\n   ```bash\n   python3 scripts/generate_ppt.py \\\n     --plan slides_plan.json \\\n     --template-pptx xxx.pptx \\\n     --template-images template_renders/xxx_curated \\\n     --template-strict --slides 1\n   ```\n   先 `--slides 1` 出封面冒烟，效果 OK 再跑全量\n5. **告知用户产物路径**\n\n### 模板页面挑选 / 复用原则\n\n**核心原则：尽量做到 1 page : 1 layout**----同一份 deck 里每个 slide 用不同的模板页作 reference，观众会觉得每页都是新内容；如果同一个独特 layout 出现 2-3 次，观众下意识会想\"为什么又是这页\"。\n\nvision 分析时会给每个 layout 标 `reuse_friendly`：\n\n| reuse_friendly | 典型 layout | 多次使用的代价 |\n| --- | --- | --- |\n| `false`（不可复用，(!) 强警告） | 封面、3 个具名角色插画页、独特场景图（雪山/广播塔/复古收音机）、5 步骤 zigzag 各步独有图标、novelty 数据中央装置 | 视觉重复非常明显，观众会困惑 |\n| `true`（可复用，但仍建议错开，(i) 弱提示） | 纯文字、卡片网格、通用列表、章节小节标题 | 不致命，但平白浪费模板里的其它好版式 |\n\nClaude 在搭 plan 时的执行策略：\n1. **优先把模板里 N 个不同 layout 分配给 N 页 slide**（N 不够就在 SKILL 里看 reuse_friendly=true 的部分挑能复用的）\n2. **如果 plan 里某页内容结构非常相似（比如多个\"5 步骤流程\"），先尝试改写内容用不同 layout 表达**（4 步骤 + 5 步骤分别用不同流程页），而不是同一个 zigzag 用两次\n3. **冒烟跑完后，看 `Layout 复用检测` 那段输出**：(!) 必须改，(i) 看情况改；改 plan 里相应 slide 的 `layout_id` 即可\n4. **看完 cache JSON 选 layout**：`cat <cwd>/template_cache/<sha256>.json | jq '.layouts[] | {id, page_type, reuse_friendly, summary}'` 一眼看清模板有哪些版式可挑\n\n`generate_ppt.py` 在派发任务前会自动跑一次复用检测，把警告打到终端，不阻塞执行。\n\n## Skill 调用规范\n\n当用户说\"做一份 PPT\" / \"生成幻灯片\"时：\n\n1. **先问三件事**（不要直接动手）：\n   - 内容 / 页数 / 观众是谁？\n   - 风格偏好？按\"十种内置风格\"表的场景类目映射推荐 1-2 个；**或者用户上传自己的 .pptx 模板**（走 `--template-pptx`，自动渲染）\n   - 是否需要单页测试一张图先看效果（`--slides 1`）\n2. **先写 slides_plan.md** 给用户确认文案（md 是 source of truth，人审阅友好）\n3. **转 slides_plan.json**：`python3 scripts/md_to_plan.py slides_plan.md -o slides_plan.json`（json 标为 generated，不手改；要改文案回到 md 改再转）\n4. **跑 generate_ppt.py**，先 `--slides 1` 出封面冒烟，效果 OK 再跑全量\n5. **告知用户产物路径**，让他在浏览器打开 `outputs/<timestamp>/index.html` 或者 `<title>.pptx`\n\n## 仅生成部分页\n\n```bash\npython3 scripts/generate_ppt.py --plan my_plan.json --style styles/dark-aurora.md --slides 1,3,5\n```\n\n跑过的页有同名 PNG 时会自动跳过，方便逐页迭代。\n\n## 文件结构\n\n```\ngpt-image2-ppt-skills/\n|---- SKILL.md                # 本文件（Claude Code skill 入口）\n|---- AGENTS.md               # codex / aider / cursor 等 agent 的薄索引，指向本文件\n|---- README.md               # 项目说明\n|---- scripts/                # 所有 Python 脚本\n|   |---- generate_ppt.py         # 主入口（CLI）\n|   |---- md_to_plan.py           # slides_plan.md -> slides_plan.json 转换器（CLI）\n|   |---- render_template.py      # PPTX -> 每页 PNG 的辅助脚本（CLI + library）\n|   |---- image_generator.py      # gpt-image-2 wrapper（支持 reference image，openai backend）\n|   |---- codex_backend.py        # 可选：走 codex CLI 出图（--backend codex）\n|   \\---- template_analyzer.py    # PPT 模板剖析器（vision + 缓存）\n|---- styles/                 # 10 套内置风格\n|   |---- gradient-glass.md           dark-aurora.md\n|   |---- clean-tech-blue.md          risograph.md\n|   |---- vector-illustration.md      japanese-wabi.md\n|   |---- editorial-mono.md           swiss-grid.md\n|   |---- hand-sketch.md              y2k-chrome.md\n|---- templates/viewer.html   # HTML viewer 模板\n|---- docs/README.en.md       # 英文 README\n|---- install_as_skill.sh     # 一键安装到 ~/.claude/skills/\n|---- requirements.txt        # requests + python-dotenv + python-pptx + jsonschema + pymupdf\n\\---- .env.example\n```\n\n调用时产生的运行时目录都在 `<cwd>` 下：\n```\n<your-project>/\n|---- template_renders/<stem>/page-NN.png   # PPTX 渲染（render_template.py）\n|---- template_cache/<sha256>.json          # vision 风格分析缓存\n\\---- outputs/<timestamp>/                  # 每次生成产物\n```\n\n## License\n\nApache License 2.0.\n\nFile v1.1.0:README.md\n\n<div align=\"center\">\n\n# gpt-image2-ppt-skills\n\n**用 OpenAI `gpt-image-2` 一键生成视觉强烈的 PPT。**\n\nClaude Code / Codex / OpenClaw Skill。装进 agent 后，用一句自然语言生成 16:9 高清图片 + 可键盘翻页的 HTML viewer + 打包好的 `.pptx`，也可以仿任意 `.pptx` 模板出全新内容。\n\n[![GitHub stars](https://img.shields.io/github/stars/JuneYaooo/gpt-image2-ppt-skills?style=flat)](https://github.com/JuneYaooo/gpt-image2-ppt-skills/stargazers)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](./LICENSE)\n[![Python](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-Skill-orange.svg)](https://www.anthropic.com/claude-code)\n[![gpt-image-2](https://img.shields.io/badge/OpenAI-gpt--image--2-black.svg)](https://platform.openai.com/docs/guides/images)\n\n🌐 **English** → [docs/README.en.md](./docs/README.en.md)\n\n</div>\n\n---\n\n## 🎬 效果演示：喂一张模板，仿出一套新内容\n\n<table>\n<tr>\n<th width=\"50%\">输入：任意一页参考模板（.pptx / 图片）</th>\n<th width=\"50%\">输出：本 skill 仿制 + 换内容</th>\n</tr>\n<tr>\n<td><img src=\"docs/assets/template-demo-input.jpg\" width=\"100%\" alt=\"input template\"></td>\n<td><img src=\"docs/assets/template-demo-output.jpg\" width=\"100%\" alt=\"generated output\"></td>\n</tr>\n<tr>\n<td align=\"center\"><sub>英文信息图模板（Mass Media Infographics）</sub></td>\n<td align=\"center\"><sub>同一版式 / 同一配色 / 同一插画语汇，内容换成「普通人怎么用 AI 做自媒体」</sub></td>\n</tr>\n</table>\n\n---\n\n## ✨ 能做什么\n\n- 🎨 **十套精选风格** — Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Riso / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Vector Illustration，每套都细分 `cover` / `content` / `data` 三种构图\n- 🪄 **模板克隆模式** — 丢一个 `.pptx` 进去，自动渲染 + vision 抽风格 + JSON Schema 复刻，像上面那张图一样仿版式换内容\n- 🎮 **HTML viewer + `.pptx` 双产出** — 键盘翻页 / 空格自动播放 / ESC 全屏 / 触摸滑动，同时打包成 16:9 `.pptx` 直接用\n- ⚡ **默认 10 路并发出图** — 10 页 ~30 秒出完\n- 🔁 **双后端** — `openai` 直调（需 key）或 `codex` CLI（复用 codex 登录，无需在本 skill 配 key）\n- 🤖 **官方 OpenAI Images API** — 模型 `gpt-image-2`，`base_url` 可换任意 OpenAI 兼容中转\n\n## 🎨 十种内置风格\n\n> 下图为 10 套风格在同一主题「**如何用 gpt-image-2 做 PPT**」下各生成一张封面的对照。全部由 `gpt-image-2` 直出，未经 PS。\n\n![10 种风格封面对照 · 同一主题直出](docs/assets/style-gallery.jpg)\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n---\n\n## 🚀 安装\n\n### 方式一：让 AI 自己装（推荐）\n\n把下面这段 prompt 丢给你的 AI 助手（Claude Code / OpenClaw / Codex / Cursor / Trae / Hermes Agent 都行），它会自动完成安装：\n\n```\n帮我安装 gpt-image2-ppt-skills：\nhttps://raw.githubusercontent.com/JuneYaooo/gpt-image2-ppt-skills/main/docs/install.md\n```\n\nagent 会自己 clone 仓库、按当前运行环境选择安装目标、提示你重启。\n\n### 方式二：手动安装\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh --target claude   # Claude Code\n# 或\nbash install_as_skill.sh --target codex    # Codex\n```\n\n脚本会把 skill 装到对应 agent 的目录：\n\n- Claude Code: `~/.claude/skills/gpt-image2-ppt-skills/`\n- Codex: `~/.codex/skills/gpt-image2-ppt-skills/`\n\n如果你走 API 直连模式，再填一个 key 就能用：\n\n```bash\n# Claude Code:\n# ~/.claude/skills/gpt-image2-ppt-skills/.env\n#\n# Codex:\n# ~/.codex/skills/gpt-image2-ppt-skills/.env\nOPENAI_BASE_URL=https://api.openai.com    # 或任意 OpenAI 兼容中转\nOPENAI_API_KEY=sk-...                     # 必需\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n```\n\n> 在 **Codex** 里如果当前 agent 自带原生图片生成能力，可以直接走 `SKILL.md` 里的原生路径，**不必配置 `OPENAI_API_KEY`**。\n>\n> 🔒 **不会误吃密钥**：只从 skill 自己目录的 `.env` 或显式 `GPT_IMAGE2_PPT_ENV` 加载，**不会**向上递归读项目目录的 `.env`。\n>\n> 🪄 模板克隆模式额外需要本机 `libreoffice` 或 docker `linuxserver/libreoffice` 镜像（用来把 `.pptx` 渲染成 PNG）。\n\n---\n\n## 🛠 在 Claude Code 里怎么用\n\n装完直接跟 Claude 说人话就行：\n\n> 帮我用 **gpt-image2-ppt** 生成一份关于 **[你的主题]** 的 5 页 PPT，风格用 `dark-aurora`。\n\n仿模板同理：\n\n> 我这有一个 `company-template.pptx`，帮我按这个模板做一份关于 **[你的主题]** 的 5 页 PPT。\n\nClaude 会自己写 `slides_plan`、先出一页封面让你确认、再跑全量，把 HTML viewer + `.pptx` 路径告诉你。\n\n> 🧑‍💻 想自己写脚本调 CLI 而不走 agent？看 [`SKILL.md`](./SKILL.md)，CLI 参数、文件布局都在那。\n\n---\n\n## 🙏 致谢\n\n- [op7418/NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) — 风格 prompts 与 viewer 模板的原始作者。本项目把图片后端从 Nano Banana Pro 换成了 OpenAI gpt-image-2，重写了继承自上游的 3 套风格并新增 7 套（共 10 套），另加入模板克隆模式（vision 抽风格仿任意 `.pptx`）、md-first 编排流程、`.pptx` 自动打包、codex CLI 备用后端等新功能。\n- [lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) — Claude Code skill SKILL.md frontmatter 写法参考。\n\n## 💬 Community\n\n[**LINUX DO — 中文开发者社区**](https://linux.do/)\n\n### 微信交流群\n\n欢迎大家有问题一起交流讨论。\n\n<img src=\"docs/assets/wechat.jpg\" width=\"300\" alt=\"微信交流群\">\n\n## ⭐ Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=JuneYaooo/gpt-image2-ppt-skills&type=Date)](https://star-history.com/#JuneYaooo/gpt-image2-ppt-skills&Date)\n\n---\n\n## License\n\nApache License 2.0，详见 [LICENSE](./LICENSE)。\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn76gz2yb53tdjgpmb3ydjexax82g5yr\",\n  \"slug\": \"gpt-image2-ppt\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1778330306263\n}\n\nFile v1.1.0:AGENTS.md\n\n# AGENTS.md -- 给 codex / aider / cursor 等 agent 的入口说明\n\n本仓库是一个用 OpenAI `gpt-image-2` 生成 PPT 幻灯片的工具包，**权威文档在 [`SKILL.md`](./SKILL.md)**。任何涉及\"做一份 PPT / 生成幻灯片 / 出图 / 改风格 / 按模板仿作\"的请求，都先完整读 `SKILL.md` 再动手，不要凭本文件的摘要就开跑 -- 下面只是索引。\n\n## 一分钟索引\n\n- **主入口 CLI**：`python3 scripts/generate_ppt.py --plan slides_plan.json --style styles/<id>.md`\n- **内容源稿**：先写 `slides_plan.md`（人审阅），再 `python3 scripts/md_to_plan.py slides_plan.md -o slides_plan.json`；json 标为 derived，不手改\n- **十种内置风格**：见 `styles/` 目录 + `SKILL.md` 顶部表格\n- **模板克隆**：`--template-pptx path/to/xxx.pptx --template-strict`，vision 分析 + 缓存细节在 `SKILL.md` 的\"模板克隆模式\"一节；**如果你自己就是多模态 agent**(多模态 Claude / GPT / 等)，可以直接 `Read` `template_renders/<stem>/page-*.png` 自己抽风格写 `template_cache/<sha256>.json`，不用外挂 `VISION_*`\n- **冒烟策略**：先 `--slides 1` 出封面，确认后再跑全量\n- **产物**：`<cwd>/outputs/<timestamp>/{images/, index.html, prompts.json, <title>.pptx}`\n\n## 调用规范（对 agent 的硬约束）\n\n1. **先问三件事**：内容 / 观众、风格偏好（或是否带 .pptx 模板）、是否先 `--slides 1` 冒烟\n2. **永远先 md 后 json**：用户改文案改 md，不手改 json\n3. **先冒烟再全量**：`--slides 1` 的封面效果用户认可后再跑余下页\n4. **告知产物路径**：跑完把 `outputs/<timestamp>/index.html` 和 `.pptx` 路径明确告诉用户\n\n## 凭据 / backend\n\n- 默认后端 `openai`，需在 scoped 位置（`<script_dir>/.env`、`~/.codex/skills/.../.env`、`~/.claude/skills/.../.env` 或 `$GPT_IMAGE2_PPT_ENV`）配 `OPENAI_API_KEY`\n- **如果你就是 codex**：走「原生 image_generation 出图」路径——直接用你自带的 `image_generation` tool 出图，**不要**跑 `generate_ppt.py --backend codex`（那是给 Claude Code 等非 codex caller 用的，会 spawn 一个多余的 codex 子进程）。完整流程见 `SKILL.md` 的「如果你就是 Codex agent」一节\n- 脚本**不会**向上递归读取项目目录的 `.env`，避免误吃无关密钥\n\n## 不要做的事\n\n- 不要手改 `slides_plan.json`（改 md 再转）\n- 不要跳过 `SKILL.md`\"模板页面挑选 / 复用原则\"直接用同一个 layout 给多页 slide 当 reference\n- 不要在没有 `OPENAI_API_KEY` 且没有本地 codex CLI 的情况下强跑 -- 先检查环境\n\n## 同步提醒\n\n本文件是薄索引。如果 `SKILL.md` 有新增章节或流程变更，只在 `SKILL.md` 里维护，本文件的锚点列表按需补；**正文描述不要复制到这里**，避免两边漂移。\n\nFile v1.1.0:docs/install.md\n\n# gpt-image2-ppt-skills 安装指南（给 AI agent 读）\n\n> 本文档是**让 AI 助手自动完成安装**的可执行指引。Claude Code / OpenClaw / Codex / Cursor / Trae / Hermes Agent 等任一 agent 按以下步骤执行即可。\n>\n> 人类用户请**不要**手动照抄下面的步骤，直接把这份 URL 扔给你的 AI 助手，它自己会跑通。\n\n## 项目一句话介绍\n\n`gpt-image2-ppt-skills` 是一个 Claude Code / Codex / OpenClaw Skill，用 OpenAI `gpt-image-2` 生成视觉强烈的 PPT（10 套内置风格 + 支持仿任意 `.pptx` 模板），产出 HTML viewer + 16:9 `.pptx`。\n\n仓库：https://github.com/JuneYaooo/gpt-image2-ppt-skills\n\n## 前置依赖（agent 请先检查）\n\n- **必需**：`git`、`python3`（3.8+）、`pip`\n- **可选**：`libreoffice` 本机命令，或 `docker` + `linuxserver/libreoffice` 镜像（仅模板克隆模式需要，用来把 `.pptx` 渲染成 PNG）\n\n如果缺 `git` / `python3`，先用系统包管理器装好；`libreoffice` 可以留到用户要用模板克隆模式时再装。\n\n## 安装步骤\n\n### 1. 克隆仓库到临时目录\n\n```bash\ngit clone https://github.com/JuneYaooo/gpt-image2-ppt-skills.git /tmp/gpt-image2-ppt-skills\ncd /tmp/gpt-image2-ppt-skills\n```\n\n### 2. 跑安装脚本\n\n```bash\n# Claude Code\nbash install_as_skill.sh --target claude\n\n# Codex\nbash install_as_skill.sh --target codex\n```\n\n这一步会：\n- 把项目文件拷贝到对应 agent 的 skill 目录\n- `pip install -r requirements.txt` 装齐 Python 依赖\n- 从 `.env.example` 生成对应目录下的 `.env` 骨架\n\n安装脚本是**交互式**的，如果目标目录已存在会问是否覆盖；agent 可以用 `yes | bash install_as_skill.sh` 自动选\"是\"，或先检查目录是否存在再决定。\n\n### 3. 只有在走 API 直连时才配置 .env\n\n如果当前 agent 就是带原生图片生成能力的 Codex，可以跳过这一步，直接重启后走 `SKILL.md` 里的原生出图路径。\n\n否则，agent 需要主动问用户要 API key 并写进 `.env`：\n\n> 请提供你的 OpenAI API key（或任意 OpenAI 兼容中转的 base_url + key）。\n\n然后把以下内容写进对应目录下的 `.env`（保留已有注释，只填值）：\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # 或用户提供的兼容中转 URL\nOPENAI_API_KEY=sk-...                     # 用户提供的 key（必需）\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n```\n\n> 如果用户没有 OpenAI 官方 key，agent 可以告诉用户：本 skill 也支持 `--backend codex` 复用本地 codex CLI 登录，不需要在本 skill 配 key；或者用任意 OpenAI 兼容中转站（把 `OPENAI_BASE_URL` 改成中转站地址即可）。\n\n### 4. 提示用户重启 agent\n\n装完之后，告诉用户：\n\n> 已安装完成。请**重启当前 agent**（Claude Code / Codex / 其它）让 skill 生效。\n\n### 5.（可选）清理临时目录\n\n```bash\nrm -rf /tmp/gpt-image2-ppt-skills\n```\n\n## 冒烟测试（用户重启 agent 后）\n\n告诉用户直接跟 agent 说：\n\n> 帮我用 **gpt-image2-ppt** 生成一份关于「猫为什么是液体」的 3 页 PPT，风格用 `gradient-glass`。\n\n正常的话 agent 会自己写 `slides_plan.json`、跑 `scripts/generate_ppt.py --slides 1` 先出封面、再跑全量，最后给出 HTML viewer 和 `.pptx` 的路径。\n\n## 常见问题（给 agent 参考）\n\n- **`ModuleNotFoundError: pymupdf`** → 在实际安装目录里重跑 `pip install -r requirements.txt`\n- **`libreoffice: command not found`**（仅模板克隆模式）→ Linux: `apt install libreoffice`；macOS: `brew install --cask libreoffice`；或让用户切换到内置 10 套风格之一，不走模板克隆\n- **`OPENAI_API_KEY 未设置`** → 如果你不是走 Codex 原生路径，回到步骤 3，检查 `.env` 文件路径和内容\n- **agent 识别不到 skill** → 确认目录装到了对应 agent 的技能目录，并且完全重启过当前 agent\n\n## 完成标志\n\n以下三条都满足即视为安装成功：\n\n1. 对应安装目录下的 `SKILL.md` 存在\n2. 如果走 API 直连模式，对应安装目录下的 `.env` 存在且包含可用 `OPENAI_API_KEY`\n3. agent 重启后，用户用自然语言要求生成 PPT 时能触发本 skill\n\n装完不用逐字读 `SKILL.md`，但需要告诉用户：\"你可以直接用自然语言要 PPT，也可以把任意 `.pptx` 模板丢给我做克隆。\"\n\nFile v1.1.0:docs/README.en.md\n\n<div align=\"center\">\n\n# gpt-image2-ppt-skills\n\n**Generate visually striking PPT decks with OpenAI `gpt-image-2` in one shot.**\n\nA Claude Code / OpenClaw Skill. Once installed in your agent, a single natural-language prompt yields 16:9 high-res images + a keyboard-navigable HTML viewer + a ready-to-send `.pptx` — or clones any reference `.pptx` template and reskins it with new content.\n\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](../LICENSE)\n[![Python](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-Skill-orange.svg)](https://www.anthropic.com/claude-code)\n[![gpt-image-2](https://img.shields.io/badge/OpenAI-gpt--image--2-black.svg)](https://platform.openai.com/docs/guides/images)\n\n🌐 **中文** → [../README.md](../README.md)\n\n</div>\n\n---\n\n## 🎬 Demo: feed one template, get a fresh deck in that style\n\n<table>\n<tr>\n<th width=\"50%\">Input: any reference template (.pptx / image)</th>\n<th width=\"50%\">Output: cloned layout + new content</th>\n</tr>\n<tr>\n<td><img src=\"assets/template-demo-input.jpg\" width=\"100%\" alt=\"input template\"></td>\n<td><img src=\"assets/template-demo-output.jpg\" width=\"100%\" alt=\"generated output\"></td>\n</tr>\n<tr>\n<td align=\"center\"><sub>English infographic template (Mass Media Infographics)</sub></td>\n<td align=\"center\"><sub>Same layout / palette / illustration vocabulary, content swapped to \"how normal people make AI-powered social content\"</sub></td>\n</tr>\n</table>\n\n---\n\n## ✨ What it does\n\n- 🎨 **10 curated styles** — Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Vector Illustration, each with `cover` / `content` / `data` composition rules\n- 🪄 **Template-clone mode** — drop in any `.pptx` and the skill auto-renders it, asks a vision model to extract style + JSON Schema, then reproduces the layout with your new content (like the demo above)\n- 🎮 **HTML viewer + `.pptx`, both shipped** — arrow-key navigation / space to autoplay / ESC fullscreen / swipe on touch, plus a 16:9 `.pptx` you can send as-is\n- ⚡ **10-way concurrency by default** — a 10-page deck finishes in ~30s\n- 🔁 **Two backends** — `openai` direct (needs key) or `codex` CLI (reuses your codex login, no key configured in this skill)\n- 🤖 **Official OpenAI Images API** — model `gpt-image-2`; `base_url` can point at any OpenAI-compatible relay\n\n## 🎨 The 10 built-in styles\n\n> Below: the 10 styles each generating one cover under the same topic — \"**How to make a PPT with gpt-image-2**\". All covers are raw `gpt-image-2` output, no PS.\n\n![10 styles · same topic, raw gpt-image-2 output](assets/style-gallery.jpg)\n\n| Style ID | One-liner | Use cases |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI product launches, technical talks, creative pitches |\n| `clean-tech-blue` | Stripe / Linear-grade blue & white | Investor decks, business plans, corporate strategy |\n| `vector-illustration` | Retro vector + black outlines | Education, brand storytelling, community sharing |\n| `editorial-mono` | Kinfolk / Monocle editorial | Brand reveals, cultural interviews, book talks |\n| `dark-aurora` | Linear / Vercel dark neon | AI products, dev tools, technical talks |\n| `risograph` | Riso 2-spot-color print + halftone | Creative studios, indie zines, design agencies |\n| `japanese-wabi` | Muji / Hara Kenya wabi-sabi | Tea ceremony, lifestyle, luxury, cultural lectures |\n| `swiss-grid` | Bauhaus / Vignelli international grid | Academic reports, museum exhibits, serious dashboards |\n| `hand-sketch` | Sketchnote / whiteboard | Workshops, product brainstorming, training |\n| `y2k-chrome` | Y2K liquid chrome + butterfly stickers | Streetwear, entertainment, brand collabs, Gen-Z marketing |\n\n---\n\n## 🚀 Install\n\n### Option 1: let your AI install it (recommended)\n\nPaste this prompt into your AI assistant (Claude Code / OpenClaw / Codex / Cursor / Trae / Hermes Agent — all work) and it will handle the install:\n\n```\nPlease install gpt-image2-ppt-skills for me:\nhttps://raw.githubusercontent.com/JuneYaooo/gpt-image2-ppt-skills/main/docs/install.md\n```\n\nThe agent will clone the repo, run the install script, ask you for an API key, and tell you to restart.\n\n### Option 2: manual install\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh\n```\n\nThe script installs the skill to `~/.claude/skills/gpt-image2-ppt-skills/`; Claude Code picks it up after restart.\n\nThen drop in one key and you're ready:\n\n```bash\n# ~/.claude/skills/gpt-image2-ppt-skills/.env\nOPENAI_BASE_URL=https://api.openai.com    # or any OpenAI-compatible relay\nOPENAI_API_KEY=sk-...                     # required\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n```\n\n> 🔒 **Won't accidentally eat your secrets**: only loads `.env` from the skill's own directory or an explicit `GPT_IMAGE2_PPT_ENV` path. It does **not** walk up into project directories.\n>\n> 🪄 Template-clone mode additionally needs native `libreoffice` or the docker `linuxserver/libreoffice` image (to render `.pptx` → PNG).\n\n---\n\n## 🛠 How to use inside Claude Code\n\nOnce installed, just say it in plain English:\n\n> Use **gpt-image2-ppt** to make a 5-slide deck about **[your topic]**, style = `dark-aurora`.\n\nTemplate clone, same shape:\n\n> I have a `company-template.pptx` — make a 5-slide deck about **[your topic]** using that template.\n\nClaude will write the `slides_plan`, generate a cover first for you to approve, then run the full deck and hand back the HTML viewer + `.pptx` paths.\n\n> 🧑‍💻 Prefer to call the CLI yourself instead of going through an agent? See [`SKILL.md`](../SKILL.md) — CLI flags and file layout live there.\n\n---\n\n## 🙏 Acknowledgements\n\n- [op7418/NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) — original author of the style prompts and viewer template. This project swaps the image backend from Nano Banana Pro to OpenAI gpt-image-2, rewrites the 3 inherited styles and adds 7 new ones (10 total), and layers on template-clone mode (vision-based style extraction from any user `.pptx`), an md-first authoring flow, automatic `.pptx` packaging, and a codex CLI fallback backend.\n- [lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) — reference for the Claude Code skill `SKILL.md` frontmatter.\n\n## License\n\nApache License 2.0 — see [LICENSE](../LICENSE).\n\nFile v1.1.0:styles/clean-tech-blue.md\n\n# 清爽科技蓝 / Stripe-grade Blue\n\n## 风格ID\nclean-tech-blue\n\n## 风格名称\n清爽科技蓝 / Stripe-grade Blue\n\n## 风格描述\n对标 Stripe / Linear / Notion 官网与 Pitch 路演 deck 的高级蓝白风：纯白背景 + 克制蓝调 + 大留白 + 精致网格。比传统 McKinsey 蓝更现代、更产品化，比 SaaS landing 更适合长篇内容。适合融资路演、商业计划书、企业战略汇报。\n\n## 基础提示词模板\n\n你是一位顶级商业演示设计师，对标 Stripe / Linear / Notion 官网与 a16z / Sequoia 路演 deck。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：纯白 #FFFFFF，绝不使用深色背景；可在大块区域用极淡冰蓝 #F4F7FF 区分。\n- 主蓝：Stripe 紫蓝 #635BFF 或皇家蓝 #1E40AF，作为标题、强调数字、品牌色块。\n- 次蓝：浅蓝 #93C5FD 用于柔性强调；冰蓝 #E0EAFF 用于卡片背景。\n- 中性：标题深墨 #0F172A、正文 #334155、辅助 #64748B。\n- 卡片：超浅冰蓝底 + 1px 蓝灰描边 #E2E8F0 + 极淡阴影；圆角 12px，朴素克制，绝不带光晕。\n- 装饰：背景可极淡的 8% opacity 蓝色网格点阵或细线（几乎不可见），仅用于呼吸感；偶尔在角落放一个浅蓝色磨砂玻璃几何体（透明度 25-35%），保持与白底自然融合。\n\n【字体】\n- 标题：思源黑体 Bold / 苹方 Bold（粗壮、不夸张）\n- 正文：思源黑体 Regular（行高 1.5-1.6）\n- 数字：思源黑体 Heavy 或等宽数字字体，强调时字号 4-6x于正文\n\n【封面页构图】\n左 60% 放主标题（深墨黑超大粗体，2-3 行内）+ 下方副标题（中蓝标准字重）+ 底部 1 行 tagline；右 40% 放一个浅蓝色简洁 3D 几何体（棱柱、球、抽象 SaaS 图形），透明度 30%，绝不喧宾夺主。顶部或底部一条 4px 高的蓝色渐变细带作为品牌锚点。\n\n【内容页构图】\n顶部留 1 行小标题 + 1 条蓝色细分隔线；主体 3 列卡片或 2 列文字+图表布局；每张卡片白底浅蓝描边、左侧 3px 实心蓝色边作为 accent；要点用蓝色实心圆点 / 短横线，绝不用 emoji。整页留白占 45% 以上。\n\n【数据页构图】\n关键数字超大（占页面高度 25-30%）深蓝粗体居中或左对齐，数字下方一行小字解释含义；旁边或下方放简洁柱状图 / 折线图 / 环形图，配色用蓝色 5 阶渐变（#1E40AF -> #93C5FD），对照组用浅灰 #E2E8F0。每个数据点必须有清晰标签，绝不裸图。\n\n【禁止】\n- 别用霓虹色、赛博朋克、深黑背景、彩虹渐变\n- 别用立体阴影、玻璃拟态过度装饰\n- 别堆图标，每页图标数量 ≤ 4 个\n- 字号对比要明确，不要全篇 18pt 平铺\n\n## 适用场景\n融资路演、商业计划书、企业战略汇报、SaaS 产品发布、董事会汇报、咨询报告。\n\nFile v1.1.0:styles/dark-aurora.md\n\n# 深色霓虹 / Dark Aurora\n\n## 风格ID\ndark-aurora\n\n## 风格名称\n深色霓虹 / Dark Aurora\n\n## 风格描述\n对标 Linear / Vercel / Cursor / Arc Browser 官网的高级深色风：深空底 + 极光弧光 + 半透明玻璃卡片 + 极细发光描边。区别于俗气的\"赛博朋克\"，强调克制与高级。适合 AI 产品、开发者工具、技术分享、新一代 SaaS。\n\n## 基础提示词模板\n\n你是一位顶级深色模式 UI 设计师，对标 Linear / Vercel / Cursor / Arc Browser 的官网视觉。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：深空黑 #0A0A0F，叠加极淡的径向渐变（中心稍亮 #14142A -> 边缘 #06060C），整体保持冷调。\n- 极光：背景隐藏 1-2 道弧形或斜向光带，颜色 #7B5BFF（紫）/ #00D4FF（青）/ #FF7AB6（粉）任选，强度 25-40%，模糊扩散，作为氛围而非主体。\n- 卡片：半透明玻璃 rgba(255,255,255,0.05-0.10) + 1px 顶部高光 rgba(255,255,255,0.15) + 极淡内阴影；圆角 16px。\n- 文字色：白 #FFFFFF（标题）/ 暖灰 #C8C8D8（正文）/ 灰 #6B6B7E（辅助）。\n- 强调：仅在关键数字、按钮、装饰光带使用极光色。\n- 装饰：可有极细 1px 发光描边几何（圆环、网格、星图），仅作背景气氛；可点缀 1-2 个微小光点（\"星尘\"），位置随机但克制。\n\n【字体】\n- 标题：思源黑体 SemiBold / Inter Display SemiBold，字号大但不溢出\n- 正文：思源黑体 Regular（光照下白字略减字重，避免刺眼）\n- 数字：等宽数字字体（如 JetBrains Mono），强调时配 1 道下方 1px 极光下划线\n\n【封面页构图】\n居中或左对齐主标题，下方副标题降一档；标题正后方有一道斜向极光光带横穿（紫->青渐变）；底部一行品牌信息或日期，配 1 个直径 6px 的发光小圆点作为锚点。整页极少元素，氛围感优先。\n\n【内容页构图】\n2x2 或 3 列玻璃卡片网格，每张卡片：顶部一行短标题 + 中间 2-3 行说明 + 左上角 1 个发光线性图标（描边 1.5px，颜色取自极光）；卡片之间间距 24px；右上角或左下角点缀一处极光光晕（直径占画面 15-25%，模糊扩散）。\n\n【数据页构图】\n关键数字超大居中或左对齐（白色），数字下方 1 行说明 + accent 色短下划线；右侧或下方一个发光环形图 / 折线图（线宽 2-3px，端点带光晕）；图例用极小字号 + 发光圆点。整体保留大块深色留白。\n\n【禁止】\n- 严禁使用刺眼正红、正绿、纯蓝；霓虹色只用极光色板\n- 严禁深色背景 + 高饱和卡通图标\n- 严禁背景完全黑（#000000），必须 #0A0A0F 起，留呼吸感\n- 别堆光晕，每页 ≤ 2 处发光区\n\n## 适用场景\nAI 产品发布、开发者工具、技术分享、深色主题 SaaS、新世代品牌发布、Cyber 但克制的演示。\n\nFile v1.1.0:styles/dark-dashboard.md\n\n# 暗色数据仪表盘风格\n\n## 风格ID\ndark-dashboard\n\n## 风格名称\n暗色数据仪表盘风格PPT\n\n## 适配模型\n- GPT Vision Image 2 (gpt-vision-image-2)\n\n## 风格描述\n深色背景配发光数据可视化，适合数据驱动的技术汇报和分析报告。灵感来自 Bloomberg Terminal、Grafana 仪表盘和航天器控制台。\n\n## 基础提示词模板\n\n你是一位专家级数据可视化设计师。请生成一张 16:9 的暗色数据仪表盘风格演示文稿幻灯片图片。\n\n视觉风格：深色主题数据仪表盘设计，灵感来自专业金融终端和航天器控制台。整体氛围科技、精准、数据驱动。\n\n配色方案：背景使用深黑色(#0D1117)到深灰蓝(#161B22)的微妙渐变。数据高光使用发光的渐变霓虹色：电光蓝(#58A6FF)、翡翠绿(#3FB950)、琥珀黄(#D29922)、珊瑚红(#F85149)。所有发光元素带有柔和的光晕效果(glow)。\n\n布局系统：仪表盘卡片式布局，每个数据模块在独立的深色圆角卡片中，卡片边框使用 1px 的半透明亮色线条(rgba(255,255,255,0.1))。卡片之间 8-16px 间距。\n\n数据可视化：折线图带有渐变填充区域和发光节点。柱状图使用圆角顶部和渐变填充。环形图带有发光描边。数字使用等宽字体并带有微光效果。\n\n字体：标题和数字使用 monospace 等宽字体风格。标签使用小号无衬线字体，颜色为半透明白色。\n\n## 页面类型模板\n\n### 封面页模板\n构图逻辑：深黑背景，中央放置项目/报告标题，使用发光的渐变色文字效果。背景有隐约的数据网格线和流动的粒子效果。底部可有一条薄薄的数据趋势线作为装饰。\n\n### 内容页模板\n构图逻辑：3-4 个仪表盘卡片的网格布局。每个卡片内有一个迷你图表或关键数字 + 简短说明。卡片内的小标题使用半透明白色，关键数据使用发光的强调色。\n\n### 数据页模板\n构图逻辑：一个大型数据可视化图表占据画面 60-70%（折线图、面积图或多维柱状图）。旁边 2-3 个 KPI 卡片展示关键指标。底部可有时间轴或数据来源标注。\n\nFile v1.1.0:styles/editorial-mono.md\n\n# 黑白杂志 / Editorial Mono\n\n## 风格ID\neditorial-mono\n\n## 风格名称\n黑白杂志 / Editorial Mono\n\n## 风格描述\n对标《Kinfolk》《Monocle》《纽约时报》周末版的杂志编辑设计：黑 + 白 + 一种克制 accent，巨大衬线标题，不对称版式，奢侈的留白，引文与脚注并存。适合品牌发布、读书分享、文化访谈、长文摘要。\n\n## 基础提示词模板\n\n你是一位顶级杂志艺术总监，对标 Kinfolk / Monocle / The New Yorker / 纽约时报周末版的版面设计。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：暖白 #FAF8F2 或墨黑 #1A1A1A（每份 deck 选一种，不混用）；整页见微弱纸张颗粒。\n- 文字：暖白底用炭黑 #0F0F0F，墨黑底用米白 #F4F1E8。\n- ACCENT（每份 deck 只允许一种 accent 色）：编辑红 #C8102E、橄榄绿 #5D6D3F、深芥末 #B8860B、午夜蓝 #2A3D5F；只用于：1 个引号、1 行小标题、1 条细分隔线、1 个角注。\n\n【字体】\n- 主标题：思源宋体 Heavy / Noto Serif TC Black，字号巨大（占封面高度 18-25%），字距 -2%，可换行 2-3 行。\n- 副标题/小标题：思源黑体 Light + 全大写 + 字距 +20%（spacing letter）。\n- 正文：思源宋体 Regular，行高 1.65，两端对齐或左对齐，绝不居中。\n- 引文：思源宋体 Italic，超大字号，挂角引号 \"\" 或 「」。\n\n【封面页构图】\n不对称布局：主标题占左上 60% 区域（贴左边 column），下方一行小标题（全大写、accent 色）；右侧或下方留出大块留白，仅放一个细长 accent 色边线 + 一行编号 / 期号 / 日期（如 \"01 / 普通人指南 / Apr 2026\"）。底部最右角放一个小尺寸图片或几何符号作为视觉钩子。\n\n【内容页构图】\n经典杂志双栏：左 1/3 column 放小标题（全大写 + 上方一条 1px 短线）+ accent 色编号；右 2/3 放正文，首字母用大号 drop cap（4 行高），段落之间用空行隔开。或采用\"引文页\"变体：整页中央一句巨大斜体引文 + 下方小字署名。每页只承载 1 个核心观点，绝不堆砌。\n\n【数据页构图】\n极简：1 个超大数字（占画面高度 40%）放左侧或居中，下方 1 行解释 + 1 行来源；旁边放一段 80-120 字的散文式解读（不要点状列表）。如果要图表，必须用最简的细线折线图或单色横条，无渐变、无填色面积、无图例。\n\n【禁止】\n- 严禁使用任何 emoji、卡通图标、3D 元素、渐变、阴影\n- 严禁使用 sans-serif 作为主标题\n- 严禁使用 2 种以上 accent 色\n- 严禁居中所有文字、严禁卡片化布局\n\n## 适用场景\n品牌发布、读书分享会、文化访谈、品牌故事、人物专访、生活方式杂志型 PPT、艺术展陈、慢公司汇报。\n\nFile v1.1.0:styles/gradient-glass.md\n\n# 渐变玻璃 / Spatial Glass\n\n## 风格ID\ngradient-glass\n\n## 风格名称\n渐变玻璃 / Spatial Glass\n\n## 风格描述\n对标 Apple Vision OS 与现代 SaaS 产品的玻璃质感设计：极光渐变 + 磨砂玻璃卡片 + 柔和 3D 物体，氛围高级、洁净、有空间深度。适合 AI 产品发布、创意提案、技术分享。\n\n## 基础提示词模板\n\n你是一位顶级空间计算与 SaaS 产品演示设计师。请生成 16:9 横版幻灯片，对标 Apple Vision OS / Linear / Cursor 官网的视觉调性。\n\n【核心视觉】\n- 背景：深空黑 #0A0A12 或珠光白 #F8F9FB（二选一），叠加微弱的径向极光（紫 #7B5BFF / 青 #00D4FF / 粉 #FF7AB6 -> 透明），强度控制在背景 15-25%，绝不抢主体。\n- 卡片：磨砂玻璃材质，rgba(255,255,255,0.08-0.16) + 1px 内白边 + 柔投影，圆角 24px。深色背景下玻璃略带霓虹反射；浅色背景下玻璃几乎透明、边缘见光。\n- 强调色：极光渐变只用于关键数字、按钮、装饰光带，正文一律保持高对比中性色（深色底用 #E8E8F0，浅色底用 #1A1A24）。\n- 装饰：可放 1 个抛光金属 / 透明亚克力 / 流体硅胶质感的 3D 物体作为视觉锚点，体积小而精，避免占满画面。\n\n【字体】\n- 标题：思源黑体 Heavy / 苹方 Heavy，字号巨大（占封面高度 12-18%）\n- 正文：思源黑体 Regular，1.4 行高\n- 数字：等宽数字字体（如 SF Mono / 思源等宽），方便对齐\n\n【封面页构图】\n左对齐或居中放标题，副标题降一档字号；同侧或对角放一个直径占画面 30-45% 的 3D 玻璃物体（球、胶囊、莫比乌斯环、流体）；背后有一道极光弧线穿过；底部 1 行简短 tagline。\n\n【内容页构图】\n2x2 或 3 列玻璃卡片网格（不要硬塞 6 个，3-4 个最舒服），每张卡片含 1 行短标题 + 2-3 行说明 + 1 个发光小图标；卡片之间留出 32px 以上间距；右上或左下点缀 1 处极光高光。\n\n【数据页构图】\n左 40% 文本（结论 + 1-2 行解释），右 60% 大型发光 3D 数据可视化（甜甜圈 / 胶囊进度条 / 悬浮数字塔）；图表色用极光渐变，背景保留克制。\n\n【禁止】\n- 别堆 Bento 网格塞 6+ 卡片\n- 别用 cliché 词汇式装饰：火焰、闪电、彩虹光晕\n- 别用低分辨率噪点或老式金属拉丝纹理\n- 不要把 3D 物体做成\"水晶球 + 莲花 + 小球\"那种俗气组合\n\n## 适用场景\nAI 产品发布、技术分享、创意提案、Spatial / VisionOS 主题、设计奖参赛级视觉。\n\nFile v1.1.0:styles/hand-sketch.md\n\n# 手绘草稿 / Hand Sketch\n\n## 风格ID\nhand-sketch\n\n## 风格名称\n手绘草稿 / Hand Sketch\n\n## 风格描述\n对标 Mike Rohde 的 Sketchnote、Visual Thinking 工作坊的白板手绘风：暖米色纸张 + 手写体标题 + 不规则方框/箭头 + 马克笔高亮色 + 简笔小图标。带温度、显思考过程、有设计冲动感。适合工作坊、产品早期 brainstorming、培训、产品设计 review。\n\n## 基础提示词模板\n\n你是一位 Sketchnote 与视觉思考大师，对标 Mike Rohde / Dave Gray / IDEO 工作坊白板的手绘记录风格。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：暖米白 #FBF7EE 或淡黄稿纸 #F8F1DA，叠加可见的纸张纹理 + 极淡 4mm 方格线（5% 透明度，类似无印良品本子）。\n- 主线：深炭灰 #2A2A2A（不是纯黑），所有线条手绘感 -- 略微抖动、不完全平直、端点稍粗。\n- 高亮色（马克笔）：荧光黄 #FFE066、天空蓝 #6FB7E0、柔和红 #E56B6F、嫩叶绿 #7BB661、香槟橙 #FFB572；每页只用 2-3 种。\n- 高亮模拟：用半透明色块覆盖文字（叠加效果，能看到底下文字），模仿马克笔涂抹，边缘有微微\"溢出\"。\n\n【字体】\n- 主标题：手写体（思源黑体 Casual / 江西拙楷 / Caveat / Architects Daughter），略大略斜，有手感\n- 正文：思源黑体 Regular 或同款手写字体的小尺寸版\n- 字号对比靠尺寸不靠字重；可有部分字被画了下划线或圈起来强调\n\n【封面页构图】\n中央放主标题（巨大手写体，可有装饰下划线或被圈起），上方或下方画一个手绘相框（不规则圆角矩形、四角带\"装订钉\"或\"胶带\"装饰）；旁边散布手绘装饰：箭头、星号、感叹号气泡、灯泡图标；底部一行小手写字签名。\n\n【内容页构图】\n白板会议感：每个要点用一个手绘方框 / 圆角矩形 / 云朵框包裹，方框之间用手绘箭头连接（曲线 + 端点小三角），表达逻辑流；要点旁配 1 个简笔图标（人头、灯泡、齿轮、对话气泡，全部手绘 monoline）；关键词用马克笔色块高亮（类似荧光笔涂抹效果）。\n\n【数据页构图】\n图表全部手绘风：柱状图的柱子是手绘矩形（非完全平直），饼图的扇形带手绘描边 + 内部斜线填充，折线图线条略抖且端点带小圆点；数字用大号手写体，可有\"圈出来\"或\"双下划线\"强调；旁边画一个简笔小手指 / 放大镜 / 对话气泡 标注解释。\n\n【禁止】\n- 严禁使用矢量平面图标，所有图形必须有手绘抖动感\n- 严禁完全平直的线条与完美几何形状\n- 严禁使用渐变、3D、阴影\n- 严禁字体过小过密；草稿风的灵魂是\"留白 + 大字\"\n\n## 适用场景\n工作坊、产品早期 brainstorming、设计冲刺、用户研究汇报、培训、产品 review、敏捷会议、创意提案早期阶段、教育课件。\n\nArchive v1.0.4: 23 files, 67582 bytes\n\nFiles: agents/openclaw.yaml (992b), generate_ppt.py (21098b), image_generator.py (17964b), install_as_skill.sh (3777b), README.en.md (8532b), README.md (7070b), render_template.py (6322b), requirements.txt (81b), SKILL.md (11185b), slides_plan.json (4895b), styles/clean-tech-blue.md (2862b), styles/dark-aurora.md (2903b), styles/editorial-mono.md (2828b), styles/gradient-glass.md (2576b), styles/hand-sketch.md (2948b), styles/japanese-wabi.md (2844b), styles/risograph.md (2972b), styles/swiss-grid.md (2776b), styles/vector-illustration.md (2724b), styles/y2k-chrome.md (2950b), template_analyzer.py (30593b), templates/viewer.html (9723b), _meta.json (133b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: gpt-image2-ppt\ndescription: Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Retro Vector) plus a template-clone mode that mimics any user-supplied .pptx; ships an HTML viewer 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.\n---\n\n# gpt-image2-ppt -- 用 gpt-image-2 生成 PPT\n\n把一份 markdown 大纲（或 `slides_plan.json`）+ 一种视觉风格，直接喂给 OpenAI 官方 Images API（`gpt-image-2`），逐页出图，最后拼成一个键盘可翻页的 HTML viewer + 16:9 .pptx。\n\n## 十种内置风格\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n> 风格选择原则：技术类首选 `dark-aurora` / `gradient-glass`，商务类首选 `clean-tech-blue` / `editorial-mono`，文化生活类首选 `japanese-wabi` / `vector-illustration`，潮文娱类首选 `risograph` / `y2k-chrome`，学术类首选 `swiss-grid`，工作坊与早期创意类首选 `hand-sketch`。\n\n## 模板克隆模式\n\n直接给 skill 一个 .pptx 模板，后续所有页都仿这个模板。\n\n```bash\n# 一行：自动渲染 + vision 抽风格 + 出图。本机有 LibreOffice 或 docker 镜像即可\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict\n```\n\n`--template-strict` 表示每页都把模板对应页作为 image reference 喂给 gpt-image-2，仿真度最高。\n\n### 模板渲染：本机不需要操作 PowerPoint\n\nskill 自带 `render_template.py`，把 .pptx 自动渲染成每页 PNG，存到 `<cwd>/template_renders/<stem>/page-NN.png`。\n\n后端按优先级自动挑：\n1. 本机 `libreoffice` / `soffice` 命令（最快）\n2. 本机 docker + `linuxserver/libreoffice` 镜像（首次拉 ~2.5GB）\n3. PDF -> PNG 走 `pymupdf`（已在 requirements）；没装就用 `pdf2image` + poppler\n\n如果两种 LibreOffice 都没有，会让用户手动从 PowerPoint/Keynote/WPS 导出每页 PNG，命名 `page-01.png` 起按字典序对应页码。\n\n跑 `generate_ppt.py --template-pptx ...` 时如果省略 `--template-images` 会自动调一次渲染；也可以手动先跑一次：\n\n```bash\npython3 render_template.py company-template.pptx\n# -> <cwd>/template_renders/company_template/page-01.png ... page-NN.png\n```\n\n### 仿模板的两层缓存\n\n| 资料 | 路径 | 用途 |\n| --- | --- | --- |\n| 模板每页 PNG | `<cwd>/template_renders/<stem>/page-NN.png` | LibreOffice 一次渲染长期复用 |\n| Vision 风格分析 | `<cwd>/template_cache/<sha256>.json` | gemini-3.1-pro-preview 一次分析长期复用 |\n| 生成产物 | `<cwd>/outputs/<timestamp>/` | 每次新跑都新目录 |\n\n三者都在调用者 cwd 下，与项目自然同进退；建议把 `template_renders/`、`template_cache/`、`outputs/` 加进项目的 `.gitignore`。\n\n**vision 模型**：模板分析走单独的 OpenAI 兼容多模态 chat completions（默认 `gemini-3.1-pro-preview`，配在 `.env` 的 `VISION_*` 里），与图片生成的 `gpt-image-2` 解耦。\n\n## 安装\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh\n# 编辑 ~/.claude/skills/gpt-image2-ppt-skills/.env 填入 API_KEY\n```\n\n## 必需的环境变量\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # 或任意 OpenAI 兼容中转站\nOPENAI_API_KEY=sk-...\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                     # low / medium / high / auto\n\n# 可选：模板克隆模式才需要（vision 分析独立 provider）。\n# 不内置默认 endpoint，请填你自己信任的服务，否则就别填这一组。\n# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\n# VISION_API_KEY=sk-...\n# VISION_MODEL_NAME=gemini-3.1-pro-preview\n```\n\n> **安全提示**：脚本只从 `<script_dir>/.env`、`~/.claude/skills/.../env`、`~/skills/.../env` 与显式 `GPT_IMAGE2_PPT_ENV` 加载凭据，**不会**向上递归读取项目目录里的 `.env`，避免误吃无关密钥。\n\n## 生成流程（内置风格）\n\n1. 用户给一份大纲 / 已有的 slides_plan.json\n2. Claude 读懂内容，按需要生成 / 校准 `slides_plan.json`：\n   ```json\n   {\n     \"title\": \"...\",\n     \"slides\": [\n       {\"slide_number\": 1, \"page_type\": \"cover\",   \"content\": \"标题 / 副标题\"},\n       {\"slide_number\": 2, \"page_type\": \"content\", \"content\": \"正文要点...\"},\n       {\"slide_number\": 3, \"page_type\": \"data\",    \"content\": \"数据 / 总结...\"}\n     ]\n   }\n   ```\n3. 选风格：从上面 10 套里挑一个，对应 `styles/<id>.md`\n4. 调脚本：\n   ```bash\n   python3 generate_ppt.py --plan slides_plan.json --style styles/editorial-mono.md\n   ```\n5. 产物在 `<cwd>/outputs/<timestamp>/`：\n   - `images/slide-XX.png` -- 每页 PNG（16:9，1536x1024）\n   - `index.html` -- HTML viewer，方向键翻页、空格自动播放、ESC 全屏\n   - `prompts.json` -- 每页用到的完整 prompt（便于复盘 / 二次微调）\n   - `<title>.pptx` -- 16:9 整页填充图片的 .pptx，分享 / 投影直接用\n\n## 生成流程（模板克隆）\n\n1. **拿到模板 .pptx**（用户提供 / 内部模板库 / 网络下载）\n2. **（可选）先单独渲染并人工挑选**----大模板（>15 页）建议先 `python3 render_template.py xxx.pptx`，再从 `template_renders/<stem>/` 里挑 8-12 张代表页复制到 `template_renders/<stem>_curated/`，供 vision 分析。页数越精，layout 命中越准\n3. **生成 slides_plan.json**：每页 `slide_number` / `page_type` (`cover` / `content` / `data` / 等) / `content`；想精准对位时加 `layout_id`，命名按 `layout-NN`（NN = 模板第 N 页 / 你期望对应的模板页编号）\n4. **跑 generate_ppt.py**：\n   ```bash\n   python3 generate_ppt.py \\\n     --plan slides_plan.json \\\n     --template-pptx xxx.pptx \\\n     --template-images template_renders/xxx_curated \\\n     --template-strict --slides 1\n   ```\n   先 `--slides 1` 出封面冒烟，效果 OK 再跑全量\n5. **告知用户产物路径**\n\n### 模板页面挑选 / 复用原则\n\n**核心原则：尽量做到 1 page : 1 layout**----同一份 deck 里每个 slide 用不同的模板页作 reference，观众会觉得每页都是新内容；如果同一个独特 layout 出现 2-3 次，观众下意识会想\"为什么又是这页\"。\n\nvision 分析时会给每个 layout 标 `reuse_friendly`：\n\n| reuse_friendly | 典型 layout | 多次使用的代价 |\n| --- | --- | --- |\n| `false`（不可复用，(!) 强警告） | 封面、3 个具名角色插画页、独特场景图（雪山/广播塔/复古收音机）、5 步骤 zigzag 各步独有图标、novelty 数据中央装置 | 视觉重复非常明显，观众会困惑 |\n| `true`（可复用，但仍建议错开，(i) 弱提示） | 纯文字、卡片网格、通用列表、章节小节标题 | 不致命，但平白浪费模板里的其它好版式 |\n\nClaude 在搭 plan 时的执行策略：\n1. **优先把模板里 N 个不同 layout 分配给 N 页 slide**（N 不够就在 SKILL 里看 reuse_friendly=true 的部分挑能复用的）\n2. **如果 plan 里某页内容结构非常相似（比如多个\"5 步骤流程\"），先尝试改写内容用不同 layout 表达**（4 步骤 + 5 步骤分别用不同流程页），而不是同一个 zigzag 用两次\n3. **冒烟跑完后，看 `Layout 复用检测` 那段输出**：(!) 必须改，(i) 看情况改；改 plan 里相应 slide 的 `layout_id` 即可\n4. **看完 cache JSON 选 layout**：`cat <cwd>/template_cache/<sha256>.json | jq '.layouts[] | {id, page_type, reuse_friendly, summary}'` 一眼看清模板有哪些版式可挑\n\n`generate_ppt.py` 在派发任务前会自动跑一次复用检测，把警告打到终端，不阻塞执行。\n\n## Skill 调用规范\n\n当用户说\"做一份 PPT\" / \"生成幻灯片\"时：\n\n1. **先问三件事**（不要直接动手）：\n   - 内容 / 页数 / 观众是谁？\n   - 风格偏好？按\"十种内置风格\"表的场景类目映射推荐 1-2 个；**或者用户上传自己的 .pptx 模板**（走 `--template-pptx`，自动渲染）\n   - 是否需要单页测试一张图先看效果（`--slides 1`）\n2. **生成 slides_plan.json**\n3. **跑 generate_ppt.py**，先 `--slides 1` 出封面冒烟，效果 OK 再跑全量\n4. **告知用户产物路径**，让他在浏览器打开 `outputs/<timestamp>/index.html` 或者 `<title>.pptx`\n\n## 仅生成部分页\n\n```bash\npython3 generate_ppt.py --plan my_plan.json --style styles/dark-aurora.md --slides 1,3,5\n```\n\n跑过的页有同名 PNG 时会自动跳过，方便逐页迭代。\n\n## 文件结构\n\n```\ngpt-image2-ppt-skills/\n|---- SKILL.md                # 本文件\n|---- README.md               # 项目说明\n|---- generate_ppt.py         # 主入口（CLI）\n|---- render_template.py      # PPTX -> 每页 PNG 的辅助脚本（CLI + library）\n|---- image_generator.py      # gpt-image-2 wrapper（支持 reference image）\n|---- template_analyzer.py    # PPT 模板剖析器（vision + 缓存）\n|---- slides_plan.json        # 示例 plan（10 页商业计划书）\n|---- styles/                 # 10 套内置风格\n|   |---- gradient-glass.md           dark-aurora.md\n|   |---- clean-tech-blue.md          risograph.md\n|   |---- vector-illustration.md      japanese-wabi.md\n|   |---- editorial-mono.md           swiss-grid.md\n|   |---- hand-sketch.md              y2k-chrome.md\n|---- templates/viewer.html   # HTML viewer 模板\n|---- install_as_skill.sh     # 一键安装到 ~/.claude/skills/\n|---- requirements.txt        # requests + python-dotenv + python-pptx + jsonschema + pymupdf\n\\---- .env.example\n```\n\n调用时产生的运行时目录都在 `<cwd>` 下：\n```\n<your-project>/\n|---- template_renders/<stem>/page-NN.png   # PPTX 渲染（render_template.py）\n|---- template_cache/<sha256>.json          # vision 风格分析缓存\n\\---- outputs/<timestamp>/                  # 每次生成产物\n```\n\n## License\n\nApache License 2.0.\n\nFile v1.0.4:README.md\n\n# gpt-image2-ppt-skills\n\n> 用 OpenAI 官方 `gpt-image-2` Images API 生成视觉风格强烈的 PPT 图片，自动产出可键盘翻页的 HTML viewer。Claude Code Skill / OpenClaw Skill。\n\n🌐 **English** > [README.en.md](./README.en.md)\n\n## ✨ 特性\n\n- 🎨 **十套精选风格**：渐变玻璃 / 蓝白科技 / 矢量插画 / 黑白杂志 / 深色霓虹 / Riso 印刷 / 日式侘寂 / 瑞士网格 / 手绘草稿 / Y2K 金属，每套都有 cover/content/data 三种构图规范\n- 🪄 **模板克隆模式**：传一个 .pptx，自动渲染 + vision 抽风格 + JSON Schema，新内容仿这个模板出图\n- 🤖 **官方 OpenAI Images API**：模型 `gpt-image-2`\n- 🔄 **OpenAI 兼容**：base_url 可换成任何兼容中转站\n- 🖼 **16:9 高清 PPT**：默认 1536x1024，`quality=high`\n- 🎮 **HTML viewer**：键盘翻页、空格自动播放、ESC 全屏、触摸滑动\n- 🧩 **逐页迭代**：`--slides 1,3,5` 只生成指定页，跑过的自动跳过\n\n## 🚀 一键安装\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh\n```\n\n安装后 skill 会被装到 `~/.claude/skills/gpt-image2-ppt-skills/`，Claude Code 重启后自动识别。\n\n## ⚙ 配置\n\n编辑 `~/.claude/skills/gpt-image2-ppt-skills/.env`：\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # 或任意 OpenAI 兼容中转站\nOPENAI_API_KEY=sk-...                     # 必需\nGPT_IMAGE_MODEL_NAME=gpt-image-2          # 默认 gpt-image-2\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n\n# 可选：仅模板克隆模式需要（vision 分析独立 provider）。\n# 不内置默认 endpoint，请填你自己信任的服务，否则就别启用 VISION_*。\n# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\n# VISION_API_KEY=sk-...\n# VISION_MODEL_NAME=gemini-3.1-pro-preview\n```\n\n> 安全：脚本只从 `<script_dir>/.env`、`~/.claude/skills/.../env`、`~/skills/.../env` 或显式 `GPT_IMAGE2_PPT_ENV` 加载，**不会**向上递归读取项目目录的 `.env`，避免误吃无关密钥。\n\n## 📝 用法\n\n### 1. 写一份 slides_plan.json\n\n```json\n{\n  \"title\": \"我的演示\",\n  \"slides\": [\n    {\"slide_number\": 1, \"page_type\": \"cover\",   \"content\": \"标题：xxx\\n副标题：yyy\"},\n    {\"slide_number\": 2, \"page_type\": \"content\", \"content\": \"三个要点...\"},\n    {\"slide_number\": 3, \"page_type\": \"data\",    \"content\": \"对比数据...\"}\n  ]\n}\n```\n\n`page_type` 三选一：`cover` / `content` / `data`，影响生图构图。\n\n### 2. 选一种风格生成\n\n```bash\n# 全量生成\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md\n\n# 只生成第 1 页（用来先验证 API 通）\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md --slides 1\n\n# 只重生第 3 和第 5 页\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md --slides 3,5\n```\n\n### 2.5 仿用户自己的 PPT 模板\n\n```bash\n# 一行：自动渲染 + vision 抽风格 + 出图。本机有 LibreOffice 或 docker 镜像即可\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict\n\n# 显式指定渲染目录（已经手动跑过 render_template.py 或自己导出过 PNG）\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-images ./template_renders/company-template \\\n  --template-strict\n\n# 强制重跑 vision（默认会读 template_cache/<sha256>.json 缓存）\npython3 generate_ppt.py ... --rebuild-template-cache\n```\n\n`--template-strict` 表示每页都把模板对应页作为 image reference 传给 gpt-image-2，仿真度最高。\n\n不传 `--template-images` 时会自动调 `render_template.py`，按优先级：本机 `libreoffice` -> 本机 docker 跑 `linuxserver/libreoffice` -> 报错让用户手工导出 PNG。PDF -> PNG 走 `pymupdf`（已在 requirements）。\n\n第一次跑 vision 会调 `gemini-3.1-pro-preview`（在 `.env` 的 `VISION_*` 里配），输出每页的 `summary` + `json_schema` 缓存到 `template_cache/`。后续同一模板秒匹配。\n\n#### 渲染中间产物落盘\n\n| 路径 | 内容 |\n| --- | --- |\n| `<cwd>/template_renders/<stem>/page-NN.png` | LibreOffice 渲染的每页 PNG |\n| `<cwd>/template_renders/<stem>/_source.pdf` | LibreOffice 中间产物（顺手保留以便人工排查） |\n| `<cwd>/template_cache/<sha256>.json` | vision 风格分析缓存 |\n| `<cwd>/outputs/<timestamp>/` | 每次生成产物 |\n\n把这三个目录加进项目 `.gitignore`。\n\n### 3. 看产物\n\n```\noutputs/20260422_153012/\n|---- images/\n|   |---- slide-01.png\n|   |---- slide-02.png\n|   \\---- ...\n|---- index.html       # 浏览器打开就能键盘翻页\n\\---- prompts.json     # 每页完整 prompt，方便复盘\n```\n\n## 🎨 十种内置风格\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n每个风格的完整 prompt 见 `styles/<id>.md`，按 cover / content / data 三种构图分别给出版式规范。\n\n## 🛠 在 Claude Code 里调用\n\n直接和 Claude 说：\n\n> 帮我用 gpt-image2-ppt 生成一份关于 [你的主题] 的 5 页 PPT，风格用 clean-tech-blue。\n\nClaude 会：\n1. 问你具体内容\n2. 写好 `slides_plan.json`\n3. 跑 `generate_ppt.py --slides 1` 出封面让你确认\n4. 跑全量并把 viewer 路径告诉你\n\n## 📦 依赖\n\n- Python 3.8+\n- `pip install -r requirements.txt` 装齐所有依赖（`requests` / `python-dotenv` / `python-pptx` / `jsonschema` / `pymupdf`）\n- 模板克隆模式额外需要：本机 `libreoffice` 或本机 docker + `linuxserver/libreoffice` 镜像\n\n## 🙏 致谢\n\n- [op7418/NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) -- 风格 prompts 与 viewer 模板的原始作者，本项目把图片后端从 Nano Banana Pro 换成了 OpenAI gpt-image-2。\n- [lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) -- Claude Code skill SKILL.md frontmatter 写法参考。\n\n## License\n\nApache License 2.0.\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn76gz2yb53tdjgpmb3ydjexax82g5yr\",\n  \"slug\": \"gpt-image2-ppt\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1776864602421\n}\n\nFile v1.0.4:README.en.md\n\n# gpt-image2-ppt-skills\n\n> Generate visually striking PPT slides with OpenAI's official `gpt-image-2` Images API; ships an instant keyboard-navigable HTML viewer + a 16:9 .pptx file. Works as a Claude Code Skill or an OpenClaw Skill.\n\n🌐 **中文** > [README.md](./README.md)\n\n## ✨ Highlights\n\n- 🎨 **10 curated styles**: Spatial Glass / Tech Blue / Retro Vector / Editorial Mono / Dark Aurora / Risograph / Japanese Wabi / Swiss Grid / Hand Sketch / Y2K Chrome -- each with cover/content/data composition rules\n- 🪄 **Template-clone mode**: feed any `.pptx`, the skill auto-renders + asks vision to extract style + JSON Schema, then produces new content in that template's look\n- 🤖 **Official OpenAI Images API**: model `gpt-image-2`\n- 🔄 **OpenAI-compatible**: point `base_url` at any compatible relay\n- 🖼 **16:9 high-res**: 1536x1024 default, `quality=high`\n- 🎮 **HTML viewer**: arrow-key navigation, space to autoplay, ESC fullscreen, swipe on touch\n- 🧩 **Per-slide iteration**: `--slides 1,3,5` regenerates only those pages, completed PNGs are skipped automatically\n\n## 🚀 One-line install\n\n### As a Claude Code skill\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh\n```\n\nAfter installation the skill lives at `~/.claude/skills/gpt-image2-ppt-skills/` and Claude Code picks it up after restart.\n\n### As an OpenClaw skill (via ClawHub)\n\n```bash\nclawhub install gpt-image2-ppt\n# installed to <cwd>/skills/gpt-image2-ppt/\n```\n\n## ⚙ Configuration\n\nEdit `~/.claude/skills/gpt-image2-ppt-skills/.env` (or `skills/gpt-image2-ppt/.env` for OpenClaw):\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # or any OpenAI-compatible relay\nOPENAI_API_KEY=sk-...                     # required\nGPT_IMAGE_MODEL_NAME=gpt-image-2          # default\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n\n# Optional: only required for template-clone mode (independent vision provider).\n# No default endpoint is shipped -- supply your own trusted endpoint, or leave\n# VISION_* unset to disable template-clone mode entirely.\n# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\n# VISION_API_KEY=sk-...\n# VISION_MODEL_NAME=gemini-3.1-pro-preview\n```\n\n> Security: the script only loads `.env` from `<script_dir>/.env`, `~/.claude/skills/.../env`, `~/skills/.../env`, or an explicit `GPT_IMAGE2_PPT_ENV` path. It does **not** walk parent directories, so it cannot accidentally pick up unrelated project secrets.\n\n## 📝 Usage\n\n### 1. Author a `slides_plan.json`\n\n```json\n{\n  \"title\": \"My deck\",\n  \"slides\": [\n    {\"slide_number\": 1, \"page_type\": \"cover\",   \"content\": \"Title: xxx\\nSubtitle: yyy\"},\n    {\"slide_number\": 2, \"page_type\": \"content\", \"content\": \"Three bullet points...\"},\n    {\"slide_number\": 3, \"page_type\": \"data\",    \"content\": \"Comparison numbers...\"}\n  ]\n}\n```\n\n`page_type` is one of `cover` / `content` / `data` -- drives the per-page composition.\n\n### 2. Pick a style and generate\n\n```bash\n# Full deck\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md\n\n# Smoke test slide 1 only (cheap API check)\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md --slides 1\n\n# Re-render only slides 3 and 5\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md --slides 3,5\n```\n\n### 2.5 Clone the user's own .pptx template\n\n```bash\n# One-liner: auto-render + vision-analyse + image generation.\n# Needs LibreOffice locally OR docker with linuxserver/libreoffice\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict\n\n# Explicit images dir (when you ran render_template.py manually or curated PNGs yourself)\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-images ./template_renders/company-template \\\n  --template-strict\n\n# Force vision re-analysis (default reads template_cache/<sha256>.json)\npython3 generate_ppt.py ... --rebuild-template-cache\n```\n\n`--template-strict` passes the matching template page as an image reference to gpt-image-2 -> highest fidelity.\n\nIf `--template-images` is omitted the skill auto-invokes `render_template.py` with this priority: native `libreoffice` -> `docker run linuxserver/libreoffice` -> instructive error asking the user to export PNGs manually. PDF->PNG goes through `pymupdf` (already in requirements).\n\nThe first vision pass calls `gemini-3.1-pro-preview` (configured in `.env` `VISION_*`), produces per-page `summary` + `json_schema`, caches to `template_cache/`. Subsequent runs against the same template are a cache hit.\n\n#### Where intermediates land\n\n| Path | Content |\n| --- | --- |\n| `<cwd>/template_renders/<stem>/page-NN.png` | LibreOffice-rendered PNGs |\n| `<cwd>/template_renders/<stem>/_source.pdf` | LibreOffice intermediate (kept for inspection) |\n| `<cwd>/template_cache/<sha256>.json` | vision style profile cache |\n| `<cwd>/outputs/<timestamp>/` | per-run outputs |\n\nAdd these three directories to your project's `.gitignore`.\n\n#### Layout reuse policy\n\nThe principle: **1 page : 1 layout, by default.** Vision tags every layout with `reuse_friendly`:\n\n| `reuse_friendly` | Typical layouts | Cost of repeating |\n| --- | --- | --- |\n| `false` ((!) strong warning) | Cover / character illustrations / unique scene art / multi-step flows with per-step icons / novelty data centerpieces | Visually obvious repetition, audience confusion |\n| `true` ((i) soft hint) | Plain text / card grids / generic lists / section headers | Tolerable, but wastes the template's other distinctive layouts |\n\n`generate_ppt.py` runs a reuse check before dispatching image generation jobs and prints suggested alternatives. The check never blocks execution.\n\n### 3. Inspect the output\n\n```\noutputs/20260422_153012/\n|---- images/\n|   |---- slide-01.png\n|   |---- slide-02.png\n|   \\---- ...\n|---- index.html       # open in browser -> arrow-key navigation\n|---- prompts.json     # full prompts used for each slide (for replay & tuning)\n\\---- <title>.pptx     # 16:9 deck with images filling each slide\n```\n\n## 🎨 The 10 built-in styles\n\n| Style ID | One-liner | Use cases |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI product launches, technical talks, creative pitches |\n| `clean-tech-blue` | Stripe / Linear-grade blue & white | Investor decks, business plans, corporate strategy |\n| `vector-illustration` | Retro vector + black outline | Education, brand storytelling, community sharing |\n| `editorial-mono` | Kinfolk / Monocle editorial design | Brand reveals, cultural interviews, book talks |\n| `dark-aurora` | Linear / Vercel dark neon | AI products, dev tools, technical talks |\n| `risograph` | Riso 2-spot-color print + halftone | Creative studios, indie zines, design agencies |\n| `japanese-wabi` | Muji / Hara Kenya wabi-sabi | Tea ceremony, lifestyle brands, luxury, cultural lectures |\n| `swiss-grid` | Bauhaus / Vignelli international style grid | Academic reports, museum exhibits, serious dashboards |\n| `hand-sketch` | Sketchnote / whiteboard | Workshops, product brainstorming, training |\n| `y2k-chrome` | Y2K liquid chrome + butterfly stickers | Streetwear, entertainment, brand collabs, Gen-Z marketing |\n\nEach style file is at `styles/<id>.md` and includes cover / content / data composition rules.\n\n## 🛠 Use it inside Claude Code (or OpenClaw)\n\nJust say:\n\n> Make me a 5-slide deck about [topic] using gpt-image2-ppt, style = clean-tech-blue.\n\nThe agent will:\n1. Ask clarifying questions about content, audience, page count\n2. Author `slides_plan.json`\n3. Run `generate_ppt.py --slides 1` for a cover smoke test\n4. After approval, generate the full deck and hand back the viewer + .pptx paths\n\n## 📦 Dependencies\n\n- Python 3.8+\n- `pip install -r requirements.txt` covers everything (`requests` / `python-dotenv` / `python-pptx` / `jsonschema` / `pymupdf`)\n- Template-clone mode additionally needs: native `libreoffice` OR docker with `linuxserver/libreoffice`\n\n## 🙏 Acknowledgements\n\n- [op7418/NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) -- original style prompts + viewer; this project swaps the image backend from Nano Banana Pro to OpenAI gpt-image-2 and rewrites all 3 inherited styles + adds 7 new ones.\n- [lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) -- reference for Claude Code skill SKILL.md frontmatter.\n\n## License\n\nApache License 2.0.\n\nFile v1.0.4:styles/clean-tech-blue.md\n\n# 清爽科技蓝 / Stripe-grade Blue\n\n## 风格ID\nclean-tech-blue\n\n## 风格名称\n清爽科技蓝 / Stripe-grade Blue\n\n## 风格描述\n对标 Stripe / Linear / Notion 官网与 Pitch 路演 deck 的高级蓝白风：纯白背景 + 克制蓝调 + 大留白 + 精致网格。比传统 McKinsey 蓝更现代、更产品化，比 SaaS landing 更适合长篇内容。适合融资路演、商业计划书、企业战略汇报。\n\n## 基础提示词模板\n\n你是一位顶级商业演示设计师，对标 Stripe / Linear / Notion 官网与 a16z / Sequoia 路演 deck。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：纯白 #FFFFFF，绝不使用深色背景；可在大块区域用极淡冰蓝 #F4F7FF 区分。\n- 主蓝：Stripe 紫蓝 #635BFF 或皇家蓝 #1E40AF，作为标题、强调数字、品牌色块。\n- 次蓝：浅蓝 #93C5FD 用于柔性强调；冰蓝 #E0EAFF 用于卡片背景。\n- 中性：标题深墨 #0F172A、正文 #334155、辅助 #64748B。\n- 卡片：超浅冰蓝底 + 1px 蓝灰描边 #E2E8F0 + 极淡阴影；圆角 12px，朴素克制，绝不带光晕。\n- 装饰：背景可极淡的 8% opacity 蓝色网格点阵或细线（几乎不可见），仅用于呼吸感；偶尔在角落放一个浅蓝色磨砂玻璃几何体（透明度 25-35%），保持与白底自然融合。\n\n【字体】\n- 标题：思源黑体 Bold / 苹方 Bold（粗壮、不夸张）\n- 正文：思源黑体 Regular（行高 1.5-1.6）\n- 数字：思源黑体 Heavy 或等宽数字字体，强调时字号 4-6x于正文\n\n【封面页构图】\n左 60% 放主标题（深墨黑超大粗体，2-3 行内）+ 下方副标题（中蓝标准字重）+ 底部 1 行 tagline；右 40% 放一个浅蓝色简洁 3D 几何体（棱柱、球、抽象 SaaS 图形），透明度 30%，绝不喧宾夺主。顶部或底部一条 4px 高的蓝色渐变细带作为品牌锚点。\n\n【内容页构图】\n顶部留 1 行小标题 + 1 条蓝色细分隔线；主体 3 列卡片或 2 列文字+图表布局；每张卡片白底浅蓝描边、左侧 3px 实心蓝色边作为 accent；要点用蓝色实心圆点 / 短横线，绝不用 emoji。整页留白占 45% 以上。\n\n【数据页构图】\n关键数字超大（占页面高度 25-30%）深蓝粗体居中或左对齐，数字下方一行小字解释含义；旁边或下方放简洁柱状图 / 折线图 / 环形图，配色用蓝色 5 阶渐变（#1E40AF -> #93C5FD），对照组用浅灰 #E2E8F0。每个数据点必须有清晰标签，绝不裸图。\n\n【禁止】\n- 别用霓虹色、赛博朋克、深黑背景、彩虹渐变\n- 别用立体阴影、玻璃拟态过度装饰\n- 别堆图标，每页图标数量 ≤ 4 个\n- 字号对比要明确，不要全篇 18pt 平铺\n\n## 适用场景\n融资路演、商业计划书、企业战略汇报、SaaS 产品发布、董事会汇报、咨询报告。\n\nFile v1.0.4:styles/dark-aurora.md\n\n# 深色霓虹 / Dark Aurora\n\n## 风格ID\ndark-aurora\n\n## 风格名称\n深色霓虹 / Dark Aurora\n\n## 风格描述\n对标 Linear / Vercel / Cursor / Arc Browser 官网的高级深色风：深空底 + 极光弧光 + 半透明玻璃卡片 + 极细发光描边。区别于俗气的\"赛博朋克\"，强调克制与高级。适合 AI 产品、开发者工具、技术分享、新一代 SaaS。\n\n## 基础提示词模板\n\n你是一位顶级深色模式 UI 设计师，对标 Linear / Vercel / Cursor / Arc Browser 的官网视觉。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：深空黑 #0A0A0F，叠加极淡的径向渐变（中心稍亮 #14142A -> 边缘 #06060C），整体保持冷调。\n- 极光：背景隐藏 1-2 道弧形或斜向光带，颜色 #7B5BFF（紫）/ #00D4FF（青）/ #FF7AB6（粉）任选，强度 25-40%，模糊扩散，作为氛围而非主体。\n- 卡片：半透明玻璃 rgba(255,255,255,0.05-0.10) + 1px 顶部高光 rgba(255,255,255,0.15) + 极淡内阴影；圆角 16px。\n- 文字色：白 #FFFFFF（标题）/ 暖灰 #C8C8D8（正文）/ 灰 #6B6B7E（辅助）。\n- 强调：仅在关键数字、按钮、装饰光带使用极光色。\n- 装饰：可有极细 1px 发光描边几何（圆环、网格、星图），仅作背景气氛；可点缀 1-2 个微小光点（\"星尘\"），位置随机但克制。\n\n【字体】\n- 标题：思源黑体 SemiBold / Inter Display SemiBold，字号大但不溢出\n- 正文：思源黑体 Regular（光照下白字略减字重，避免刺眼）\n- 数字：等宽数字字体（如 JetBrains Mono），强调时配 1 道下方 1px 极光下划线\n\n【封面页构图】\n居中或左对齐主标题，下方副标题降一档；标题正后方有一道斜向极光光带横穿（紫->青渐变）；底部一行品牌信息或日期，配 1 个直径 6px 的发光小圆点作为锚点。整页极少元素，氛围感优先。\n\n【内容页构图】\n2x2 或 3 列玻璃卡片网格，每张卡片：顶部一行短标题 + 中间 2-3 行说明 + 左上角 1 个发光线性图标（描边 1.5px，颜色取自极光）；卡片之间间距 24px；右上角或左下角点缀一处极光光晕（直径占画面 15-25%，模糊扩散）。\n\n【数据页构图】\n关键数字超大居中或左对齐（白色），数字下方 1 行说明 + accent 色短下划线；右侧或下方一个发光环形图 / 折线图（线宽 2-3px，端点带光晕）；图例用极小字号 + 发光圆点。整体保留大块深色留白。\n\n【禁止】\n- 严禁使用刺眼正红、正绿、纯蓝；霓虹色只用极光色板\n- 严禁深色背景 + 高饱和卡通图标\n- 严禁背景完全黑（#000000），必须 #0A0A0F 起，留呼吸感\n- 别堆光晕，每页 ≤ 2 处发光区\n\n## 适用场景\nAI 产品发布、开发者工具、技术分享、深色主题 SaaS、新世代品牌发布、Cyber 但克制的演示。\n\nFile v1.0.4:styles/editorial-mono.md\n\n# 黑白杂志 / Editorial Mono\n\n## 风格ID\neditorial-mono\n\n## 风格名称\n黑白杂志 / Editorial Mono\n\n## 风格描述\n对标《Kinfolk》《Monocle》《纽约时报》周末版的杂志编辑设计：黑 + 白 + 一种克制 accent，巨大衬线标题，不对称版式，奢侈的留白，引文与脚注并存。适合品牌发布、读书分享、文化访谈、长文摘要。\n\n## 基础提示词模板\n\n你是一位顶级杂志艺术总监，对标 Kinfolk / Monocle / The New Yorker / 纽约时报周末版的版面设计。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：暖白 #FAF8F2 或墨黑 #1A1A1A（每份 deck 选一种，不混用）；整页见微弱纸张颗粒。\n- 文字：暖白底用炭黑 #0F0F0F，墨黑底用米白 #F4F1E8。\n- ACCENT（每份 deck 只允许一种 accent 色）：编辑红 #C8102E、橄榄绿 #5D6D3F、深芥末 #B8860B、午夜蓝 #2A3D5F；只用于：1 个引号、1 行小标题、1 条细分隔线、1 个角注。\n\n【字体】\n- 主标题：思源宋体 Heavy / Noto Serif TC Black，字号巨大（占封面高度 18-25%），字距 -2%，可换行 2-3 行。\n- 副标题/小标题：思源黑体 Light + 全大写 + 字距 +20%（spacing letter）。\n- 正文：思源宋体 Regular，行高 1.65，两端对齐或左对齐，绝不居中。\n- 引文：思源宋体 Italic，超大字号，挂角引号 \"\" 或 「」。\n\n【封面页构图】\n不对称布局：主标题占左上 60% 区域（贴左边 column），下方一行小标题（全大写、accent 色）；右侧或下方留出大块留白，仅放一个细长 accent 色边线 + 一行编号 / 期号 / 日期（如 \"01 / 普通人指南 / Apr 2026\"）。底部最右角放一个小尺寸图片或几何符号作为视觉钩子。\n\n【内容页构图】\n经典杂志双栏：左 1/3 column 放小标题（全大写 + 上方一条 1px 短线）+ accent 色编号；右 2/3 放正文，首字母用大号 drop cap（4 行高），段落之间用空行隔开。或采用\"引文页\"变体：整页中央一句巨大斜体引文 + 下方小字署名。每页只承载 1 个核心观点，绝不堆砌。\n\n【数据页构图】\n极简：1 个超大数字（占画面高度 40%）放左侧或居中，下方 1 行解释 + 1 行来源；旁边放一段 80-120 字的散文式解读（不要点状列表）。如果要图表，必须用最简的细线折线图或单色横条，无渐变、无填色面积、无图例。\n\n【禁止】\n- 严禁使用任何 emoji、卡通图标、3D 元素、渐变、阴影\n- 严禁使用 sans-serif 作为主标题\n- 严禁使用 2 种以上 accent 色\n- 严禁居中所有文字、严禁卡片化布局\n\n## 适用场景\n品牌发布、读书分享会、文化访谈、品牌故事、人物专访、生活方式杂志型 PPT、艺术展陈、慢公司汇报。\n\nFile v1.0.4:styles/gradient-glass.md\n\n# 渐变玻璃 / Spatial Glass\n\n## 风格ID\ngradient-glass\n\n## 风格名称\n渐变玻璃 / Spatial Glass\n\n## 风格描述\n对标 Apple Vision OS 与现代 SaaS 产品的玻璃质感设计：极光渐变 + 磨砂玻璃卡片 + 柔和 3D 物体，氛围高级、洁净、有空间深度。适合 AI 产品发布、创意提案、技术分享。\n\n## 基础提示词模板\n\n你是一位顶级空间计算与 SaaS 产品演示设计师。请生成 16:9 横版幻灯片，对标 Apple Vision OS / Linear / Cursor 官网的视觉调性。\n\n【核心视觉】\n- 背景：深空黑 #0A0A12 或珠光白 #F8F9FB（二选一），叠加微弱的径向极光（紫 #7B5BFF / 青 #00D4FF / 粉 #FF7AB6 -> 透明），强度控制在背景 15-25%，绝不抢主体。\n- 卡片：磨砂玻璃材质，rgba(255,255,255,0.08-0.16) + 1px 内白边 + 柔投影，圆角 24px。深色背景下玻璃略带霓虹反射；浅色背景下玻璃几乎透明、边缘见光。\n- 强调色：极光渐变只用于关键数字、按钮、装饰光带，正文一律保持高对比中性色（深色底用 #E8E8F0，浅色底用 #1A1A24）。\n- 装饰：可放 1 个抛光金属 / 透明亚克力 / 流体硅胶质感的 3D 物体作为视觉锚点，体积小而精，避免占满画面。\n\n【字体】\n- 标题：思源黑体 Heavy / 苹方 Heavy，字号巨大（占封面高度 12-18%）\n- 正文：思源黑体 Regular，1.4 行高\n- 数字：等宽数字字体（如 SF Mono / 思源等宽），方便对齐\n\n【封面页构图】\n左对齐或居中放标题，副标题降一档字号；同侧或对角放一个直径占画面 30-45% 的 3D 玻璃物体（球、胶囊、莫比乌斯环、流体）；背后有一道极光弧线穿过；底部 1 行简短 tagline。\n\n【内容页构图】\n2x2 或 3 列玻璃卡片网格（不要硬塞 6 个，3-4 个最舒服），每张卡片含 1 行短标题 + 2-3 行说明 + 1 个发光小图标；卡片之间留出 32px 以上间距；右上或左下点缀 1 处极光高光。\n\n【数据页构图】\n左 40% 文本（结论 + 1-2 行解释），右 60% 大型发光 3D 数据可视化（甜甜圈 / 胶囊进度条 / 悬浮数字塔）；图表色用极光渐变，背景保留克制。\n\n【禁止】\n- 别堆 Bento 网格塞 6+ 卡片\n- 别用 cliché 词汇式装饰：火焰、闪电、彩虹光晕\n- 别用低分辨率噪点或老式金属拉丝纹理\n- 不要把 3D 物体做成\"水晶球 + 莲花 + 小球\"那种俗气组合\n\n## 适用场景\nAI 产品发布、技术分享、创意提案、Spatial / VisionOS 主题、设计奖参赛级视觉。\n\nFile v1.0.4:styles/hand-sketch.md\n\n# 手绘草稿 / Hand Sketch\n\n## 风格ID\nhand-sketch\n\n## 风格名称\n手绘草稿 / Hand Sketch\n\n## 风格描述\n对标 Mike Rohde 的 Sketchnote、Visual Thinking 工作坊的白板手绘风：暖米色纸张 + 手写体标题 + 不规则方框/箭头 + 马克笔高亮色 + 简笔小图标。带温度、显思考过程、有设计冲动感。适合工作坊、产品早期 brainstorming、培训、产品设计 review。\n\n## 基础提示词模板\n\n你是一位 Sketchnote 与视觉思考大师，对标 Mike Rohde / Dave Gray / IDEO 工作坊白板的手绘记录风格。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：暖米白 #FBF7EE 或淡黄稿纸 #F8F1DA，叠加可见的纸张纹理 + 极淡 4mm 方格线（5% 透明度，类似无印良品本子）。\n- 主线：深炭灰 #2A2A2A（不是纯黑），所有线条手绘感 -- 略微抖动、不完全平直、端点稍粗。\n- 高亮色（马克笔）：荧光黄 #FFE066、天空蓝 #6FB7E0、柔和红 #E56B6F、嫩叶绿 #7BB661、香槟橙 #FFB572；每页只用 2-3 种。\n- 高亮模拟：用半透明色块覆盖文字（叠加效果，能看到底下文字），模仿马克笔涂抹，边缘有微微\"溢出\"。\n\n【字体】\n- 主标题：手写体（思源黑体 Casual / 江西拙楷 / Caveat / Architects Daughter），略大略斜，有手感\n- 正文：思源黑体 Regular 或同款手写字体的小尺寸版\n- 字号对比靠尺寸不靠字重；可有部分字被画了下划线或圈起来强调\n\n【封面页构图】\n中央放主标题（巨大手写体，可有装饰下划线或被圈起），上方或下方画一个手绘相框（不规则圆角矩形、四角带\"装订钉\"或\"胶带\"装饰）；旁边散布手绘装饰：箭头、星号、感叹号气泡、灯泡图标；底部一行小手写字签名。\n\n【内容页构图】\n白板会议感：每个要点用一个手绘方框 / 圆角矩形 / 云朵框包裹，方框之间用手绘箭头连接（曲线 + 端点小三角），表达逻辑流；要点旁配 1 个简笔图标（人头、灯泡、齿轮、对话气泡，全部手绘 monoline）；关键词用马克笔色块高亮（类似荧光笔涂抹效果）。\n\n【数据页构图】\n图表全部手绘风：柱状图的柱子是手绘矩形（非完全平直），饼图的扇形带手绘描边 + 内部斜线填充，折线图线条略抖且端点带小圆点；数字用大号手写体，可有\"圈出来\"或\"双下划线\"强调；旁边画一个简笔小手指 / 放大镜 / 对话气泡 标注解释。\n\n【禁止】\n- 严禁使用矢量平面图标，所有图形必须有手绘抖动感\n- 严禁完全平直的线条与完美几何形状\n- 严禁使用渐变、3D、阴影\n- 严禁字体过小过密；草稿风的灵魂是\"留白 + 大字\"\n\n## 适用场景\n工作坊、产品早期 brainstorming、设计冲刺、用户研究汇报、培训、产品 review、敏捷会议、创意提案早期阶段、教育课件。\n\nFile v1.0.4:styles/japanese-wabi.md\n\n# 日式侘寂 / Japanese Wabi\n\n## 风格ID\njapanese-wabi\n\n## 风格名称\n日式侘寂 / Japanese Wabi\n\n## 风格描述\n对标无印良品、原研哉、深泽直人、佐藤大的日式极简：米白宣纸底 + 墨黑文字 + 单一朱红或抹茶绿点缀 + 巨大留白 + 不对称构图。沉静、有禅意、有呼吸感。适合茶道、生活方式品牌、文化讲座、奢侈品、慢公司分享。\n\n## 基础提示词模板\n\n你是一位日式平面设计大师，对标无印良品、原研哉、佐藤大、深泽直人的设计美学。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：宣纸米白 #F5F1E8 或月牙白 #F2EFE6，整页有极淡纸纤维纹理与一处可见的天然斑点 / 折痕（侘寂的\"不完美\"）。\n- 文字：墨黑 #1A1A1A（深邃但非纯黑）。\n- ACCENT（整份 deck 只用一种）：朱红 #C8201E（朱印感）或抹茶绿 #4A6B3A 或藏青 #1B3A5C；只用于：1 处印章、1 道短线、1 个圆点。\n- 留白：每页留白占 60-70%，绝不填满。\n- 装饰：可有 1 道墨笔抽象笔触（书法感，单色，不规则），位置在角落或边缘，不喧宾夺主；或一个红色印章方块（带轻微残缺与油墨不均，模拟手盖）。\n\n【字体】\n- 主标题：思源宋体 Heavy / Noto Serif JP Black，可竖排，字距宽松\n- 副标题：思源黑体 Light，字距 +30%（spacing letter）\n- 正文：思源宋体 Regular 或思源黑体 Light，行高 1.8，章节之间空行充裕\n- 数字：思源宋体 Regular，可超大但不抢主标题\n\n【封面页构图】\n极简至极：主标题靠右侧 1/3 column 排版（可竖排），副标题在主标题下方紧贴一行；左侧 2/3 几乎全空，只在中下位置放 1 道墨笔抽象笔触或一个朱印小章；底部右侧一行细小日期 / 编号。\n\n【内容页构图】\n不对称双栏：左 column（占 1/3）放一个章节序号 + 一行小标题 + 一处 accent 色短线；右 column（占 2/3）放正文段落，段落短，每段 2-3 句，行间充裕；可有 1 个简笔几何插图（墨色细线，非常简化，如圆、方、波纹）作为视觉锚点。\n\n【数据页构图】\n中央放一个超大数字（思源宋体 Heavy），数字下方一行小字（含数字单位 + 来源），旁边竖排一句富有诗意的解读（5-10 字）；图表必须极简：1 条折线、1 个空心圆环、1 行横向数字 -- 全部 1px 墨线，无填色。\n\n【禁止】\n- 严禁色块大面积填充\n- 严禁使用 2 种以上 accent 色\n- 严禁卡片、阴影、3D、渐变\n- 严禁堆叠多个图标，每页 ≤ 1 个装饰\n- 严禁居中所有元素，不对称才有侘寂\n\n## 适用场景\n茶道、香道、生活方式品牌、奢侈品、文化讲座、文学分享、慢公司汇报、心理咨询、独立咖啡店、和食料理。\n\nFile v1.0.4:styles/risograph.md\n\n# Riso 印刷 / Risograph\n\n## 风格ID\nrisograph\n\n## 风格名称\nRiso 印刷 / Risograph\n\n## 风格描述\n对标日本 / 欧洲独立设计师工作室的 Risograph 双套色印刷美学：荧光粉 + 钴蓝（或其他 2 色组合）+ 网点纹理 + 轻微套印偏移 + 米白纸感。粗粝、有手感、有 zine 气质。适合创意工作室、文创品牌、独立播客、活动海报式 PPT。\n\n## 基础提示词模板\n\n你是一位独立 zine / Risograph 印刷工作室的视觉设计师，对标 Hato Press / Tokyo Risograph 工作室的双套色印刷美学。请生成 16:9 横版幻灯片，模拟 Riso 双套色印刷质感。\n\n【核心视觉】\n- 背景：米白 #F4EDD9 或牛皮纸黄 #E5D5A8，必须有清晰可见的纸张颗粒纹理与轻微纤维感。\n- 油墨（每份 deck 只允许 2-3 色组合，常用：荧光粉 #FF48B0 + 钴蓝 #2A47B0；或芥末黄 #E2B441 + 翠绿 #00A878；或荧光橙 #FF6B35 + 海军蓝 #1B3A5C）。\n- 套印效果：色块边缘必须模拟 Riso 套印偏移（misregistration），相邻 2 色重叠区域显示混色（粉+蓝=深紫等），偏移 2-4px。\n- 网点纹理（halftone）：所有色块都不是纯实色，而是粗网点（线数 25-45 lpi）渐变填充，远看实色近看见点。\n- \"黑色\"：避免纯黑，用深海军蓝 #1A2A4A 或暖黑 #2A2118 替代。\n\n【字体】\n- 主标题：超粗 display 体（思源黑体 Heavy / Druk 风格），可压扁拉伸\n- 副标题：手写或 wood-type 复古衬线\n- 正文：思源黑体 Regular 或 Avant Garde 风格几何无衬线，字距偏紧\n\n【封面页构图】\n海报式：超大主标题占画面 50%+，可 2 行错位排版（一行荧光粉、一行钴蓝），下方副标题在一个粗描边色块里；背景叠加 1-2 个大色块几何（圆、半圆、不规则形），有套印偏移；角落点缀小的网点星形、波浪线、对话气泡。\n\n【内容页构图】\nzine spread 风：内容分成 3-4 个色块区域，区域形状不规则（圆角矩形、不对称六边形），每个区域填一种网点色，文字反白或叠在色块上；要点之间用粗手绘箭头或感叹号点缀；可在某处放一个 illustration 元素（手、眼睛、对话气泡，全部 monoline + halftone 填充）。\n\n【数据页构图】\n数据部分用 zine 海报风：数字超大、粗、错位排版（数字本身有套印偏移效果）；旁边放粗描边的几何图表（实心圆 + 网点扇形 = 饼图，粗矩形 = 柱图），所有图形带 halftone；底部用一行 wood-type 大字给结论。\n\n【禁止】\n- 严禁使用 3D、玻璃、渐变（除了 halftone 网点渐变）\n- 严禁使用纯白背景或纯黑文字\n- 严禁使用现代极简平面图标，要用复古手感图形\n- 别让 2 种色之间没有套印偏移与混色，要有\"印刷感\"\n\n## 适用场景\n创意工作室介绍、文创品牌、独立播客、艺术展览、市集海报、Zine 文化、复古活动 PPT。\n\nFile v1.0.4:styles/swiss-grid.md\n\n# 瑞士国际主义 / Swiss Grid\n\n## 风格ID\nswiss-grid\n\n## 风格名称\n瑞士国际主义 / Swiss Grid\n\n## 风格描述\n对标 Müller-Brockmann、Massimo Vignelli 与 1960s 瑞士平面设计学派：极严谨的模块化网格 + Helvetica 风字体 + 三原色色块 + 大量留白 + 清晰对齐。理性、克制、有学术权威感。适合学术报告、设计周演讲、严肃数据汇报、博物馆展陈。\n\n## 基础提示词模板\n\n你是一位国际主义平面设计师，对标 Josef Müller-Brockmann、Massimo Vignelli、Wim Crouwel 的瑞士学派。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：纯白 #FFFFFF（默认）；或在封面 / 章节页用整块色 -- Bauhaus 红 #E10600、深蓝 #003DA5、镉黄 #FFE600（每页只允许一种纯色）。\n- 文字：纯黑 #000000；色块上反白 #FFFFFF。\n- 网格：12 列严格基线网格，所有元素必须对齐到网格；元素四角全部直角，绝无圆角、阴影、渐变。\n- 装饰：唯一允许的\"装饰\"是色块（矩形、正圆、半圆），用作视觉重量平衡，不带任何效果。\n\n【字体】\n- 全部使用思源黑体 / 苹方（中文）+ Inter / Helvetica Neue（英文混排）\n- 主标题：Bold/Heavy，字号巨大；行距紧凑（行高 1.0-1.1）\n- 正文：Regular，左对齐，绝不两端对齐\n- 字距：保持默认，绝不字间放宽\n\n【封面页构图】\n极致经典构图：主标题左下对齐，超大粗体，可 2-4 行；右上 1/3 区域放一个色块（实心矩形或正圆，单色，三原色之一）；标题上方一条 2px 黑色细线 + 一行小型副标题（小写、左对齐）；底部细小一行品牌 / 编号 / 日期。\n\n【内容页构图】\n12 列网格严格执行：标题占 12 列宽（左上）+ 下方 4px 黑色横线；主体内容用 4/8/12 col 宽度的文本块组合，要点用纯小圆点或纯短横线；可在某 col 嵌入纯色色块作为重量平衡。整页元素 ≤ 6 个，留白 ≥ 50%。\n\n【数据页构图】\n数据用 typography 表达：超大数字（占画面 30%+）左对齐，下方一行说明 + 一条横线；图表必须是最简形式 -- 实心横条（单色，对齐网格）、纯圆环（无渐变无标签外围）、表格（无装饰边框，只用 typography 对齐）；颜色只用三原色 + 黑灰白。\n\n【禁止】\n- 严禁圆角、阴影、渐变、3D、霓虹、玻璃效果\n- 严禁手写体、衬线体、装饰字体\n- 严禁居中正文（除非整页只有 1 个元素）\n- 严禁堆叠多色，每页色块 ≤ 1 种 + 黑白\n- 严禁使用 emoji 和卡通图标\n\n## 适用场景\n学术报告、设计周演讲、博物馆展陈、严肃数据汇报、政府白皮书、城市规划、建筑事务所、艺术馆策展。\n\nArchive v1.0.3: 23 files, 67771 bytes\n\nFiles: agents/openclaw.yaml (994b), generate_ppt.py (21115b), image_generator.py (17985b), install_as_skill.sh (3784b), README.en.md (8579b), README.md (7108b), render_template.py (6329b), requirements.txt (81b), SKILL.md (11185b), slides_plan.json (4895b), styles/clean-tech-blue.md (2875b), styles/dark-aurora.md (2921b), styles/editorial-mono.md (2835b), styles/gradient-glass.md (2593b), styles/hand-sketch.md (2952b), styles/japanese-wabi.md (2852b), styles/risograph.md (2983b), styles/swiss-grid.md (2783b), styles/vector-illustration.md (2733b), styles/y2k-chrome.md (2960b), template_analyzer.py (30655b), templates/viewer.html (9723b), _meta.json (133b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: gpt-image2-ppt\ndescription: Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Retro Vector) plus a template-clone mode that mimics any user-supplied .pptx; ships an HTML viewer 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.\n---\n\n# gpt-image2-ppt -- 用 gpt-image-2 生成 PPT\n\n把一份 markdown 大纲（或 `slides_plan.json`）+ 一种视觉风格，直接喂给 OpenAI 官方 Images API（`gpt-image-2`），逐页出图，最后拼成一个键盘可翻页的 HTML viewer + 16:9 .pptx。\n\n## 十种内置风格\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n> 风格选择原则：技术类首选 `dark-aurora` / `gradient-glass`，商务类首选 `clean-tech-blue` / `editorial-mono`，文化生活类首选 `japanese-wabi` / `vector-illustration`，潮文娱类首选 `risograph` / `y2k-chrome`，学术类首选 `swiss-grid`，工作坊与早期创意类首选 `hand-sketch`。\n\n## 模板克隆模式\n\n直接给 skill 一个 .pptx 模板，后续所有页都仿这个模板。\n\n```bash\n# 一行：自动渲染 + vision 抽风格 + 出图。本机有 LibreOffice 或 docker 镜像即可\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict\n```\n\n`--template-strict` 表示每页都把模板对应页作为 image reference 喂给 gpt-image-2，仿真度最高。\n\n### 模板渲染：本机不需要操作 PowerPoint\n\nskill 自带 `render_template.py`，把 .pptx 自动渲染成每页 PNG，存到 `<cwd>/template_renders/<stem>/page-NN.png`。\n\n后端按优先级自动挑：\n1. 本机 `libreoffice` / `soffice` 命令（最快）\n2. 本机 docker + `linuxserver/libreoffice` 镜像（首次拉 ~2.5GB）\n3. PDF -> PNG 走 `pymupdf`（已在 requirements）；没装就用 `pdf2image` + poppler\n\n如果两种 LibreOffice 都没有，会让用户手动从 PowerPoint/Keynote/WPS 导出每页 PNG，命名 `page-01.png` 起按字典序对应页码。\n\n跑 `generate_ppt.py --template-pptx ...` 时如果省略 `--template-images` 会自动调一次渲染；也可以手动先跑一次：\n\n```bash\npython3 render_template.py company-template.pptx\n# -> <cwd>/template_renders/company_template/page-01.png ... page-NN.png\n```\n\n### 仿模板的两层缓存\n\n| 资料 | 路径 | 用途 |\n| --- | --- | --- |\n| 模板每页 PNG | `<cwd>/template_renders/<stem>/page-NN.png` | LibreOffice 一次渲染长期复用 |\n| Vision 风格分析 | `<cwd>/template_cache/<sha256>.json` | gemini-3.1-pro-preview 一次分析长期复用 |\n| 生成产物 | `<cwd>/outputs/<timestamp>/` | 每次新跑都新目录 |\n\n三者都在调用者 cwd 下，与项目自然同进退；建议把 `template_renders/`、`template_cache/`、`outputs/` 加进项目的 `.gitignore`。\n\n**vision 模型**：模板分析走单独的 OpenAI 兼容多模态 chat completions（默认 `gemini-3.1-pro-preview`，配在 `.env` 的 `VISION_*` 里），与图片生成的 `gpt-image-2` 解耦。\n\n## 安装\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh\n# 编辑 ~/.claude/skills/gpt-image2-ppt-skills/.env 填入 API_KEY\n```\n\n## 必需的环境变量\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # 或任意 OpenAI 兼容中转站\nOPENAI_API_KEY=sk-...\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                     # low / medium / high / auto\n\n# 可选：模板克隆模式才需要（vision 分析独立 provider）。\n# 不内置默认 endpoint，请填你自己信任的服务，否则就别填这一组。\n# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\n# VISION_API_KEY=sk-...\n# VISION_MODEL_NAME=gemini-3.1-pro-preview\n```\n\n> **安全提示**：脚本只从 `<script_dir>/.env`、`~/.claude/skills/.../env`、`~/skills/.../env` 与显式 `GPT_IMAGE2_PPT_ENV` 加载凭据，**不会**向上递归读取项目目录里的 `.env`，避免误吃无关密钥。\n\n## 生成流程（内置风格）\n\n1. 用户给一份大纲 / 已有的 slides_plan.json\n2. Claude 读懂内容，按需要生成 / 校准 `slides_plan.json`：\n   ```json\n   {\n     \"title\": \"...\",\n     \"slides\": [\n       {\"slide_number\": 1, \"page_type\": \"cover\",   \"content\": \"标题 / 副标题\"},\n       {\"slide_number\": 2, \"page_type\": \"content\", \"content\": \"正文要点...\"},\n       {\"slide_number\": 3, \"page_type\": \"data\",    \"content\": \"数据 / 总结...\"}\n     ]\n   }\n   ```\n3. 选风格：从上面 10 套里挑一个，对应 `styles/<id>.md`\n4. 调脚本：\n   ```bash\n   python3 generate_ppt.py --plan slides_plan.json --style styles/editorial-mono.md\n   ```\n5. 产物在 `<cwd>/outputs/<timestamp>/`：\n   - `images/slide-XX.png` -- 每页 PNG（16:9，1536x1024）\n   - `index.html` -- HTML viewer，方向键翻页、空格自动播放、ESC 全屏\n   - `prompts.json` -- 每页用到的完整 prompt（便于复盘 / 二次微调）\n   - `<title>.pptx` -- 16:9 整页填充图片的 .pptx，分享 / 投影直接用\n\n## 生成流程（模板克隆）\n\n1. **拿到模板 .pptx**（用户提供 / 内部模板库 / 网络下载）\n2. **（可选）先单独渲染并人工挑选**----大模板（>15 页）建议先 `python3 render_template.py xxx.pptx`，再从 `template_renders/<stem>/` 里挑 8-12 张代表页复制到 `template_renders/<stem>_curated/`，供 vision 分析。页数越精，layout 命中越准\n3. **生成 slides_plan.json**：每页 `slide_number` / `page_type` (`cover` / `content` / `data` / 等) / `content`；想精准对位时加 `layout_id`，命名按 `layout-NN`（NN = 模板第 N 页 / 你期望对应的模板页编号）\n4. **跑 generate_ppt.py**：\n   ```bash\n   python3 generate_ppt.py \\\n     --plan slides_plan.json \\\n     --template-pptx xxx.pptx \\\n     --template-images template_renders/xxx_curated \\\n     --template-strict --slides 1\n   ```\n   先 `--slides 1` 出封面冒烟，效果 OK 再跑全量\n5. **告知用户产物路径**\n\n### 模板页面挑选 / 复用原则\n\n**核心原则：尽量做到 1 page : 1 layout**----同一份 deck 里每个 slide 用不同的模板页作 reference，观众会觉得每页都是新内容；如果同一个独特 layout 出现 2-3 次，观众下意识会想\"为什么又是这页\"。\n\nvision 分析时会给每个 layout 标 `reuse_friendly`：\n\n| reuse_friendly | 典型 layout | 多次使用的代价 |\n| --- | --- | --- |\n| `false`（不可复用，(!) 强警告） | 封面、3 个具名角色插画页、独特场景图（雪山/广播塔/复古收音机）、5 步骤 zigzag 各步独有图标、novelty 数据中央装置 | 视觉重复非常明显，观众会困惑 |\n| `true`（可复用，但仍建议错开，(i) 弱提示） | 纯文字、卡片网格、通用列表、章节小节标题 | 不致命，但平白浪费模板里的其它好版式 |\n\nClaude 在搭 plan 时的执行策略：\n1. **优先把模板里 N 个不同 layout 分配给 N 页 slide**（N 不够就在 SKILL 里看 reuse_friendly=true 的部分挑能复用的）\n2. **如果 plan 里某页内容结构非常相似（比如多个\"5 步骤流程\"），先尝试改写内容用不同 layout 表达**（4 步骤 + 5 步骤分别用不同流程页），而不是同一个 zigzag 用两次\n3. **冒烟跑完后，看 `Layout 复用检测` 那段输出**：(!) 必须改，(i) 看情况改；改 plan 里相应 slide 的 `layout_id` 即可\n4. **看完 cache JSON 选 layout**：`cat <cwd>/template_cache/<sha256>.json | jq '.layouts[] | {id, page_type, reuse_friendly, summary}'` 一眼看清模板有哪些版式可挑\n\n`generate_ppt.py` 在派发任务前会自动跑一次复用检测，把警告打到终端，不阻塞执行。\n\n## Skill 调用规范\n\n当用户说\"做一份 PPT\" / \"生成幻灯片\"时：\n\n1. **先问三件事**（不要直接动手）：\n   - 内容 / 页数 / 观众是谁？\n   - 风格偏好？按\"十种内置风格\"表的场景类目映射推荐 1-2 个；**或者用户上传自己的 .pptx 模板**（走 `--template-pptx`，自动渲染）\n   - 是否需要单页测试一张图先看效果（`--slides 1`）\n2. **生成 slides_plan.json**\n3. **跑 generate_ppt.py**，先 `--slides 1` 出封面冒烟，效果 OK 再跑全量\n4. **告知用户产物路径**，让他在浏览器打开 `outputs/<timestamp>/index.html` 或者 `<title>.pptx`\n\n## 仅生成部分页\n\n```bash\npython3 generate_ppt.py --plan my_plan.json --style styles/dark-aurora.md --slides 1,3,5\n```\n\n跑过的页有同名 PNG 时会自动跳过，方便逐页迭代。\n\n## 文件结构\n\n```\ngpt-image2-ppt-skills/\n|---- SKILL.md                # 本文件\n|---- README.md               # 项目说明\n|---- generate_ppt.py         # 主入口（CLI）\n|---- render_template.py      # PPTX -> 每页 PNG 的辅助脚本（CLI + library）\n|---- image_generator.py      # gpt-image-2 wrapper（支持 reference image）\n|---- template_analyzer.py    # PPT 模板剖析器（vision + 缓存）\n|---- slides_plan.json        # 示例 plan（10 页商业计划书）\n|---- styles/                 # 10 套内置风格\n|   |---- gradient-glass.md           dark-aurora.md\n|   |---- clean-tech-blue.md          risograph.md\n|   |---- vector-illustration.md      japanese-wabi.md\n|   |---- editorial-mono.md           swiss-grid.md\n|   |---- hand-sketch.md              y2k-chrome.md\n|---- templates/viewer.html   # HTML viewer 模板\n|---- install_as_skill.sh     # 一键安装到 ~/.claude/skills/\n|---- requirements.txt        # requests + python-dotenv + python-pptx + jsonschema + pymupdf\n\\---- .env.example\n```\n\n调用时产生的运行时目录都在 `<cwd>` 下：\n```\n<your-project>/\n|---- template_renders/<stem>/page-NN.png   # PPTX 渲染（render_template.py）\n|---- template_cache/<sha256>.json          # vision 风格分析缓存\n\\---- outputs/<timestamp>/                  # 每次生成产物\n```\n\n## License\n\nApache License 2.0.\n\nFile v1.0.3:README.md\n\n# gpt-image2-ppt-skills\n\n> 用 OpenAI 官方 `gpt-image-2` Images API 生成视觉风格强烈的 PPT 图片，自动产出可键盘翻页的 HTML viewer。Claude Code Skill / OpenClaw Skill。\n\n🌐 **English** ▶ [README.en.md](./README.en.md)\n\n## ✨ 特性\n\n- 🎨 **十套精选风格**：渐变玻璃 / 蓝白科技 / 矢量插画 / 黑白杂志 / 深色霓虹 / Riso 印刷 / 日式侘寂 / 瑞士网格 / 手绘草稿 / Y2K 金属，每套都有 cover/content/data 三种构图规范\n- 🪄 **模板克隆模式**：传一个 .pptx，自动渲染 + vision 抽风格 + JSON Schema，新内容仿这个模板出图\n- 🤖 **官方 OpenAI Images API**：模型 `gpt-image-2`\n- 🔄 **OpenAI 兼容**：base_url 可换成任何兼容中转站\n- 🖼 **16:9 高清 PPT**：默认 1536×1024，`quality=high`\n- 🎮 **HTML viewer**：键盘翻页、空格自动播放、ESC 全屏、触摸滑动\n- 🧩 **逐页迭代**：`--slides 1,3,5` 只生成指定页，跑过的自动跳过\n\n## 🚀 一键安装\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh\n```\n\n安装后 skill 会被装到 `~/.claude/skills/gpt-image2-ppt-skills/`，Claude Code 重启后自动识别。\n\n## ⚙ 配置\n\n编辑 `~/.claude/skills/gpt-image2-ppt-skills/.env`：\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # 或任意 OpenAI 兼容中转站\nOPENAI_API_KEY=sk-...                     # 必需\nGPT_IMAGE_MODEL_NAME=gpt-image-2          # 默认 gpt-image-2\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n\n# 可选：仅模板克隆模式需要（vision 分析独立 provider）。\n# 不内置默认 endpoint，请填你自己信任的服务，否则就别启用 VISION_*。\n# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\n# VISION_API_KEY=sk-...\n# VISION_MODEL_NAME=gemini-3.1-pro-preview\n```\n\n> 安全：脚本只从 `<script_dir>/.env`、`~/.claude/skills/.../env`、`~/skills/.../env` 或显式 `GPT_IMAGE2_PPT_ENV` 加载，**不会**向上递归读取项目目录的 `.env`，避免误吃无关密钥。\n\n## 📝 用法\n\n### 1. 写一份 slides_plan.json\n\n```json\n{\n  \"title\": \"我的演示\",\n  \"slides\": [\n    {\"slide_number\": 1, \"page_type\": \"cover\",   \"content\": \"标题：xxx\\n副标题：yyy\"},\n    {\"slide_number\": 2, \"page_type\": \"content\", \"content\": \"三个要点...\"},\n    {\"slide_number\": 3, \"page_type\": \"data\",    \"content\": \"对比数据...\"}\n  ]\n}\n```\n\n`page_type` 三选一：`cover` / `content` / `data`，影响生图构图。\n\n### 2. 选一种风格生成\n\n```bash\n# 全量生成\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md\n\n# 只生成第 1 页（用来先验证 API 通）\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md --slides 1\n\n# 只重生第 3 和第 5 页\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md --slides 3,5\n```\n\n### 2.5 仿用户自己的 PPT 模板\n\n```bash\n# 一行：自动渲染 + vision 抽风格 + 出图。本机有 LibreOffice 或 docker 镜像即可\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict\n\n# 显式指定渲染目录（已经手动跑过 render_template.py 或自己导出过 PNG）\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-images ./template_renders/company-template \\\n  --template-strict\n\n# 强制重跑 vision（默认会读 template_cache/<sha256>.json 缓存）\npython3 generate_ppt.py ... --rebuild-template-cache\n```\n\n`--template-strict` 表示每页都把模板对应页作为 image reference 传给 gpt-image-2，仿真度最高。\n\n不传 `--template-images` 时会自动调 `render_template.py`，按优先级：本机 `libreoffice` → 本机 docker 跑 `linuxserver/libreoffice` → 报错让用户手工导出 PNG。PDF → PNG 走 `pymupdf`（已在 requirements）。\n\n第一次跑 vision 会调 `gemini-3.1-pro-preview`（在 `.env` 的 `VISION_*` 里配），输出每页的 `summary` + `json_schema` 缓存到 `template_cache/`。后续同一模板秒匹配。\n\n#### 渲染中间产物落盘\n\n| 路径 | 内容 |\n| --- | --- |\n| `<cwd>/template_renders/<stem>/page-NN.png` | LibreOffice 渲染的每页 PNG |\n| `<cwd>/template_renders/<stem>/_source.pdf` | LibreOffice 中间产物（顺手保留以便人工排查） |\n| `<cwd>/template_cache/<sha256>.json` | vision 风格分析缓存 |\n| `<cwd>/outputs/<timestamp>/` | 每次生成产物 |\n\n把这三个目录加进项目 `.gitignore`。\n\n### 3. 看产物\n\n```\noutputs/20260422_153012/\n├── images/\n│   ├── slide-01.png\n│   ├── slide-02.png\n│   └── ...\n├── index.html       # 浏览器打开就能键盘翻页\n└── prompts.json     # 每页完整 prompt，方便复盘\n```\n\n## 🎨 十种内置风格\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n每个风格的完整 prompt 见 `styles/<id>.md`，按 cover / content / data 三种构图分别给出版式规范。\n\n## 🛠 在 Claude Code 里调用\n\n直接和 Claude 说：\n\n> 帮我用 gpt-image2-ppt 生成一份关于 [你的主题] 的 5 页 PPT，风格用 clean-tech-blue。\n\nClaude 会：\n1. 问你具体内容\n2. 写好 `slides_plan.json`\n3. 跑 `generate_ppt.py --slides 1` 出封面让你确认\n4. 跑全量并把 viewer 路径告诉你\n\n## 📦 依赖\n\n- Python 3.8+\n- `pip install -r requirements.txt` 装齐所有依赖（`requests` / `python-dotenv` / `python-pptx` / `jsonschema` / `pymupdf`）\n- 模板克隆模式额外需要：本机 `libreoffice` 或本机 docker + `linuxserver/libreoffice` 镜像\n\n## 🙏 致谢\n\n- [op7418/NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) — 风格 prompts 与 viewer 模板的原始作者，本项目把图片后端从 Nano Banana Pro 换成了 OpenAI gpt-image-2。\n- [lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) — Claude Code skill SKILL.md frontmatter 写法参考。\n\n## License\n\nApache License 2.0.\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn76gz2yb53tdjgpmb3ydjexax82g5yr\",\n  \"slug\": \"gpt-image2-ppt\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1776864369550\n}\n\nFile v1.0.3:README.en.md\n\n# gpt-image2-ppt-skills\n\n> Generate visually striking PPT slides with OpenAI's official `gpt-image-2` Images API; ships an instant keyboard-navigable HTML viewer + a 16:9 .pptx file. Works as a Claude Code Skill or an OpenClaw Skill.\n\n🌐 **中文** ▶ [README.md](./README.md)\n\n## ✨ Highlights\n\n- 🎨 **10 curated styles**: Spatial Glass / Tech Blue / Retro Vector / Editorial Mono / Dark Aurora / Risograph / Japanese Wabi / Swiss Grid / Hand Sketch / Y2K Chrome — each with cover/content/data composition rules\n- 🪄 **Template-clone mode**: feed any `.pptx`, the skill auto-renders + asks vision to extract style + JSON Schema, then produces new content in that template's look\n- 🤖 **Official OpenAI Images API**: model `gpt-image-2`\n- 🔄 **OpenAI-compatible**: point `base_url` at any compatible relay\n- 🖼 **16:9 high-res**: 1536×1024 default, `quality=high`\n- 🎮 **HTML viewer**: arrow-key navigation, space to autoplay, ESC fullscreen, swipe on touch\n- 🧩 **Per-slide iteration**: `--slides 1,3,5` regenerates only those pages, completed PNGs are skipped automatically\n\n## 🚀 One-line install\n\n### As a Claude Code skill\n\n```bash\ngit clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh\n```\n\nAfter installation the skill lives at `~/.claude/skills/gpt-image2-ppt-skills/` and Claude Code picks it up after restart.\n\n### As an OpenClaw skill (via ClawHub)\n\n```bash\nclawhub install gpt-image2-ppt\n# installed to <cwd>/skills/gpt-image2-ppt/\n```\n\n## ⚙ Configuration\n\nEdit `~/.claude/skills/gpt-image2-ppt-skills/.env` (or `skills/gpt-image2-ppt/.env` for OpenClaw):\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # or any OpenAI-compatible relay\nOPENAI_API_KEY=sk-...                     # required\nGPT_IMAGE_MODEL_NAME=gpt-image-2          # default\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n\n# Optional: only required for template-clone mode (independent vision provider).\n# No default endpoint is shipped — supply your own trusted endpoint, or leave\n# VISION_* unset to disable template-clone mode entirely.\n# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\n# VISION_API_KEY=sk-...\n# VISION_MODEL_NAME=gemini-3.1-pro-preview\n```\n\n> Security: the script only loads `.env` from `<script_dir>/.env`, `~/.claude/skills/.../env`, `~/skills/.../env`, or an explicit `GPT_IMAGE2_PPT_ENV` path. It does **not** walk parent directories, so it cannot accidentally pick up unrelated project secrets.\n\n## 📝 Usage\n\n### 1. Author a `slides_plan.json`\n\n```json\n{\n  \"title\": \"My deck\",\n  \"slides\": [\n    {\"slide_number\": 1, \"page_type\": \"cover\",   \"content\": \"Title: xxx\\nSubtitle: yyy\"},\n    {\"slide_number\": 2, \"page_type\": \"content\", \"content\": \"Three bullet points...\"},\n    {\"slide_number\": 3, \"page_type\": \"data\",    \"content\": \"Comparison numbers...\"}\n  ]\n}\n```\n\n`page_type` is one of `cover` / `content` / `data` — drives the per-page composition.\n\n### 2. Pick a style and generate\n\n```bash\n# Full deck\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md\n\n# Smoke test slide 1 only (cheap API check)\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md --slides 1\n\n# Re-render only slides 3 and 5\npython3 generate_ppt.py --plan slides_plan.json --style styles/gradient-glass.md --slides 3,5\n```\n\n### 2.5 Clone the user's own .pptx template\n\n```bash\n# One-liner: auto-render + vision-analyse + image generation.\n# Needs LibreOffice locally OR docker with linuxserver/libreoffice\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict\n\n# Explicit images dir (when you ran render_template.py manually or curated PNGs yourself)\npython3 generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-images ./template_renders/company-template \\\n  --template-strict\n\n# Force vision re-analysis (default reads template_cache/<sha256>.json)\npython3 generate_ppt.py ... --rebuild-template-cache\n```\n\n`--template-strict` passes the matching template page as an image reference to gpt-image-2 → highest fidelity.\n\nIf `--template-images` is omitted the skill auto-invokes `render_template.py` with this priority: native `libreoffice` → `docker run linuxserver/libreoffice` → instructive error asking the user to export PNGs manually. PDF→PNG goes through `pymupdf` (already in requirements).\n\nThe first vision pass calls `gemini-3.1-pro-preview` (configured in `.env` `VISION_*`), produces per-page `summary` + `json_schema`, caches to `template_cache/`. Subsequent runs against the same template are a cache hit.\n\n#### Where intermediates land\n\n| Path | Content |\n| --- | --- |\n| `<cwd>/template_renders/<stem>/page-NN.png` | LibreOffice-rendered PNGs |\n| `<cwd>/template_renders/<stem>/_source.pdf` | LibreOffice intermediate (kept for inspection) |\n| `<cwd>/template_cache/<sha256>.json` | vision style profile cache |\n| `<cwd>/outputs/<timestamp>/` | per-run outputs |\n\nAdd these three directories to your project's `.gitignore`.\n\n#### Layout reuse policy\n\nThe principle: **1 page : 1 layout, by default.** Vision tags every layout with `reuse_friendly`:\n\n| `reuse_friendly` | Typical layouts | Cost of repeating |\n| --- | --- | --- |\n| `false` (⚠ strong warning) | Cover / character illustrations / unique scene art / multi-step flows with per-step icons / novelty data centerpieces | Visually obvious repetition, audience confusion |\n| `true` (ℹ soft hint) | Plain text / card grids / generic lists / section headers | Tolerable, but wastes the template's other distinctive layouts |\n\n`generate_ppt.py` runs a reuse check before dispatching image generation jobs and prints suggested alternatives. The check never blocks execution.\n\n### 3. Inspect the output\n\n```\noutputs/20260422_153012/\n├── images/\n│   ├── slide-01.png\n│   ├── slide-02.png\n│   └── ...\n├── index.html       # open in browser → arrow-key navigation\n├── prompts.json     # full prompts used for each slide (for replay & tuning)\n└── <title>.pptx     # 16:9 deck with images filling each slide\n```\n\n## 🎨 The 10 built-in styles\n\n| Style ID | One-liner | Use cases |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI product launches, technical talks, creative pitches |\n| `clean-tech-blue` | Stripe / Linear-grade blue & white | Investor decks, business plans, corporate strategy |\n| `vector-illustration` | Retro vector + black outline | Education, brand storytelling, community sharing |\n| `editorial-mono` | Kinfolk / Monocle editorial design | Brand reveals, cultural interviews, book talks |\n| `dark-aurora` | Linear / Vercel dark neon | AI products, dev tools, technical talks |\n| `risograph` | Riso 2-spot-color print + halftone | Creative studios, indie zines, design agencies |\n| `japanese-wabi` | Muji / Hara Kenya wabi-sabi | Tea ceremony, lifestyle brands, luxury, cultural lectures |\n| `swiss-grid` | Bauhaus / Vignelli international style grid | Academic reports, museum exhibits, serious dashboards |\n| `hand-sketch` | Sketchnote / whiteboard | Workshops, product brainstorming, training |\n| `y2k-chrome` | Y2K liquid chrome + butterfly stickers | Streetwear, entertainment, brand collabs, Gen-Z marketing |\n\nEach style file is at `styles/<id>.md` and includes cover / content / data composition rules.\n\n## 🛠 Use it inside Claude Code (or OpenClaw)\n\nJust say:\n\n> Make me a 5-slide deck about [topic] using gpt-image2-ppt, style = clean-tech-blue.\n\nThe agent will:\n1. Ask clarifying questions about content, audience, page count\n2. Author `slides_plan.json`\n3. Run `generate_ppt.py --slides 1` for a cover smoke test\n4. After approval, generate the full deck and hand back the viewer + .pptx paths\n\n## 📦 Dependencies\n\n- Python 3.8+\n- `pip install -r requirements.txt` covers everything (`requests` / `python-dotenv` / `python-pptx` / `jsonschema` / `pymupdf`)\n- Template-clone mode additionally needs: native `libreoffice` OR docker with `linuxserver/libreoffice`\n\n## 🙏 Acknowledgements\n\n- [op7418/NanoBanana-PPT-Skills](https://github.com/op7418/NanoBanana-PPT-Skills) — original style prompts + viewer; this project swaps the image backend from Nano Banana Pro to OpenAI gpt-image-2 and rewrites all 3 inherited styles + adds 7 new ones.\n- [lewislulu/html-ppt-skill](https://github.com/lewislulu/html-ppt-skill) — reference for Claude Code skill SKILL.md frontmatter.\n\n## License\n\nApache License 2.0.\n\nFile v1.0.3:styles/clean-tech-blue.md\n\n# 清爽科技蓝 / Stripe-grade Blue\n\n## 风格ID\nclean-tech-blue\n\n## 风格名称\n清爽科技蓝 · Stripe-grade Blue\n\n## 风格描述\n对标 Stripe / Linear / Notion 官网与 Pitch 路演 deck 的高级蓝白风：纯白背景 + 克制蓝调 + 大留白 + 精致网格。比传统 McKinsey 蓝更现代、更产品化，比 SaaS landing 更适合长篇内容。适合融资路演、商业计划书、企业战略汇报。\n\n## 基础提示词模板\n\n你是一位顶级商业演示设计师，对标 Stripe / Linear / Notion 官网与 a16z / Sequoia 路演 deck。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：纯白 #FFFFFF，绝不使用深色背景；可在大块区域用极淡冰蓝 #F4F7FF 区分。\n- 主蓝：Stripe 紫蓝 #635BFF 或皇家蓝 #1E40AF，作为标题、强调数字、品牌色块。\n- 次蓝：浅蓝 #93C5FD 用于柔性强调；冰蓝 #E0EAFF 用于卡片背景。\n- 中性：标题深墨 #0F172A、正文 #334155、辅助 #64748B。\n- 卡片：超浅冰蓝底 + 1px 蓝灰描边 #E2E8F0 + 极淡阴影；圆角 12px，朴素克制，绝不带光晕。\n- 装饰：背景可极淡的 8% opacity 蓝色网格点阵或细线（几乎不可见），仅用于呼吸感；偶尔在角落放一个浅蓝色磨砂玻璃几何体（透明度 25–35%），保持与白底自然融合。\n\n【字体】\n- 标题：思源黑体 Bold / 苹方 Bold（粗壮、不夸张）\n- 正文：思源黑体 Regular（行高 1.5–1.6）\n- 数字：思源黑体 Heavy 或等宽数字字体，强调时字号 4–6×于正文\n\n【封面页构图】\n左 60% 放主标题（深墨黑超大粗体，2–3 行内）+ 下方副标题（中蓝标准字重）+ 底部 1 行 tagline；右 40% 放一个浅蓝色简洁 3D 几何体（棱柱、球、抽象 SaaS 图形），透明度 30%，绝不喧宾夺主。顶部或底部一条 4px 高的蓝色渐变细带作为品牌锚点。\n\n【内容页构图】\n顶部留 1 行小标题 + 1 条蓝色细分隔线；主体 3 列卡片或 2 列文字+图表布局；每张卡片白底浅蓝描边、左侧 3px 实心蓝色边作为 accent；要点用蓝色实心圆点 / 短横线，绝不用 emoji。整页留白占 45% 以上。\n\n【数据页构图】\n关键数字超大（占页面高度 25–30%）深蓝粗体居中或左对齐，数字下方一行小字解释含义；旁边或下方放简洁柱状图 / 折线图 / 环形图，配色用蓝色 5 阶渐变（#1E40AF → #93C5FD），对照组用浅灰 #E2E8F0。每个数据点必须有清晰标签，绝不裸图。\n\n【禁止】\n- 别用霓虹色、赛博朋克、深黑背景、彩虹渐变\n- 别用立体阴影、玻璃拟态过度装饰\n- 别堆图标，每页图标数量 ≤ 4 个\n- 字号对比要明确，不要全篇 18pt 平铺\n\n## 适用场景\n融资路演、商业计划书、企业战略汇报、SaaS 产品发布、董事会汇报、咨询报告。\n\nFile v1.0.3:styles/dark-aurora.md\n\n# 深色霓虹 / Dark Aurora\n\n## 风格ID\ndark-aurora\n\n## 风格名称\n深色霓虹 · Dark Aurora\n\n## 风格描述\n对标 Linear / Vercel / Cursor / Arc Browser 官网的高级深色风：深空底 + 极光弧光 + 半透明玻璃卡片 + 极细发光描边。区别于俗气的\"赛博朋克\"，强调克制与高级。适合 AI 产品、开发者工具、技术分享、新一代 SaaS。\n\n## 基础提示词模板\n\n你是一位顶级深色模式 UI 设计师，对标 Linear / Vercel / Cursor / Arc Browser 的官网视觉。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：深空黑 #0A0A0F，叠加极淡的径向渐变（中心稍亮 #14142A → 边缘 #06060C），整体保持冷调。\n- 极光：背景隐藏 1–2 道弧形或斜向光带，颜色 #7B5BFF（紫）/ #00D4FF（青）/ #FF7AB6（粉）任选，强度 25–40%，模糊扩散，作为氛围而非主体。\n- 卡片：半透明玻璃 rgba(255,255,255,0.05–0.10) + 1px 顶部高光 rgba(255,255,255,0.15) + 极淡内阴影；圆角 16px。\n- 文字色：白 #FFFFFF（标题）/ 暖灰 #C8C8D8（正文）/ 灰 #6B6B7E（辅助）。\n- 强调：仅在关键数字、按钮、装饰光带使用极光色。\n- 装饰：可有极细 1px 发光描边几何（圆环、网格、星图），仅作背景气氛；可点缀 1–2 个微小光点（\"星尘\"），位置随机但克制。\n\n【字体】\n- 标题：思源黑体 SemiBold / Inter Display SemiBold，字号大但不溢出\n- 正文：思源黑体 Regular（光照下白字略减字重，避免刺眼）\n- 数字：等宽数字字体（如 JetBrains Mono），强调时配 1 道下方 1px 极光下划线\n\n【封面页构图】\n居中或左对齐主标题，下方副标题降一档；标题正后方有一道斜向极光光带横穿（紫→青渐变）；底部一行品牌信息或日期，配 1 个直径 6px 的发光小圆点作为锚点。整页极少元素，氛围感优先。\n\n【内容页构图】\n2×2 或 3 列玻璃卡片网格，每张卡片：顶部一行短标题 + 中间 2–3 行说明 + 左上角 1 个发光线性图标（描边 1.5px，颜色取自极光）；卡片之间间距 24px；右上角或左下角点缀一处极光光晕（直径占画面 15–25%，模糊扩散）。\n\n【数据页构图】\n关键数字超大居中或左对齐（白色），数字下方 1 行说明 + accent 色短下划线；右侧或下方一个发光环形图 / 折线图（线宽 2–3px，端点带光晕）；图例用极小字号 + 发光圆点。整体保留大块深色留白。\n\n【禁止】\n- 严禁使用刺眼正红、正绿、纯蓝；霓虹色只用极光色板\n- 严禁深色背景 + 高饱和卡通图标\n- 严禁背景完全黑（#000000），必须 #0A0A0F 起，留呼吸感\n- 别堆光晕，每页 ≤ 2 处发光区\n\n## 适用场景\nAI 产品发布、开发者工具、技术分享、深色主题 SaaS、新世代品牌发布、Cyber 但克制的演示。\n\nFile v1.0.3:styles/editorial-mono.md\n\n# 黑白杂志 / Editorial Mono\n\n## 风格ID\neditorial-mono\n\n## 风格名称\n黑白杂志 · Editorial Mono\n\n## 风格描述\n对标《Kinfolk》《Monocle》《纽约时报》周末版的杂志编辑设计：黑 + 白 + 一种克制 accent，巨大衬线标题，不对称版式，奢侈的留白，引文与脚注并存。适合品牌发布、读书分享、文化访谈、长文摘要。\n\n## 基础提示词模板\n\n你是一位顶级杂志艺术总监，对标 Kinfolk / Monocle / The New Yorker / 纽约时报周末版的版面设计。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：暖白 #FAF8F2 或墨黑 #1A1A1A（每份 deck 选一种，不混用）；整页见微弱纸张颗粒。\n- 文字：暖白底用炭黑 #0F0F0F，墨黑底用米白 #F4F1E8。\n- ACCENT（每份 deck 只允许一种 accent 色）：编辑红 #C8102E、橄榄绿 #5D6D3F、深芥末 #B8860B、午夜蓝 #2A3D5F；只用于：1 个引号、1 行小标题、1 条细分隔线、1 个角注。\n\n【字体】\n- 主标题：思源宋体 Heavy / Noto Serif TC Black，字号巨大（占封面高度 18–25%），字距 -2%，可换行 2–3 行。\n- 副标题/小标题：思源黑体 Light + 全大写 + 字距 +20%（spacing letter）。\n- 正文：思源宋体 Regular，行高 1.65，两端对齐或左对齐，绝不居中。\n- 引文：思源宋体 Italic，超大字号，挂角引号 \"\" 或 「」。\n\n【封面页构图】\n不对称布局：主标题占左上 60% 区域（贴左边 column），下方一行小标题（全大写、accent 色）；右侧或下方留出大块留白，仅放一个细长 accent 色边线 + 一行编号 / 期号 / 日期（如 \"01 / 普通人指南 / Apr 2026\"）。底部最右角放一个小尺寸图片或几何符号作为视觉钩子。\n\n【内容页构图】\n经典杂志双栏：左 1/3 column 放小标题（全大写 + 上方一条 1px 短线）+ accent 色编号；右 2/3 放正文，首字母用大号 drop cap（4 行高），段落之间用空行隔开。或采用\"引文页\"变体：整页中央一句巨大斜体引文 + 下方小字署名。每页只承载 1 个核心观点，绝不堆砌。\n\n【数据页构图】\n极简：1 个超大数字（占画面高度 40%）放左侧或居中，下方 1 行解释 + 1 行来源；旁边放一段 80–120 字的散文式解读（不要点状列表）。如果要图表，必须用最简的细线折线图或单色横条，无渐变、无填色面积、无图例。\n\n【禁止】\n- 严禁使用任何 emoji、卡通图标、3D 元素、渐变、阴影\n- 严禁使用 sans-serif 作为主标题\n- 严禁使用 2 种以上 accent 色\n- 严禁居中所有文字、严禁卡片化布局\n\n## 适用场景\n品牌发布、读书分享会、文化访谈、品牌故事、人物专访、生活方式杂志型 PPT、艺术展陈、慢公司汇报。\n\nFile v1.0.3:styles/gradient-glass.md\n\n# 渐变玻璃 / Spatial Glass\n\n## 风格ID\ngradient-glass\n\n## 风格名称\n渐变玻璃 · Spatial Glass\n\n## 风格描述\n对标 Apple Vision OS 与现代 SaaS 产品的玻璃质感设计：极光渐变 + 磨砂玻璃卡片 + 柔和 3D 物体，氛围高级、洁净、有空间深度。适合 AI 产品发布、创意提案、技术分享。\n\n## 基础提示词模板\n\n你是一位顶级空间计算与 SaaS 产品演示设计师。请生成 16:9 横版幻灯片，对标 Apple Vision OS / Linear / Cursor 官网的视觉调性。\n\n【核心视觉】\n- 背景：深空黑 #0A0A12 或珠光白 #F8F9FB（二选一），叠加微弱的径向极光（紫 #7B5BFF / 青 #00D4FF / 粉 #FF7AB6 → 透明），强度控制在背景 15–25%，绝不抢主体。\n- 卡片：磨砂玻璃材质，rgba(255,255,255,0.08–0.16) + 1px 内白边 + 柔投影，圆角 24px。深色背景下玻璃略带霓虹反射；浅色背景下玻璃几乎透明、边缘见光。\n- 强调色：极光渐变只用于关键数字、按钮、装饰光带，正文一律保持高对比中性色（深色底用 #E8E8F0，浅色底用 #1A1A24）。\n- 装饰：可放 1 个抛光金属 / 透明亚克力 / 流体硅胶质感的 3D 物体作为视觉锚点，体积小而精，避免占满画面。\n\n【字体】\n- 标题：思源黑体 Heavy / 苹方 Heavy，字号巨大（占封面高度 12–18%）\n- 正文：思源黑体 Regular，1.4 行高\n- 数字：等宽数字字体（如 SF Mono / 思源等宽），方便对齐\n\n【封面页构图】\n左对齐或居中放标题，副标题降一档字号；同侧或对角放一个直径占画面 30–45% 的 3D 玻璃物体（球、胶囊、莫比乌斯环、流体）；背后有一道极光弧线穿过；底部 1 行简短 tagline。\n\n【内容页构图】\n2×2 或 3 列玻璃卡片网格（不要硬塞 6 个，3–4 个最舒服），每张卡片含 1 行短标题 + 2–3 行说明 + 1 个发光小图标；卡片之间留出 32px 以上间距；右上或左下点缀 1 处极光高光。\n\n【数据页构图】\n左 40% 文本（结论 + 1–2 行解释），右 60% 大型发光 3D 数据可视化（甜甜圈 / 胶囊进度条 / 悬浮数字塔）；图表色用极光渐变，背景保留克制。\n\n【禁止】\n- 别堆 Bento 网格塞 6+ 卡片\n- 别用 cliché 词汇式装饰：火焰、闪电、彩虹光晕\n- 别用低分辨率噪点或老式金属拉丝纹理\n- 不要把 3D 物体做成\"水晶球 + 莲花 + 小球\"那种俗气组合\n\n## 适用场景\nAI 产品发布、技术分享、创意提案、Spatial / VisionOS 主题、设计奖参赛级视觉。\n\nFile v1.0.3:styles/hand-sketch.md\n\n# 手绘草稿 / Hand Sketch\n\n## 风格ID\nhand-sketch\n\n## 风格名称\n手绘草稿 · Hand Sketch\n\n## 风格描述\n对标 Mike Rohde 的 Sketchnote、Visual Thinking 工作坊的白板手绘风：暖米色纸张 + 手写体标题 + 不规则方框/箭头 + 马克笔高亮色 + 简笔小图标。带温度、显思考过程、有设计冲动感。适合工作坊、产品早期 brainstorming、培训、产品设计 review。\n\n## 基础提示词模板\n\n你是一位 Sketchnote 与视觉思考大师，对标 Mike Rohde / Dave Gray / IDEO 工作坊白板的手绘记录风格。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：暖米白 #FBF7EE 或淡黄稿纸 #F8F1DA，叠加可见的纸张纹理 + 极淡 4mm 方格线（5% 透明度，类似无印良品本子）。\n- 主线：深炭灰 #2A2A2A（不是纯黑），所有线条手绘感 — 略微抖动、不完全平直、端点稍粗。\n- 高亮色（马克笔）：荧光黄 #FFE066、天空蓝 #6FB7E0、柔和红 #E56B6F、嫩叶绿 #7BB661、香槟橙 #FFB572；每页只用 2–3 种。\n- 高亮模拟：用半透明色块覆盖文字（叠加效果，能看到底下文字），模仿马克笔涂抹，边缘有微微\"溢出\"。\n\n【字体】\n- 主标题：手写体（思源黑体 Casual / 江西拙楷 / Caveat / Architects Daughter），略大略斜，有手感\n- 正文：思源黑体 Regular 或同款手写字体的小尺寸版\n- 字号对比靠尺寸不靠字重；可有部分字被画了下划线或圈起来强调\n\n【封面页构图】\n中央放主标题（巨大手写体，可有装饰下划线或被圈起），上方或下方画一个手绘相框（不规则圆角矩形、四角带\"装订钉\"或\"胶带\"装饰）；旁边散布手绘装饰：箭头、星号、感叹号气泡、灯泡图标；底部一行小手写字签名。\n\n【内容页构图】\n白板会议感：每个要点用一个手绘方框 / 圆角矩形 / 云朵框包裹，方框之间用手绘箭头连接（曲线 + 端点小三角），表达逻辑流；要点旁配 1 个简笔图标（人头、灯泡、齿轮、对话气泡，全部手绘 monoline）；关键词用马克笔色块高亮（类似荧光笔涂抹效果）。\n\n【数据页构图】\n图表全部手绘风：柱状图的柱子是手绘矩形（非完全平直），饼图的扇形带手绘描边 + 内部斜线填充，折线图线条略抖且端点带小圆点；数字用大号手写体，可有\"圈出来\"或\"双下划线\"强调；旁边画一个简笔小手指 / 放大镜 / 对话气泡 标注解释。\n\n【禁止】\n- 严禁使用矢量平面图标，所有图形必须有手绘抖动感\n- 严禁完全平直的线条与完美几何形状\n- 严禁使用渐变、3D、阴影\n- 严禁字体过小过密；草稿风的灵魂是\"留白 + 大字\"\n\n## 适用场景\n工作坊、产品早期 brainstorming、设计冲刺、用户研究汇报、培训、产品 review、敏捷会议、创意提案早期阶段、教育课件。\n\nFile v1.0.3:styles/japanese-wabi.md\n\n# 日式侘寂 / Japanese Wabi\n\n## 风格ID\njapanese-wabi\n\n## 风格名称\n日式侘寂 · Japanese Wabi\n\n## 风格描述\n对标无印良品、原研哉、深泽直人、佐藤大的日式极简：米白宣纸底 + 墨黑文字 + 单一朱红或抹茶绿点缀 + 巨大留白 + 不对称构图。沉静、有禅意、有呼吸感。适合茶道、生活方式品牌、文化讲座、奢侈品、慢公司分享。\n\n## 基础提示词模板\n\n你是一位日式平面设计大师，对标无印良品、原研哉、佐藤大、深泽直人的设计美学。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：宣纸米白 #F5F1E8 或月牙白 #F2EFE6，整页有极淡纸纤维纹理与一处可见的天然斑点 / 折痕（侘寂的\"不完美\"）。\n- 文字：墨黑 #1A1A1A（深邃但非纯黑）。\n- ACCENT（整份 deck 只用一种）：朱红 #C8201E（朱印感）或抹茶绿 #4A6B3A 或藏青 #1B3A5C；只用于：1 处印章、1 道短线、1 个圆点。\n- 留白：每页留白占 60–70%，绝不填满。\n- 装饰：可有 1 道墨笔抽象笔触（书法感，单色，不规则），位置在角落或边缘，不喧宾夺主；或一个红色印章方块（带轻微残缺与油墨不均，模拟手盖）。\n\n【字体】\n- 主标题：思源宋体 Heavy / Noto Serif JP Black，可竖排，字距宽松\n- 副标题：思源黑体 Light，字距 +30%（spacing letter）\n- 正文：思源宋体 Regular 或思源黑体 Light，行高 1.8，章节之间空行充裕\n- 数字：思源宋体 Regular，可超大但不抢主标题\n\n【封面页构图】\n极简至极：主标题靠右侧 1/3 column 排版（可竖排），副标题在主标题下方紧贴一行；左侧 2/3 几乎全空，只在中下位置放 1 道墨笔抽象笔触或一个朱印小章；底部右侧一行细小日期 / 编号。\n\n【内容页构图】\n不对称双栏：左 column（占 1/3）放一个章节序号 + 一行小标题 + 一处 accent 色短线；右 column（占 2/3）放正文段落，段落短，每段 2–3 句，行间充裕；可有 1 个简笔几何插图（墨色细线，非常简化，如圆、方、波纹）作为视觉锚点。\n\n【数据页构图】\n中央放一个超大数字（思源宋体 Heavy），数字下方一行小字（含数字单位 + 来源），旁边竖排一句富有诗意的解读（5–10 字）；图表必须极简：1 条折线、1 个空心圆环、1 行横向数字 — 全部 1px 墨线，无填色。\n\n【禁止】\n- 严禁色块大面积填充\n- 严禁使用 2 种以上 accent 色\n- 严禁卡片、阴影、3D、渐变\n- 严禁堆叠多个图标，每页 ≤ 1 个装饰\n- 严禁居中所有元素，不对称才有侘寂\n\n## 适用场景\n茶道、香道、生活方式品牌、奢侈品、文化讲座、文学分享、慢公司汇报、心理咨询、独立咖啡店、和食料理。\n\nFile v1.0.3:styles/risograph.md\n\n# Riso 印刷 / Risograph\n\n## 风格ID\nrisograph\n\n## 风格名称\nRiso 印刷 · Risograph\n\n## 风格描述\n对标日本 / 欧洲独立设计师工作室的 Risograph 双套色印刷美学：荧光粉 + 钴蓝（或其他 2 色组合）+ 网点纹理 + 轻微套印偏移 + 米白纸感。粗粝、有手感、有 zine 气质。适合创意工作室、文创品牌、独立播客、活动海报式 PPT。\n\n## 基础提示词模板\n\n你是一位独立 zine / Risograph 印刷工作室的视觉设计师，对标 Hato Press / Tokyo Risograph 工作室的双套色印刷美学。请生成 16:9 横版幻灯片，模拟 Riso 双套色印刷质感。\n\n【核心视觉】\n- 背景：米白 #F4EDD9 或牛皮纸黄 #E5D5A8，必须有清晰可见的纸张颗粒纹理与轻微纤维感。\n- 油墨（每份 deck 只允许 2–3 色组合，常用：荧光粉 #FF48B0 + 钴蓝 #2A47B0；或芥末黄 #E2B441 + 翠绿 #00A878；或荧光橙 #FF6B35 + 海军蓝 #1B3A5C）。\n- 套印效果：色块边缘必须模拟 Riso 套印偏移（misregistration），相邻 2 色重叠区域显示混色（粉+蓝=深紫等），偏移 2–4px。\n- 网点纹理（halftone）：所有色块都不是纯实色，而是粗网点（线数 25–45 lpi）渐变填充，远看实色近看见点。\n- \"黑色\"：避免纯黑，用深海军蓝 #1A2A4A 或暖黑 #2A2118 替代。\n\n【字体】\n- 主标题：超粗 display 体（思源黑体 Heavy / Druk 风格），可压扁拉伸\n- 副标题：手写或 wood-type 复古衬线\n- 正文：思源黑体 Regular 或 Avant Garde 风格几何无衬线，字距偏紧\n\n【封面页构图】\n海报式：超大主标题占画面 50%+，可 2 行错位排版（一行荧光粉、一行钴蓝），下方副标题在一个粗描边色块里；背景叠加 1–2 个大色块几何（圆、半圆、不规则形），有套印偏移；角落点缀小的网点星形、波浪线、对话气泡。\n\n【内容页构图】\nzine spread 风：内容分成 3–4 个色块区域，区域形状不规则（圆角矩形、不对称六边形），每个区域填一种网点色，文字反白或叠在色块上；要点之间用粗手绘箭头或感叹号点缀；可在某处放一个 illustration 元素（手、眼睛、对话气泡，全部 monoline + halftone 填充）。\n\n【数据页构图】\n数据部分用 zine 海报风：数字超大、粗、错位排版（数字本身有套印偏移效果）；旁边放粗描边的几何图表（实心圆 + 网点扇形 = 饼图，粗矩形 = 柱图），所有图形带 halftone；底部用一行 wood-type 大字给结论。\n\n【禁止】\n- 严禁使用 3D、玻璃、渐变（除了 halftone 网点渐变）\n- 严禁使用纯白背景或纯黑文字\n- 严禁使用现代极简平面图标，要用复古手感图形\n- 别让 2 种色之间没有套印偏移与混色，要有\"印刷感\"\n\n## 适用场景\n创意工作室介绍、文创品牌、独立播客、艺术展览、市集海报、Zine 文化、复古活动 PPT。\n\nFile v1.0.3:styles/swiss-grid.md\n\n# 瑞士国际主义 / Swiss Grid\n\n## 风格ID\nswiss-grid\n\n## 风格名称\n瑞士国际主义 · Swiss Grid\n\n## 风格描述\n对标 Müller-Brockmann、Massimo Vignelli 与 1960s 瑞士平面设计学派：极严谨的模块化网格 + Helvetica 风字体 + 三原色色块 + 大量留白 + 清晰对齐。理性、克制、有学术权威感。适合学术报告、设计周演讲、严肃数据汇报、博物馆展陈。\n\n## 基础提示词模板\n\n你是一位国际主义平面设计师，对标 Josef Müller-Brockmann、Massimo Vignelli、Wim Crouwel 的瑞士学派。请生成 16:9 横版幻灯片。\n\n【核心视觉】\n- 背景：纯白 #FFFFFF（默认）；或在封面 / 章节页用整块色 — Bauhaus 红 #E10600、深蓝 #003DA5、镉黄 #FFE600（每页只允许一种纯色）。\n- 文字：纯黑 #000000；色块上反白 #FFFFFF。\n- 网格：12 列严格基线网格，所有元素必须对齐到网格；元素四角全部直角，绝无圆角、阴影、渐变。\n- 装饰：唯一允许的\"装饰\"是色块（矩形、正圆、半圆），用作视觉重量平衡，不带任何效果。\n\n【字体】\n- 全部使用思源黑体 / 苹方（中文）+ Inter / Helvetica Neue（英文混排）\n- 主标题：Bold/Heavy，字号巨大；行距紧凑（行高 1.0–1.1）\n- 正文：Regular，左对齐，绝不两端对齐\n- 字距：保持默认，绝不字间放宽\n\n【封面页构图】\n极致经典构图：主标题左下对齐，超大粗体，可 2–4 行；右上 1/3 区域放一个色块（实心矩形或正圆，单色，三原色之一）；标题上方一条 2px 黑色细线 + 一行小型副标题（小写、左对齐）；底部细小一行品牌 / 编号 / 日期。\n\n【内容页构图】\n12 列网格严格执行：标题占 12 列宽（左上）+ 下方 4px 黑色横线；主体内容用 4/8/12 col 宽度的文本块组合，要点用纯小圆点或纯短横线；可在某 col 嵌入纯色色块作为重量平衡。整页元素 ≤ 6 个，留白 ≥ 50%。\n\n【数据页构图】\n数据用 typography 表达：超大数字（占画面 30%+）左对齐，下方一行说明 + 一条横线；图表必须是最简形式 — 实心横条（单色，对齐网格）、纯圆环（无渐变无标签外围）、表格（无装饰边框，只用 typography 对齐）；颜色只用三原色 + 黑灰白。\n\n【禁止】\n- 严禁圆角、阴影、渐变、3D、霓虹、玻璃效果\n- 严禁手写体、衬线体、装饰字体\n- 严禁居中正文（除非整页只有 1 个元素）\n- 严禁堆叠多色，每页色块 ≤ 1 种 + 黑白\n- 严禁使用 emoji 和卡通图标\n\n## 适用场景\n学术报告、设计周演讲、博物馆展陈、严肃数据汇报、政府白皮书、城市规划、建筑事务所、艺术馆策展。\n\nArchive v1.0.2: 23 files, 67793 bytes\n\nFiles: agents/openclaw.yaml (994b), generate_ppt.py (21115b), image_generator.py (17985b), install_as_skill.sh (3784b), README.en.md (8579b), README.md (7108b), render_template.py (6329b), requirements.txt (81b), SKILL.md (11293b), slides_plan.json (4895b), styles/clean-tech-blue.md (2875b), styles/dark-aurora.md (2921b), styles/editorial-mono.md (2835b), styles/gradient-glass.md (2593b), styles/hand-sketch.md (2952b), styles/japanese-wabi.md (2852b), styles/risograph.md (2983b), styles/swiss-grid.md (2783b), styles/vector-illustration.md (2733b), styles/y2k-chrome.md (2960b), template_analyzer.py (30655b), templates/viewer.html (9723b), _meta.json (133b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: gpt-image2-ppt\ndescription: Generate visually striking PPT slides via OpenAI's gpt-image-2 — 10 curated sty\n\nArchive v1.0.1: 23 files, 67538 bytes\n\nFiles: agents/openclaw.yaml (994b), generate_ppt.py (20960b), image_generator.py (17789b), install_as_skill.sh (3784b), README.en.md (8579b), README.md (7108b), render_template.py (6329b), requirements.txt (81b), SKILL.md (11293b), slides_plan.json (4895b), styles/clean-tech-blue.md (2875b), styles/dark-aurora.md (2921b), styles/editorial-mono.md (2835b), styles/gradient-glass.md (2593b), styles/hand-sketch.md (2952b), styles/japanese-wabi.md (2852b), styles/risograph.md (2983b), styles/swiss-grid.md (2783b), styles/vector-illustration.md (2733b), styles/y2k-chrome.md (2960b), template_analyzer.py (30655b), templates/viewer.html (9723b), _meta.json (133b)\n\nArchive v1.0.0: 22 files, 65594 bytes\n\nFiles: generate_ppt.py (20685b), image_generator.py (16827b), install_as_skill.sh (3784b), README.en.md (8148b), README.md (6751b), render_template.py (6329b), requirements.txt (81b), SKILL.md (10937b), slides_plan.json (4895b), styles/clean-tech-blue.md (2875b), styles/dark-aurora.md (2921b), styles/editorial-mono.md (2835b), styles/gradient-glass.md (2593b), styles/hand-sketch.md (2952b), styles/japanese-wabi.md (2852b), styles/risograph.md (2983b), styles/swiss-grid.md (2783b), styles/vector-illustration.md (2733b), styles/y2k-chrome.md (2960b), template_analyzer.py (30655b), templates/viewer.html (9723b), _meta.json (133b)","readmeExcerpt":"Skill: Gpt Image2 Ppt Skills Owner: juneyaooo Summary: Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / W... Tags: deck:1.0.4, latest:1.1.1, openai-images:1.0.4, ppt:1.0.4, presentation:1.0.4, slides:1.0.4, template-clone:1.0.4 Version history: v1.1.1 | 2026-05-11T11:29:03.697Z | user - fix: add .gitattributes t","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# 一行：自动渲染 + vision 抽风格 + 出图。本机有 LibreOffice 或 docker 镜像即可\npython3 scripts/generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict"},{"language":"bash","snippet":"python3 scripts/render_template.py company-template.pptx\n# -> <cwd>/template_renders/company_template/page-01.png ... page-NN.png"},{"language":"bash","snippet":"git clone git@github.com:JuneYaooo/gpt-image2-ppt-skills.git\ncd gpt-image2-ppt-skills\nbash install_as_skill.sh --target claude   # Claude Code\n# 或\nbash install_as_skill.sh --target codex    # Codex\n# 仅当你走 API 直连模式时，再编辑对应目录下的 .env 填入 API_KEY"},{"language":"bash","snippet":"OPENAI_BASE_URL=https://api.openai.com    # 或任意 OpenAI 兼容中转站\nOPENAI_API_KEY=sk-...\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                     # low / medium / high / auto\n\n# 可选：模板克隆模式的 vision 分析 backend。\n# 默认让调用本 skill 的 agent 自己看图（多模态 Claude Code / 多模态 codex 皆可）,\n# 只有 agent 本身是纯文本模型时才需要外挂下面这组。\n# 不内置默认 endpoint，请填你自己信任的服务,否则就别填。\n# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1\n# VISION_API_KEY=sk-...\n# VISION_MODEL_NAME=gemini-3.1-pro-preview   # 或 gpt-4o / claude-3.5-sonnet 等任意多模态 SKU"},{"language":"text","snippet":"{style 基础提示词模板}\n\n---\n\n现在请生成本组中的【{封面页/内容页/数据页}】，{对应 hint}\n本页要呈现的内容如下（请按本风格美学重新设计版式）：\n\n{slide content}\n\n【强制语言与字体要求】\n1. 所有文字必须使用简体中文，严禁英文（专有名词除外）\n2. 中文字体使用思源黑体或苹方，严禁草书、艺术字\n3. 标题粗体，正文常规，字号对比清晰\n\n【画面比例 — 强制】16:9 横版宽屏 (landscape, widescreen)，宽度明显大于高度，绝对不要方图或竖图。"},{"language":"bash","snippet":"python3 -c \"\nfrom pptx import Presentation\nfrom pptx.util import Inches\nprs = Presentation()\nprs.slide_width = Inches(13.333)\nprs.slide_height = Inches(7.5)\nblank = prs.slide_layouts[6]\nimport os, glob\nfor p in sorted(glob.glob('outputs/<timestamp>/images/slide-*.png')):\n    slide = prs.slides.add_slide(blank)\n    slide.shapes.add_picture(p, 0, 0, width=prs.slide_width, height=prs.slide_height)\nprs.save('outputs/<timestamp>/<title>.pptx')\nprint('done')\n\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: gpt-image2-ppt\ndescription: Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Retro Vector) plus a template-clone mode that mimics any user-supplied .pptx; ships an HTML viewer 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.\n---\n\n# gpt-image2-ppt -- 用 gpt-image-2 生成 PPT\n\n把一份 markdown 大纲（或 `slides_plan.json`）+ 一种视觉风格，直接喂给 OpenAI 官方 Images API（`gpt-image-2`），逐页出图，最后拼成一个键盘可翻页的 HTML viewer + 16:9 .pptx。\n\n## 十种内置风格\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n> 风格选择原则：技术类首选 `dark-aurora` / `gradient-glass`，商务类首选 `clean-tech-blue` / `editorial-mono`，文化生活类首选 `japanese-wabi` / `vector-illustration`，潮文娱类首选 `risograph` / `y2k-chrome`，学术类首选 `swiss-grid`，工作坊与早期创意类首选 `hand-sketch`。\n\n## 模板克隆模式\n\n直接给 skill 一个 .pptx 模板，后续所有页都仿这个模板。\n\n```bash\n# 一行：自动渲染 + vision 抽风格 + 出图。本机有 LibreOffice 或 docker 镜像即可\npython3 scripts/generate_ppt.py \\\n  --plan slides_plan.json \\\n  --template-pptx ./company-template.pptx \\\n  --template-strict\n```\n\n`--template-strict` 表示每页都把模板对应页作为 image reference 喂给 gpt-image-2，仿真度最高。\n\n### 模板渲染：本机不需要操作 PowerPoint\n\nskill 自带 `render_template.py`，把 .pptx 自动渲染成每页 PNG，存到 `<cwd>/template_renders/<stem>/page-NN.png`。\n\n后端按优先级自动挑：\n1. 本机 `libreoffice` / `soffice` 命令（最快）\n2. 本机 docker + `linuxserver/libreoffice` 镜像（首次拉 ~2.5GB）\n3. PDF -> PNG 走 `pymupdf`（已在 requirements）；没装就用 `pdf2image` + poppler\n\n如果两种 LibreOffice 都没有，会让用户手动从 PowerPoint/Keynote/WPS 导出每页 PNG，命名 `page-01.png` 起按字典序对应页码。\n\n跑 `generate_ppt.py --template-pptx ...` 时如果省略 `--template-images` 会自动调一次渲染；也可以手动先跑一次：\n\n```bash\npython3 scripts/render_template.py company-template.pptx\n# -> <cwd>/template_renders/company_template/page-01.png ... page-NN.png\n```\n\n### 仿模板的两层缓存\n\n| 资料 | 路径 | 用途 |\n| --- | --- | --- |\n| 模板每页 PNG | `<cwd>/template_renders/<stem>/page-NN.png` | LibreOffice 一次渲染长期复用 |\n| Vision 风格分析 | `<cwd>/template_cache/<sha256>.json` | gemini-3.1-pro-preview 一次分析长期复用 |\n| 生成产物 | `<cwd>/outputs/<timestamp>/` | 每次新跑都新目录 |\n\n三者都在调用者 cwd 下，与项目自然同进退；建议把 `template_renders/`、`template_cache/`、`outputs/` 加进项目的 `.gitignore`。\n\n**vision 模型(让 agent 自己判断要不要配)**：\n\n- **如果当前运行本 skill 的 agent 自己就是多模态的**（Claude Code 走 Claude Opus/So"},{"path":"README.md","content":"<div align=\"center\">\n\n# gpt-image2-ppt-skills\n\n**用 OpenAI `gpt-image-2` 一键生成视觉强烈的 PPT。**\n\nClaude Code / Codex / OpenClaw Skill。装进 agent 后，用一句自然语言生成 16:9 高清图片 + 可键盘翻页的 HTML viewer + 打包好的 `.pptx`，也可以仿任意 `.pptx` 模板出全新内容。\n\n[![GitHub stars](https://img.shields.io/github/stars/JuneYaooo/gpt-image2-ppt-skills?style=flat)](https://github.com/JuneYaooo/gpt-image2-ppt-skills/stargazers)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](./LICENSE)\n[![Python](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-Skill-orange.svg)](https://www.anthropic.com/claude-code)\n[![gpt-image-2](https://img.shields.io/badge/OpenAI-gpt--image--2-black.svg)](https://platform.openai.com/docs/guides/images)\n\n🌐 **English** → [docs/README.en.md](./docs/README.en.md)\n\n</div>\n\n---\n\n## 🎬 效果演示：喂一张模板，仿出一套新内容\n\n<table>\n<tr>\n<th width=\"50%\">输入：任意一页参考模板（.pptx / 图片）</th>\n<th width=\"50%\">输出：本 skill 仿制 + 换内容</th>\n</tr>\n<tr>\n<td><img src=\"docs/assets/template-demo-input.jpg\" width=\"100%\" alt=\"input template\"></td>\n<td><img src=\"docs/assets/template-demo-output.jpg\" width=\"100%\" alt=\"generated output\"></td>\n</tr>\n<tr>\n<td align=\"center\"><sub>英文信息图模板（Mass Media Infographics）</sub></td>\n<td align=\"center\"><sub>同一版式 / 同一配色 / 同一插画语汇，内容换成「普通人怎么用 AI 做自媒体」</sub></td>\n</tr>\n</table>\n\n---\n\n## ✨ 能做什么\n\n- 🎨 **十套精选风格** — Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Riso / Wabi / Swiss Grid / Hand Sketch / Y2K Chrome / Vector Illustration，每套都细分 `cover` / `content` / `data` 三种构图\n- 🪄 **模板克隆模式** — 丢一个 `.pptx` 进去，自动渲染 + vision 抽风格 + JSON Schema 复刻，像上面那张图一样仿版式换内容\n- 🎮 **HTML viewer + `.pptx` 双产出** — 键盘翻页 / 空格自动播放 / ESC 全屏 / 触摸滑动，同时打包成 16:9 `.pptx` 直接用\n- ⚡ **默认 10 路并发出图** — 10 页 ~30 秒出完\n- 🔁 **双后端** — `openai` 直调（需 key）或 `codex` CLI（复用 codex 登录，无需在本 skill 配 key）\n- 🤖 **官方 OpenAI Images API** — 模型 `gpt-image-2`，`base_url` 可换任意 OpenAI 兼容中转\n\n## 🎨 十种内置风格\n\n> 下图为 10 套风格在同一主题「**如何用 gpt-image-2 做 PPT**」下各生成一张封面的对照。全部由 `gpt-image-2` 直出，未经 PS。\n\n![10 种风格封面对照 · 同一主题直出](docs/assets/style-gallery.jpg)\n\n| 风格 ID | 一句话定位 | 适用场景 |\n| --- | --- | --- |\n| `gradient-glass` | Apple Vision OS / Spatial Glass | AI 产品发布、技术分享、创意提案 |\n| `clean-tech-blue` | Stripe / Linear 级蓝白 | 融资路演、商业计划书、企业战略 |\n| `vector-illustration` | 复古矢量插画 + 黑描边 | 教育培训、品牌故事、社区分享 |\n| `editorial-mono` | Kinfolk / Monocle 编辑设计 | 品牌发布、文化访谈、读书分享 |\n| `dark-aurora` | Linear / Vercel 深色霓虹 | AI 产品、开发者工具、技术分享 |\n| `risograph` | Riso 双套色印刷 + 网点纹理 | 创意工作室、文创品牌、独立 zine |\n| `japanese-wabi` | 无印 / 原研哉式侘寂 | 茶道、生活方式、奢侈品、文化讲座 |\n| `swiss-grid` | Bauhaus / Vignelli 国际主义网格 | 学术报告、博物馆展陈、严肃汇报 |\n| `hand-sketch` | Sketchnote / 白板手绘 | 工作坊、产品 brainstorming、培训 |\n| `y2k-chrome` | Y2K 千禧液态金属 + 蝴蝶贴纸 | 潮牌、文娱、品牌联名、Z 世代营销 |\n\n---\n\n## 🚀 安装\n\n### 方式一：让 AI 自己装（推荐）\n\n把下面这段 prompt 丢给你的 AI 助手（Claude Code / OpenClaw / Codex / Cursor / Trae / Hermes Agent 都行），它会自动完成安装：\n\n```\n帮我安装 gpt-image2-ppt-skills：\nhttps://raw.githubusercontent.com/JuneYaooo/gpt-image2-ppt-skills/main/docs/install.m"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn76gz2yb53tdjgpmb3ydjexax82g5yr\",\n  \"slug\": \"gpt-image2-ppt\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1778498943697\n}"},{"path":"AGENTS.md","content":"# AGENTS.md -- 给 codex / aider / cursor 等 agent 的入口说明\n\n本仓库是一个用 OpenAI `gpt-image-2` 生成 PPT 幻灯片的工具包，**权威文档在 [`SKILL.md`](./SKILL.md)**。任何涉及\"做一份 PPT / 生成幻灯片 / 出图 / 改风格 / 按模板仿作\"的请求，都先完整读 `SKILL.md` 再动手，不要凭本文件的摘要就开跑 -- 下面只是索引。\n\n## 一分钟索引\n\n- **主入口 CLI**：`python3 scripts/generate_ppt.py --plan slides_plan.json --style styles/<id>.md`\n- **内容源稿**：先写 `slides_plan.md`（人审阅），再 `python3 scripts/md_to_plan.py slides_plan.md -o slides_plan.json`；json 标为 derived，不手改\n- **十种内置风格**：见 `styles/` 目录 + `SKILL.md` 顶部表格\n- **模板克隆**：`--template-pptx path/to/xxx.pptx --template-strict`，vision 分析 + 缓存细节在 `SKILL.md` 的\"模板克隆模式\"一节；**如果你自己就是多模态 agent**(多模态 Claude / GPT / 等)，可以直接 `Read` `template_renders/<stem>/page-*.png` 自己抽风格写 `template_cache/<sha256>.json`，不用外挂 `VISION_*`\n- **冒烟策略**：先 `--slides 1` 出封面，确认后再跑全量\n- **产物**：`<cwd>/outputs/<timestamp>/{images/, index.html, prompts.json, <title>.pptx}`\n\n## 调用规范（对 agent 的硬约束）\n\n1. **先问三件事**：内容 / 观众、风格偏好（或是否带 .pptx 模板）、是否先 `--slides 1` 冒烟\n2. **永远先 md 后 json**：用户改文案改 md，不手改 json\n3. **先冒烟再全量**：`--slides 1` 的封面效果用户认可后再跑余下页\n4. **告知产物路径**：跑完把 `outputs/<timestamp>/index.html` 和 `.pptx` 路径明确告诉用户\n\n## 凭据 / backend\n\n- 默认后端 `openai`，需在 scoped 位置（`<script_dir>/.env`、`~/.codex/skills/.../.env`、`~/.claude/skills/.../.env` 或 `$GPT_IMAGE2_PPT_ENV`）配 `OPENAI_API_KEY`\n- **如果你就是 codex**：走「原生 image_generation 出图」路径——直接用你自带的 `image_generation` tool 出图，**不要**跑 `generate_ppt.py --backend codex`（那是给 Claude Code 等非 codex caller 用的，会 spawn 一个多余的 codex 子进程）。完整流程见 `SKILL.md` 的「如果你就是 Codex agent」一节\n- 脚本**不会**向上递归读取项目目录的 `.env`，避免误吃无关密钥\n\n## 不要做的事\n\n- 不要手改 `slides_plan.json`（改 md 再转）\n- 不要跳过 `SKILL.md`\"模板页面挑选 / 复用原则\"直接用同一个 layout 给多页 slide 当 reference\n- 不要在没有 `OPENAI_API_KEY` 且没有本地 codex CLI 的情况下强跑 -- 先检查环境\n\n## 同步提醒\n\n本文件是薄索引。如果 `SKILL.md` 有新增章节或流程变更，只在 `SKILL.md` 里维护，本文件的锚点列表按需补；**正文描述不要复制到这里**，避免两边漂移。"},{"path":"docs/install.md","content":"# gpt-image2-ppt-skills 安装指南（给 AI agent 读）\n\n> 本文档是**让 AI 助手自动完成安装**的可执行指引。Claude Code / OpenClaw / Codex / Cursor / Trae / Hermes Agent 等任一 agent 按以下步骤执行即可。\n>\n> 人类用户请**不要**手动照抄下面的步骤，直接把这份 URL 扔给你的 AI 助手，它自己会跑通。\n\n## 项目一句话介绍\n\n`gpt-image2-ppt-skills` 是一个 Claude Code / Codex / OpenClaw Skill，用 OpenAI `gpt-image-2` 生成视觉强烈的 PPT（10 套内置风格 + 支持仿任意 `.pptx` 模板），产出 HTML viewer + 16:9 `.pptx`。\n\n仓库：https://github.com/JuneYaooo/gpt-image2-ppt-skills\n\n## 前置依赖（agent 请先检查）\n\n- **必需**：`git`、`python3`（3.8+）、`pip`\n- **可选**：`libreoffice` 本机命令，或 `docker` + `linuxserver/libreoffice` 镜像（仅模板克隆模式需要，用来把 `.pptx` 渲染成 PNG）\n\n如果缺 `git` / `python3`，先用系统包管理器装好；`libreoffice` 可以留到用户要用模板克隆模式时再装。\n\n## 安装步骤\n\n### 1. 克隆仓库到临时目录\n\n```bash\ngit clone https://github.com/JuneYaooo/gpt-image2-ppt-skills.git /tmp/gpt-image2-ppt-skills\ncd /tmp/gpt-image2-ppt-skills\n```\n\n### 2. 跑安装脚本\n\n```bash\n# Claude Code\nbash install_as_skill.sh --target claude\n\n# Codex\nbash install_as_skill.sh --target codex\n```\n\n这一步会：\n- 把项目文件拷贝到对应 agent 的 skill 目录\n- `pip install -r requirements.txt` 装齐 Python 依赖\n- 从 `.env.example` 生成对应目录下的 `.env` 骨架\n\n安装脚本是**交互式**的，如果目标目录已存在会问是否覆盖；agent 可以用 `yes | bash install_as_skill.sh` 自动选\"是\"，或先检查目录是否存在再决定。\n\n### 3. 只有在走 API 直连时才配置 .env\n\n如果当前 agent 就是带原生图片生成能力的 Codex，可以跳过这一步，直接重启后走 `SKILL.md` 里的原生出图路径。\n\n否则，agent 需要主动问用户要 API key 并写进 `.env`：\n\n> 请提供你的 OpenAI API key（或任意 OpenAI 兼容中转的 base_url + key）。\n\n然后把以下内容写进对应目录下的 `.env`（保留已有注释，只填值）：\n\n```bash\nOPENAI_BASE_URL=https://api.openai.com    # 或用户提供的兼容中转 URL\nOPENAI_API_KEY=sk-...                     # 用户提供的 key（必需）\nGPT_IMAGE_MODEL_NAME=gpt-image-2\nGPT_IMAGE_QUALITY=high                    # low / medium / high / auto\n```\n\n> 如果用户没有 OpenAI 官方 key，agent 可以告诉用户：本 skill 也支持 `--backend codex` 复用本地 codex CLI 登录，不需要在本 skill 配 key；或者用任意 OpenAI 兼容中转站（把 `OPENAI_BASE_URL` 改成中转站地址即可）。\n\n### 4. 提示用户重启 agent\n\n装完之后，告诉用户：\n\n> 已安装完成。请**重启当前 agent**（Claude Code / Codex / 其它）让 skill 生效。\n\n### 5.（可选）清理临时目录\n\n```bash\nrm -rf /tmp/gpt-image2-ppt-skills\n```\n\n## 冒烟测试（用户重启 agent 后）\n\n告诉用户直接跟 agent 说：\n\n> 帮我用 **gpt-image2-ppt** 生成一份关于「猫为什么是液体」的 3 页 PPT，风格用 `gradient-glass`。\n\n正常的话 agent 会自己写 `slides_plan.json`、跑 `scripts/generate_ppt.py --slides 1` 先出封面、再跑全量，最后给出 HTML viewer 和 `.pptx` 的路径。\n\n## 常见问题（给 agent 参考）\n\n- **`ModuleNotFoundError: pymupdf`** → 在实际安装目录里重跑 `pip install -r requirements.txt`\n- **`libreoffice: command not found`**（仅模板克隆模式）→ Linux: `apt install libreoffice`；macOS: `brew install --cask libreoffice`；或让用户切换到内置 10 套风格之一，不走模板克隆\n- **`OPENAI_API_KEY 未设置`** → 如果你不是走 Codex 原生路径，回到步骤 3，检查 `.env` 文件路径和内容\n- **agent 识别不到 skill** → 确认目录装到了对应 agent 的技能目录，并且完全重启过当前 agent\n\n## 完成标志\n\n以下三条都满足即视为安装成功：\n\n1. 对应安装目录下的 `SKILL.md` 存在\n2. 如果走 API 直连模式，对应安装目录下的 `.env` 存在且包含可用 `OPENAI_API_KEY`\n3. agent 重启后，用户用自然语言要求生成 PPT 时能触发本 skill\n\n装完不用逐字读 `SKILL.md`，但需要告诉用户：\"你可以直接用自然语言要 PPT，也可以把任意 `.pptx` 模板丢给我做克隆。\""}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / W... Skill: Gpt Image2 Ppt Skills Owner: juneyaooo Summary: Generate visually striking PPT slides via OpenAI's gpt-image-2 -- 10 curated styles (Spatial Glass / Tech Blue / Editorial Mono / Dark Aurora / Risograph / W... Tags: deck:1.0.4, latest:1.1.1, openai-images:1.0.4, ppt:1.0.4, presentation:1.0.4, slides:1.0.4, template-clone:1.0.4 Version history: v1.1.1 | 2026-05-11T11:29:03.697Z | user - fix: add .gitattributes t","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1198,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T01:17:06.374Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T01:17:06.374Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T03:55:34.875Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}