← 返回
未分类

可以的2

Generate professional PowerPoint presentations locally. Use when the user asks to make a PPT, create slides, build a deck, generate a slideshow, design a keynote, make a presentation, or produce report/proposal materials. Also applies to incremental edits: modifying a single slide, changing theme or color scheme, adding or removing pages, or exporting existing content to .pptx. Trigger this skill for ANY slide or PPT creation and editing task.
>-
yazi测试账号
未分类 community v1.0.1 2 版本 99166.7 Key: 无需
★ 0
Stars
📥 119
下载
💾 0
安装
2
版本
#latest

概述

AI PPT Maker Skill

> [!IMPORTANT]

> ## 🌐 Language & Communication Rule

>

> - Response language: Always match the language of the user's input. If the user writes in Chinese, respond in Chinese; if in English, respond in English.

> - Explicit override: If the user requests a specific language (e.g. "reply in English" / "请用中文回答"), use that language instead.


Conventions

  • SKILL_DIR: The directory containing this SKILL.md file — no need to locate it separately.
  • dist/export-pptx.mjs is a ~2 MB compiled bundle. Reading it wastes tokens and the content is not human-readable. Execute it directly with node.

Reference Documents

DocumentPathWhen to Read
------------------------------
Research Collection Guidereferences/research-collection.mdMUST read before generating research.md
HTML Technical Specreferences/html-spec.mdMUST read before generating any HTML slide
PPT Content Design Guidereferences/ppt-design.mdRead when planning outline and content_spec
Slide Generation Guidereferences/slide-generation.mdRead before Step 6 to choose serial vs. parallel mode

How It Works

This skill uses a Research → HTML → PPTX three-stage pipeline:

  1. research.md as the unified content layer — Before drafting the outline, consolidate all content material into /research.md. This applies whether the source is web research results, user-provided files, or AI-organized knowledge. Downstream outline planning and HTML generation always pull from this file — never from context memory.
  1. presentation.json as the single source of truth — Records the title, theme, per-slide metadata, and file mappings. All create/read/update/delete operations go through this file, ensuring cross-slide consistency and reliable file discovery during export.
  1. HTML as the intermediate representation — Each slide is a standalone HTML file (1280×720 canvas) using Tailwind CSS + Lucide icons for layout. HTML is chosen over direct PPTX manipulation because LLMs generate HTML/CSS naturally, the visual expressiveness far exceeds raw PPTX XML, and slides can be previewed directly in a browser.
  1. Per-slide isolated generation — Each HTML file is generated independently with no shared context between slides. Style consistency is enforced solely through the theme field. Default mode is serial (one slide at a time); parallel mode (sub-agents) is only enabled when the current platform is confirmed to support sub-agent file writes (e.g. Claude Code).

Project File Structure

<project_dir>/
├── research.md          ← Content layer — single source for all slide content
├── presentation.json    ← State file — slide registry and metadata
└── slides/
    ├── slide_001.html
    ├── slide_002.html
    └── ...

presentation.json Format

{
  "title": "Presentation Title",
  "theme": "Natural-language style description (see ppt-design.md)",
  "slides": [
    {
      "file": "slide_001.html",
      "type": "title | section | content",
      "title": "Slide Title",
      "content_spec": "What this slide covers and how it is structured (see below)",
      "local_theme": "Optional — describe special visual treatment for this slide only (e.g. cover uses a contrasting color, data slide uses dark background)"
    }
  ]
}
  • The order of the slides array defines slide order. The export tool processes slides in array order.
  • file is a stable identifier — never rename a file after it is created. To add or remove slides, modify only the JSON array.
  • Naming rule: slide_.html (e.g. slide_001.html). Indices are monotonically increasing and are never reused after deletion.
  • If content_spec or other field values contain ASCII double-quotes ("), escape them to prevent JSON parse failures.

content_spec: Slide Content Summary

content_spec describes what specific points this slide presents — list the topical directions, but leave the actual copy and data to be drawn from research.md at generation time. Core principle: say clearly "what this slide is about and how it is divided", without hard-coding copy or specifying layout.

See references/ppt-design.md for writing conventions and examples.


Workflow

> [!CAUTION]

> ## 🚨 Global Execution Discipline (MANDATORY)

>

> The following rules have the highest priority. Violating any one of them constitutes execution failure:

>

> 1. SERIAL EXECUTION — Steps MUST be executed in order. Non-BLOCKING adjacent steps may proceed continuously once prerequisites are met, without waiting for the user to say "continue".

> 2. ⛔ BLOCKING = HARD STOP — Steps marked ⛔ BLOCKING require a full stop. The AI MUST wait for an explicit user response and MUST NOT make any decisions on the user's behalf.

> 3. NO SPECULATIVE EXECUTION — Pre-generating content for a later step while still executing an earlier step is FORBIDDEN (e.g. writing slide HTML during outline planning).

> 4. GATE BEFORE ENTRY — Each step lists its prerequisites (🚧 GATE). These MUST be verified before starting that step.

> 5. DECLARE SUCCESS ONLY AFTER VERIFICATION — Do not declare a step complete until its checkpoint conditions are confirmed.


Core Workflow (Full Generation)


Step 1: Gather Requirements

🚧 GATE: User has initiated a PPT creation request.

Ask the user about: topic, purpose, target audience, desired page count, and style preference. Find out whether the user already has source material.

Checkpoint — Requirements understood. Proceed to Step 2.


Step 2: Generate research.md

🚧 GATE: Step 1 complete; requirements are clear.

Read references/research-collection.md. Based on the user's situation, choose the appropriate mode and write all content material to /research.md:

ModeWhen to UseAction
---------------------------
Web ResearchTopic involves recent data, industry trends, or specialized knowledgeCall search tools to gather information
Organize User MaterialUser has provided text, files, or documentsFormat and structure only — do not add or remove content
AI-Organized ContentGeneral or evergreen topicAI organizes content from existing knowledge

Checkpoint — research.md written. Proceed to Step 3.


Step 3: Plan Outline

🚧 GATE: Step 2 complete; research.md exists and contains content.

Read references/ppt-design.md. Using content from research.md, design each slide's type / title / content_spec. Write content_spec as topical direction only — no finalized copy, no layout prescriptions.

Checkpoint — Outline planned. Proceed to Step 4.


Step 4: Present Plan to User

🚧 GATE: Step 3 complete; outline and theme are ready.

BLOCKING: Present the full outline (slide list + theme) to the user and wait for explicit confirmation.

> ❌ NEVER proceed to Step 5 or any subsequent step before receiving explicit user confirmation.

Checkpoint — User confirmed. Proceed to Step 5.


Step 5: Initialize Project

🚧 GATE: Step 4 complete; user has confirmed the outline.

  • Create /slides/ directory.
  • Write /presentation.json using a file write tool. Follow the format defined in the presentation.json Format section above.

Checkpoint — presentation.json written, slides/ directory created. Proceed to Step 6.


Step 6: Generate Slides (HTML)

🚧 GATE: Step 5 complete; presentation.json is valid and slides/ directory exists.

Read references/slide-generation.md and select serial or parallel mode based on the current platform. Each slide MUST be generated with simultaneous reference to both research.md and references/html-spec.md.

Checkpoint — All slide HTML files generated. Proceed to Step 7.


Step 7: Validate & Fix Icons

🚧 GATE: Step 6 complete; all HTML files exist in slides/.

Run the icon validation script to automatically fix invalid Lucide icon names:

node "$SKILL_DIR/scripts/validate-icons.mjs" "<project_dir>"

The script fetches the latest Lucide icon list from CDN, scans all data-lucide references across all HTML files, and fuzzy-replaces invalid icon names with the closest valid match.

> ⚠️ If the output contains items flagged "⚠ recommend manual review" (large edit distance), inspect those icons for semantic correctness and manually replace with a more appropriate icon if needed.

Checkpoint — Icon validation complete, all invalid icons fixed. Proceed to Step 8.


Step 8: Export .pptx

🚧 GATE: Step 7 complete; all HTML files are icon-validated.

See the Export to .pptx section below.

Checkpoint — .pptx exported successfully. Workflow complete.


Incremental Edit Rules

When making partial changes to an existing project (modifying a slide, adding or removing pages, changing the theme, etc.), select the relevant steps from the core workflow based on user intent and follow these constraints:

Filenames are immutable: HTML filenames on disk are never renamed after creation. Indices are monotonically increasing and never reused. When adding a new slide, take the current maximum index + 1. To remove a slide, delete its entry from the slides array; the disk file may be kept or deleted.

Minimum-change principle: Choose the least-invasive operation for the type of change:

Change TypeOperation
------------------------
Text / numbers onlyDirect string replacement
Style / color / layout onlyLocal edit — do not touch copy
Keep visuals, change copyReplace text nodes only — preserve all class / style attributes
Keep copy, change visualsPreserve text content — freely restyle color and layout
Full redesignRewrite the entire slide — may re-extract content from research.md

Theme change: Update the theme field in presentation.json, then rewrite all slides in "keep copy, change visuals" mode (use the same execution mode as Step 6 — serial by default).

After any modification: sync content_spec in presentation.json for affected slides, re-run icon validation, then re-export the .pptx.


Export to .pptx

Before first export, check and install fonts (one-time only — missing fonts cause layout calculation errors):

bash "$SKILL_DIR/scripts/check-fonts.sh"           # check
bash "$SKILL_DIR/scripts/check-fonts.sh" --install  # install if not found

Run export (must run outside sandbox — export depends on Playwright headless Chromium):

node "$SKILL_DIR/dist/export-pptx.mjs" <project_dir> --output <output_path>

The export tool automatically validates presentation.json. If validation fails, it outputs specific errors and fix suggestions.

If export fails due to missing Playwright, install it first:

npm init -y && npm install playwright && npx playwright install chromium

Export after every operation. Output filename format: _YYYYMMDD_HHmmss.pptx</code>.</p></div> </div> </div> <div id="tab-versions" class="detail-content"> <div class="detail-section"> <h2>版本历史</h2> <p style="margin-bottom:12px;font-size:14px;color:#94a3b8;">共 2 个版本</p> <ul class="version-list"> <li> <div> <span class="version-tag">v1.0.1</span> <span style="font-size:13px;color:#64748b;margin-left:8px;">Initial release</span> <span style="font-size:11px;color:#5b6abf;margin-left:8px;background:#eef0ff;padding:1px 8px;border-radius:10px;">当前</span> </div> <div style="font-size:12px;color:#94a3b8;"> 2026-06-01 15:26 安全 安全 </div> </li> <li> <div> <span class="version-tag">v1.0.0</span> <span style="font-size:13px;color:#64748b;margin-left:8px;">Initial release</span> </div> <div style="font-size:12px;color:#94a3b8;"> 2026-04-24 13:13 安全 安全 </div> </li> </ul> </div> </div> <div id="tab-security" class="detail-content"> <div class="detail-section"> <h2>安全检测</h2> <div class="sec-grid"> <div class="sec-card"> <h4>腾讯云安全 (Keen)</h4> <div class="sec-status sec-safe"> 安全,无风险 </div> <a href="https://tix.qq.com/search/skill?keyword=376b643ed95d766e5c8332cf970e7cbd" target="_blank">查看报告</a> </div> <div class="sec-card"> <h4>腾讯云安全 (Sanbu)</h4> <div class="sec-status sec-safe"> 安全,无风险 </div> <a href="https://static.cloudsec.tencent.com/html-report-v2/2026/06/01/478904_ef4cb43c86b2983083d97f5d0bc236ce.html?q-sign-algorithm=sha1&q-ak=AKID8JMG1bzBC1dz96qNhssfFftujT1NCoFi&q-sign-time=1781411730%3B1812947730&q-key-time=1781411730%3B1812947730&q-header-list=host&q-url-param-list=&q-signature=f25eee4b2168af4b0fdd94c2fead328633c8b8b7" target="_blank">查看报告</a> </div> </div> </div> </div> <!-- Recommended Skills --> <div style="margin-top:24px;"> <h2 style="font-size:18px;font-weight:600;margin-bottom:16px;">🔗 相关推荐</h2> <div class="rec-grid"> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;"></span> <h3><a href="/s/thisifsa">thisifsa</a></h3> <div class="rec-owner">user_7e25a48a</div> <div class="rec-desc">Use this skill when the user asks to "润色" (polish/refine) any text content — such as "润色这篇文章", "润色一下", "帮我润色", or simila</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 1</span> <span style="color:#5b6abf;">📥 136</span> </div> </div> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;"></span> <h3><a href="/s/test2213">thisis</a></h3> <div class="rec-owner">user_7e25a48a</div> <div class="rec-desc">让任意智能体接入 TAPD、iWiki、工蜂三大内部服务的配置指南。</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 0</span> <span style="color:#5b6abf;">📥 256</span> </div> </div> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;"></span> <h3><a href="/s/1234123">23123</a></h3> <div class="rec-owner">user_7e25a48a</div> <div class="rec-desc">腾讯文档(docs.qq.com)-在线云文档平台,是创建、编辑、管理文档的首选 skill。涉及"新建文档"、"创建文档"、"写文档"、"在线文档"、"云文档"、"腾讯文档"、"docs.qq.com"等操作,请优先使用本 skill。支</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 0</span> <span style="color:#5b6abf;">📥 191</span> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded',function(){ document.querySelectorAll('.detail-tab').forEach(function(btn){ btn.addEventListener('click',function(e){ var tab = this.getAttribute('data-tab'); document.querySelectorAll('.detail-tab').forEach(function(b){b.classList.remove('active')}); document.querySelectorAll('.detail-content').forEach(function(c){c.classList.remove('active')}); this.classList.add('active'); var el = document.getElementById('tab-'+tab); if(el) el.classList.add('active'); }); }); }); </script> <div class="footer"> <p>Skill工具集 © 2026</p> </div></body> </html>