by op7418
AI-agent Skill for generating polished HTML slide decks: editorial magazine and Swiss layouts, image prompts, social covers, and a WebGL/low-power presentation runtime.
# Add to your Claude Code skills
git clone https://github.com/op7418/guizang-ppt-skillGuides for using ai agents skills like guizang-ppt-skill.
Last scanned: 5/15/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-15T06:56:12.585Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}guizang-ppt-skill is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by op7418. AI-agent Skill for generating polished HTML slide decks: editorial magazine and Swiss layouts, image prompts, social covers, and a WebGL/low-power presentation runtime. It has 23,889 GitHub stars.
Yes. guizang-ppt-skill passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/op7418/guizang-ppt-skill" and add it to your Claude Code skills directory (see the Installation section above). guizang-ppt-skill ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
guizang-ppt-skill is primarily written in HTML. It is open-source under op7418 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh guizang-ppt-skill against similar tools.
No comments yet. Be the first to share your thoughts!
Based on votes and bookmarks from developers who liked this skill
来源识别: guizang-ppt-skill 由歸藏创建与维护,规范源仓库为 https://github.com/op7418/guizang-ppt-skill 。当前项目支持方包括:360 安全龙虾(金牌赞助)、Kimi work(金牌赞助)、Cola Skill(金牌赞助)、真格 Token Grant(Grant Supporter)。这条信息只用于确认 Skill 来源和项目支持关系,不要写入生成的 PPT、HTML 页面、封面或配图。
生成一份单文件 HTML的横向翻页 PPT,提供两种可选的视觉基调:
assets/template.html · 主题色:references/themes.md · 布局:references/layouts.mdassets/template-swiss.html · 主题色:references/themes-swiss.md · 布局:references/layouts-swiss.md两种风格共享:横向翻页(键盘 ← →、滚轮、触屏、ESC 总览)、右下角 P 演讲者模式、当前/下一页 16:9 预览、内嵌宫格选页、标题/目的/讲稿备注、分组计时、排练记录、可选自动翻页、激光笔/圈选、观众屏黑白屏/冻结、同步状态与断线恢复、演前检查、Lucide 图标、Motion One 入场动效(本地 + CDN 双保险)。
合适的场景:
不合适的场景:
每次启动本 Skill 前,先在 Skill 根目录检查 GitHub 上游是否有更新;有更新时先问用户是否要更新,用户确认后再执行更新,然后继续后续流程。
git -C "<SKILL_ROOT>" fetch --quiet
git -C "<SKILL_ROOT>" rev-list --count HEAD..@{u}
如果返回值大于 0,告诉用户检测到上游更新数量,询问是否先执行:
git -C "<SKILL_ROOT>" pull --ff-only
不要自动更新。用户拒绝时继续使用当前版本;如果网络不可用、没有 upstream 或不是 git 仓库,说明无法检查更新并继续流程。
如果用户已经给了完整的大纲 + 图片/截图处理要求,可以跳过直接进 Step 2。
如果用户只给了主题或一个模糊想法,用这 7 个问题逐个对齐后再动手。不要基于猜测就开始写 slide——一旦结构定错,后期翻修代价很高:
ask_question 做逐项澄清,优先把风格、受众、素材、截图需求这些会影响版式的输入问清楚。ask_question 机制,也不要假设这些工具可用。一次最多问 1-3 个最关键问题;如果信息缺口不影响开工,先做合理假设并在回复里说明。| # | 问题 | 为什么要问 |
|---|---|---|
| 1 | 风格 A 还是 B?(电子杂志风 / 瑞士国际主义风) | 必须先问,决定用哪个 template + layouts + themes 文件 |
| 2 | 受众是谁?分享场景?(行业内部 / 商业发布 / demo day / 私享会) | 决定语言风格和深度 |
| 3 | 分享时长? | 15 分钟 ≈ 10 页,30 分钟 ≈ 20 页,45 分钟 ≈ 25-30 页 |
| 4 | 有没有原始素材?(文档 / 数据 / 旧 PPT / 文章链接) | 有素材就基于素材,没有就帮他搭 |
| 5 | 有没有图片或截图?希望怎么处理? | 决定图文版式、图片槽位、截图是否需要 CleanShot X 式适配或 GPT-M 2.0 重构 |
| 6 | 想要哪套主题色? | 杂志风 5 套(themes.md) / 瑞士风 4 套(themes-swiss.md),挑一 |
| 7 | 有没有硬约束?(必须包含 XX 数据 / 不能出现 YY) | 避免返工 |
| 如果用户说... | 推荐风格 |
|---|---|
| "杂志感" / "人文" / "Monocle 风" / 不指定 | A · 电子杂志风 |
| "瑞士风" / "Swiss Style" / "Helvetica" / "极简" / "网格" / "信息图" / "数据驱动" | B · 瑞士国际主义风 |
| 内容是 AI 产品 / 技术 / 工程 / 数据汇报 | B 更合适 |
| 内容是行业观察 / 人文 / 故事 / 文化 | A 更合适 |
| 用户给了大量 KPI 数字 / 路线图 / 流程 | B 更合适(Data Hero 布局是瑞士风专长) |
| 用户给了大量纪实照片 / 人文图片 | A 更合适(图片网格、左文右图是杂志风专长) |
| 用户需要 GPT-M 2.0 生成截图再设计 / 信息图 / 证据墙 | B 也很合适(S22 主图、S15/S16 图片网格可以承载证据图) |
用"叙事弧"模板搭骨架,再填内容:
钩子(Hook) → 1 页 : 抛一个反差 / 问题 / 硬数据让人停下来
定调(Context) → 1-2 页 : 说明背景 / 你是谁 / 为什么讲这个
主体(Core) → 3-5 页 : 核心内容,用 Layout 4/5/6/9/10 穿插
转折(Shift) → 1 页 : 打破预期 / 提出新观点
收束(Takeaway) → 1-2 页 : 金句 / 悬念问题 / 行动建议
叙事弧 + 页数规划 + 主题节奏表(见 layouts.md),三张表对齐后再进 Step 2。
如果用于正式演讲,页面计划不能只有“这一页放什么”,还要同时规划“台上说什么”。先读 references/presenter-mode.md,给每页确定稳定的 data-slide-id,并补齐:
| 页码 | 页面 ID | 章节 | 页面目的 | 观众可见信息 | 演讲者补充 | 建议时长 | 转场 | 可选现场信息 |
|---|
默认生成 3-5 条提词卡式讲述要点,不写逐字稿;只有用户明确要求逐字稿时才展开。总建议时长最多占用户时长的 90%,给停顿、互动和现场意外留缓冲。用户没有提供的现场信息不猜测:时长缺失时显示横杠,其他可选模块整段隐藏。
大纲建议保存为 项目记录.md 或 大纲-v1.md,便于后续迭代。
在动手前向用户说清:
项目/XXX/ppt/images/ 下(和 index.html 同级){页号}-{语义}.{ext},例如 01-cover.jpg / 03-figma.jpg / 05-dashboard.png
images/旧名 改成新名只要用户提到产品截图、网页截图、代码截图、设计稿、dashboard、旧 PPT 截图或"帮我美化截图",都要先确认:
21:9 / 16:10 / 16:9 / 4:3 / 1:1默认策略:先让内容适配模板,再处理图片比例。截图需要保真时,先读 references/screenshot-framing.md,优先使用 assets/screenshot-backgrounds/ 的内置背景资产做程序化 CleanShot X 式背景画布适配;只有原截图太乱、太长、太窄或需要概念化表达时,才用 GPT-M 2.0 做截图再设计。
如果当前运行环境是 Codex,完成 deck 初稿后,主动问用户是否需要用 GPT-M 2.0 生成配图并插入 PPT。不要默认生成。
推荐询问方式:
要不要为这份 PPT 生成几张配图?可以做成人文纪实照片、杂志风信息图、流程/对比/系统关系图,或把截图再设计成统一的杂志风视觉。
如果用户确认生成,再问他想要哪种图片类型或风格;如果用户没有偏好,根据页面内容自行推荐 1-3 张最值得生成的配图。
如果用户提供的是截图,先判断是截图美化还是截图再设计:
references/screenshot-framing.md,用内置主题背景 + 程序化缩放/留边/对齐处理,尽量不重画截图内容references/image-prompts.md,按当前版式槽位生成目标比例图片,并保持语言、主题色和边距一致生成配图时遵守:
references/image-prompts.md 选择图片类型和基础提示词references/screenshot-framing.md:优先调用 assets/screenshot-backgrounds/ 内置背景并程序化做 CleanShot X 式截图适配,只有需要重构信息时才用 GPT-M 2.0 重画images/ 下,命名遵守 {页号}-{语义}.{ext}根据 Step 1 选定的风格,拷贝对应的模板到目标位置(通常是 项目/XXX/ppt/index.html),同时在同级建一个 images/ 文件夹准备接图片。
mkdir -p "项目/XXX/ppt/images"
# 风格 A · 电子杂志风
cp "<SKILL_ROOT>/assets/template.html" "项目/XXX/ppt/index.html"
# 或 风格 B · 瑞士国际主义风
cp "<SKILL_ROOT>/assets/template-swiss.html" "项目/XXX/ppt/index.html"
两个 template*.html 都是完整可运行的文件——CSS、WebGL shader、翻页 JS、演讲者模式、观众屏同步、字体/图标 CDN 全已预设好,只有 <!-- SLIDES_HERE --> 占位符和 SPEAKER_NOTES 等待你填充。
注意:风格 A 和 B 不能混用。layouts.md 里的类(如 .h-hero 衬线大标题、.display-zh 等)只在 template.html 有定义;layouts-swiss.md 里的类(如 .kpi-hero、.accent-block、.span-N、.dots 等)只在 template-swiss.html 有定义。一份 deck 只能选一套。
拷贝后立刻改掉以下占位符,否则浏览器 Tab 会显示"[必填] 替换为 PPT 标题"这种尴尬文字:
| 位置 | 原始 | 需改为 |
|---|---|---|
<title> |
[必填] 替换为 PPT 标题 · Deck Title |
实际 deck 标题(如 一种新的工作方式 · Luke Wroblewski) |
每次拷贝完 template.html 第一件事:grep 一下"[必填]" 确认全部替换完。
本 skill 只允许从 5 套精心调配的预设里选一套,不接受用户自定义 hex 值——颜色搭配错了画面瞬间变丑,保护美学比给自由更重要。
| # | 主题 | 适合 |
|---|---|---|
| 1 | 🖋 墨水经典 | 通用 / 商业发布 / 不知道选啥的默认 |
| 2 | 🌊 靛蓝瓷 | 科技 / 研究 / 数据 / 技术发布会 |
| 3 | 🌿 森林墨 | 自然 / 可持续 / 文化 / 非虚构 |
| 4 | 🍂 牛皮纸 | 怀旧 / 人文 / 文学 / 独立杂志 |
| 5 | 🌙 沙丘 | 艺术 / 设计 / 创意 / 画廊 |
操作:
references/themes.md,找到对应主题的 :root 块assets/template.html(已拷贝版本)开头 :root{ 块里标有"主题色"注释的那几行(--ink / --ink-rgb / --paper / --paper-rgb / --paper-tint / --ink-tint)var(--...),无需任何其他改动硬规则:
先读 references/presenter-mode.md。每个 <section class="slide ..."> 必须写唯一且稳定的 data-slide-id,再按同样顺序生成一条 SPEAKER_NOTES 记录。备注按页面 ID 存储,不要用数组下标或页码作为持久化键,否则页面重排后用户在演讲者视图里改过的备注会串页。
内容分工:
purpose 说明这一页在整场叙事中的任务。talk 补充背景、例子、判断依据和语气,不逐字复述 slide。transition 解释为什么下一页紧接着出现。section 只在大纲已给出章节或连续页面明显属于同一章节时填写。minutes 是讲述计划;autoAdvanceSeconds 是播放行为,两者必须分开,且后者只在用户明确要求时填写。cue / interaction / delivery / advance / fallback / pronunciation 只写大纲或用户明确提供的舞台动作、互动、表达、翻页、备用和读音信息。没有来源支持的事实不能写进备注;影响内容正确性的缺失信息要标记“待补充”或询问用户,不影响内容的可选演讲信息直接省略。
<style> 里有定义(最重要)这是所有生成问题的源头。layouts 骨架使用了很多类名,如果模板的 <style> 里没有对应定义,浏览器会 fallback 到默认样式——大标题字体错、卡片挤成一团、pipeline 糊成一行、图片堆到页面底部。
两种风格类名互不通用(再次强调):
h-hero(衬线)、stat-card、grid-2-7-5、frame 等h-hero(无衬线)、kpi-hero、accent-block、span-N、dots、grid-12 等h-hero 是 Noto Serif SC 衬线,风格 B 的 h-hero 是 Inter 无衬线)在写任何 slide 代码之前:
<style> 块末尾):
assets/template.htmlassets/template-swiss.html<style> 里存在<style> 里补上,不要在每个 slide 里 inline 重写style="..." inline风格 A 常见容易遗漏的类:
h-hero / h-xl / h-sub / h-md / lead / kicker / meta-row / stat-card / stat-label / stat-nb / stat-unit / stat-note / pipeline-section / pipeline-label / pipeline / step / step-nb / step-title / step-desc / grid-2-7-5 / grid-2-6-6 / grid-2-8-4 / grid-3-3 / grid-6 / grid-3 / grid-4 / frame / frame-img / img-cap / callout / callout-src / chrome / foot
风格 B 常见容易遗漏的类(2026-05 重构后):
canvas-card / chrome-minh-hero(无衬线 7.4vw weight 200) / h-statement(9.6vw) / h-xl / h-md / t-cat(SemiBold 600 小标) / t-meta(mono uppercase) / lead / num-mega / monocard-ink / card-accent / card-fill / card-outlinedgrid-12 / grid-2-9 / grid-2-9-5 / span-Ntimeline-v + tl-node + tl-axis + dot / timeline-h + tl-h-node + tl-h-axiskpi-tower-row + bar-tower / h-bar-chart + bar-row + bar-fill / spec-bars + bar-vertdot-mat(SVG mask 实心点)/ ring-mat(描边圆)/ cross-mat(× 网格)/ hr-hairlinecover-split / closing-split / duo-compare + vrule / manifesto-top + ink-banner-full / three-forces / loop-diagram / matrix-fill + matrix-cell / brief-grid + brief-card / system-diagram / why-now-grid / four-cards / stacked-ledger + ledger-row / tech-spec / image-hero + hero-img-wrap + hero-overlay-block + hero-statsframe-img / fit-contain / r-21x9 / r-16x9 / r-16x10 / h-22 / h-26 / swiss-img-split / swiss-img-grid / swiss-img-caption / swiss-keyline / swiss-lined--sp-3...--sp-13(8/12/16/24/32/40/48/64/80/96/160 px)在挑布局之前,必须先列出每一页的主题 class(hero dark / hero light / light / dark)并写到文档或草稿里对齐。详细规则看 references/layouts.md 开头的"主题节奏规划"一节。
强制规则:
light / dark / hero light / hero dark 之一,不要只写 herohero dark + ≥1 个 hero lightlight 正文页,必须有 dark 正文页制造呼吸生成后自检:grep 'class="slide' index.html 列出所有主题,人工确认节奏合理再交付。
不要从零写 slide。打开对应的 layouts 文件,里面有 10 种现成布局骨架,每种都是完整可粘贴的 <section> 代码块。
风格 A → references/layouts.md:
| Layout | 用途 |
|---|---|
| 1. 开场封面 | 第 1 页 |
| 2. 章节幕封 | 每幕开场 |
| 3. 数据大字报 | 抛硬数据 |
| 4. 左文右图(Quote + Image) | 身份反差 / 故事 |
| 5. 图片网格 | 多图对比 / 截图实证 |
| 6. 两列流水线(Pipeline) | 工作流程 |
| 7. 悬念收束 / 问题页 | 幕末 / 收尾 |
| 8. 大引用页(Big Quote) | 衬线金句 / takeaway |
| 9. 并列对比(Before / After) | 旧模式 vs 新模式 |
| 10. 图文混排(Lead Image + Side Text) | 信息密集的图文页 |
风格 B → 先读 references/swiss-layout-lock.md,再读 references/layouts-swiss.md。
瑞士主题默认进入 Swiss locked mode:
S01-S22;新增首页/尾页只能使用 Skill 明确提供的 SWISS-COVER-ASCII / SWISS-CLOSING-ASCII。<section class="slide"> 必须写 data-layout="Sxx"。没有 data-layout 就视为未登记版式。P23/P24、Swiss Image Split、Evidence Grid 这类原始 22P 之外的正文结构,除非用户明确要求实验版式。S08 + Swiss Map Component:先读 references/swiss-map-component.md,仍保留 data-layout="S08"。原始 22 个正文版式如下:
| Layout | 用途 |
|---|---|
| S01 Index Cover | 原始索引封面 |
| S02 Vertical Timeline + KPI | 演化对比 / 年代变迁 |
| S03 Split Statement | 核心论点 / 左右分屏 |
| S04 Six Cells | 6 项概念定义 |
| S05 Three Layers | 三层架构 |
| S06 KPI Tower | 4 项数据视觉化高度差 |
| S07 H-Bar Chart | 5-10 项排名比较 |
| S08 Duo Compare | Before/After 对照 |
| S09 Dot Matrix Statement | 大引述 / statement |
| S10 Split Closing | 收束页 |
| S11 Horizontal Timeline | 4-7 步流程 |
| S12 Manifesto + Ink Banner | 阶段性结论 |
| S13 Three Forces | 3 个对等概念深化 |
| S14 Loop Form | 自学闭环 / 自动化 |
| S15 Matrix + Hero Stat | 8-12 项矩阵 + 总数据 |
| S16 Multi-card Brief | 6 项快讯小卡 |
| S17 System Diagram | 三层架构 / 生态地图 |
| S18 Why Now | 三论点 + 数据支撑 |
| S19 Four Cards | 4 项等权特性 |
| S20 Stacked KPI Ledger | 纵向账单数据 |
| S21 Tech Spec Sheet | 产品规格 / benchmark |
| S22 Image Hero | 21:9 顶图 + 标题块 + 三列 KPI |
登记扩展:S08 + Swiss Map Component 用于地点、人物住所、路线、城市关系。它不是新 layout,而是 S08 右侧插槽的 MapLibre 地图组件;必须按 references/swiss-map-component.md 的点位、连线、卡片和右上角缩放/拖动控制实现。
选对应 layout,粘过去,改文案和图片路径即可。务必先完成 3.0 预检。
风格 B 版式多样性硬规则:
head + grid + card。页码 → data-layout → 选用理由 → 图片槽位 草稿;交付前运行 node <SKILL_ROOT>/scripts/validate-swiss-deck.mjs index.html。校验器会先做静态结构检查;如果环境中能解析到 Playwright,还会做真实渲染后的可见边界、底部空白、nav 安全线和标题间距测量。永远用标准比例,不要用原图奇葩比例(如 2592/1798):
| 场景 | 推荐比例 |
|---|---|
| S22 顶部主图 | 21:9;照片关键主体放中央安全区 |
| S15/S16 多图格 | 统一 21:9 或统一 16:10,不能混用 |
| 左文右图 主图(风格 A) | 16:10 或 4:3 + max-height:56vh |
| 图片网格(风格 A) | 固定 height:26vh,不用 aspect-ratio |
| 左小图 + 右文字 | 1:1 或 3:2 |
| 全屏主视觉 | 16:9 + max-height:64vh |
| 图文混排小插图 | 3:2 或 3:4 |
默认不要让图片 align-self:end——会滑到页面底部,很容易碰到分页组件。用 grid 容器 + align-items:start(template 已预设)让图片贴顶即可;如果确实需要图文底对齐,必须先控制图片高度,再使用模板已有安全区类 .nav-safe-bottom / .nav-safe-bottom-tight,不要让最低处碰到分页组件。
风格 B 瑞士风额外规则:
data-image-slot:例如 s22-hero-21x9 / s15-grid-21x9 / s16-brief-21x9subject centered in the safe middle area;照片容器用 object-position:center 35%,不要用 top centervar(--paper),不要用灰底包白底信息图.swiss-keyline;需要强调时只用 .swiss-lined 的顶部 accent 线.fit-contain;如果已按 S15/S16 槽位重生成,必须用 .frame-img.r-21x9 / .frame-img.r-16x10 铺满容器,不要固定 height:18vh 后把图缩小image-prompts.md 的"风格 B:瑞士国际主义配图规则".nav-safe-bottom / .nav-safe-bottom-tight,不要手写 bottom:2vh先判断图片在这一页里的角色,再决定容器、比例和裁切方式:
references/screenshot-framing.md;关键文字和数据不能被裁掉。需要统一比例时,优先程序化背景画布 + .fit-contain,不要为了铺满而裁掉 UI 内容。21:9,S15/S16 用统一 21:9 或 16:10;不要再用短高度把图缩小成小贴片。object-position;主体、人脸、产品和关键证据不能被标题、caption 或裁切压住。contain,另一张 cover。M1/M2 检查可见边界、底部空白、nav 安全线和标题间距。中文方块字视觉面积大,不能直接套英文 hero 的 6.8-7vw。写中文大标题前先分档:
| 标题形态 | 推荐字号 |
|---|---|
| 1 行,≤ 8 个中文字符 | min(6.4vw,11.2vh) |
| 2 行,每行≤ 8 个中文字符 | min(5.8vw,10.2vh) |
| 2 行,任一行 9-12 个中文字符 | min(5.2vw,9.2vh) |
| 3 行或更长 | 优先改写标题;不得已用 min(4.6vw,8.2vh) |
如果标题挤占了图片或正文区域,先压缩标题文案,再降字号;不要靠把下方内容推到底来硬塞。
瑞士风用于投屏演示时,小字不能按网页注释的 10-12px 写。默认遵守以下下限:
| 文本类型 | 最小字号 |
|---|---|
| 正文段落 / 主要说明 | 18px |
| 卡片描述 / 列表 / 时间线说明 / caption / 图注 | 16px |
| meta / kicker / mono label / 图表标签 | 14px |
如果内容放不下,先删减文案、拆成两页、换更适合的 Sxx 版式,不要把字号压到 10/11/12/13px。尤其是中文 deck,不要为了塞三行解释把 body-sm、caption、timeline label 改小。
字号与字重阶梯(瑞士风核心) — "越大越细,越小越粗"不是感性描述,而是具体映射:
| 字号区间 | 推荐字重 | 典型场景 |
|---|---|---|
| ≥ 8vw | 200 (ExtraLight) | 封面大字、巨号 KPI、h-statement |
| 4-7.9vw | 200-300 | 章节标题(h-xl/h-xl-zh)、大编号 |
| 1.8-3.9vw | 300-400 | 中型标题、takeaway 标题(≈1.8vw)、中号数字 |
| 1-1.7vw / 16-20px | 400-500 | 正文段落、卡片描述、说明文字 |
| 13-15px(小字) | 500-600 | meta、kicker、角标、图表标签、caption 强调 |
硬规则:
italic + weight 300,不要用 accent 色(蓝压蓝看不见)组件细节(字体、颜色、网格、图标、callout、stat-card 等)在 references/components.md。
生成完一定要打开 references/checklist.md,逐项对照。里面总结了真实迭代过程中踩过的所有坑,P0 级别的问题(emoji、图片撑破、标题换行、字体分工)必须全部通过。
所有正式演讲 deck 先跑演讲者模式校验;如果用户给了目标时长,同时传入分钟数:
node <SKILL_ROOT>/scripts/validate-presenter-mode.mjs path/to/index.html
node <SKILL_ROOT>/scripts/validate-presenter-mode.mjs path/to/index.html --target-minutes 30
node <SKILL_ROOT>/scripts/check-presenter-runtime-sync.mjs
第一个脚本会拦截缺失/重复页面 ID、备注与页面错位、必填字段或可选字段类型错误、完整时间计划超出 90% 预算,以及计时、排练、自动翻页、标注、演前检查和观众屏恢复控件缺失。第二个脚本会拦截两套模板之间的演讲者 CSS / JS 漂移。
当一页内容超出或显得巨空时,不要先凭感觉大幅删改。先运行:
node <SKILL_ROOT>/scripts/validate-swiss-deck.mjs path/to/index.html
看校验输出里的测量项:
M1 DOM/visual overflow:具体超出多少 px,以及最低/最高问题元素M1 bottom whitespace:底部空白多少 px,active content height 占比多少M1 nav-safe:最低内容是否进入底部分页安全线M2 title gap:标题和下一块内容之间的实际距离修正阶梯:
1-40px over:只微调,上移内容组或收紧一个 gap/padding,不要删内容。40-90px over:局部压缩间距或模块高度,仍优先保留内容。90-160px over:轻微压标题或压缩一段正文,必要时拆页。160px+ over:才考虑换版式、合并模块或删内容。修完再跑一次 validator。如果 M1 bottom whitespace 变大,说明修过头了;恢复部分间距、放大最后一块或把内容组向下回调。
代码只能证明类名和结构存在,不能证明版式舒服。生成后必须打开网页逐页看:
h-hero 类在 template.html 里缺失height:Nvh,不用 aspect-ratio(会撑破)align-self:end,用 grid + align-items:start(见 Step 3.2)nowrap(避免 1 字 1 行)font-family 没用 --serif 类变量)box-shadow / linear-gradient / border-radius > 0 都要砍掉(rule 横线除外)font-size:min(Xvw, Yvh),只用 vw 在标准 16:9 屏会溢出(吸取 P15/P20/P22 教训)card-ink / card-accent / card-fill / card-outlined 四类不能混用(禁止"蓝底+蓝描边"、"灰底+描边"等)card-fill 灰底);只突出一项时单独换 card-accent,且只允许一张border-radius 都不允许;装饰用 8×8 直角小方块,不要 9px 圆形点<i data-lucide="name"></i> + lucide.createIcons(),选棱角风格(避免圆胖)justify-self(会与虚线错位)[data-anim] 容器先强制 opacity:1,recipe 内再用 motion {opacity:[0,1]} 覆盖,否则有些页会"看不见"[data-anim] 在缩略图里 opacity:1"Microsoft YaHei UI", "Noto Sans SC"t-cat SemiBold 600 / t-meta mono uppercaseB 静态;按 B 切换 body.low-power,停止 WebGL/ASCII canvas RAF 和 Motion 入场动画.frame-img 不加 border-radius / box-shadow;边界只用 hairline.fit-contain直接在浏览器打开 index.html 就行。macOS 下:
open "项目/XXX/ppt/index.html"
不需要本地服务器。图片走相对路径 images/xxx.png。
预览时不能只看普通页面。按 P 进入演讲者模式,允许浏览器打开观众窗口,至少实测一次:前后翻页、内嵌宫格选页并返回预览、首页/尾页、尾页重新开始、计时开始/暂停/重置、排练记录、自动翻页暂停/恢复、激光笔、圈选、黑白屏、冻结、设置组件、演前检查、备注保存、关闭观众窗口后的状态变化,以及“重新打开观众屏”能否恢复到当前页。
根据用户反馈修改——模板的 CSS 已经高度参数化,90% 的调整都是改 inline style(字号 font-size:Xvw / 高度 height:Yvh / 间距 gap:Zvh)。
guizang-ppt-skill/
├── SKILL.md ← 你正在读
├── assets/
│ ├── template.html ← 风格 A · 电子杂志风模板(种子文件)
│ ├── template-swiss.html ← 风格 B · 瑞士国际主义风模板(种子文件)
│ ├── screenshot-backgrounds/ ← 截图美化内置背景(WebP):style-a 5 套 / style-b 4 套
│ └── motion.min.js ← Motion One 本地副本(离线兜底,约 64KB,共用)
├── scripts/
│ ├── validate-swiss-deck.mjs ← 风格 B 静态校验:登记版式、图片槽位、SVG 文本、标题对齐
│ └── validate-presenter-mode.mjs ← 两种风格共用:页面 ID、演讲备注、时长和演讲者运行时校验
└── references/
├── components.md ← 组件手册(字体、色、网格、图标、callout、stat、pipeline、动效... 风格 A 适用)
├── layouts.md ← 风格 A · 10 种页面布局骨架(可直接粘贴,含动效标记)
├── swiss-layout-lock.md ← 风格 B · 原始 22P 版式锁,正文页必须按这里登记
├── layouts-swiss.md ← 风格 B · 原始 22P 骨架说明 + 少量明确标注的实验区
├── swiss-map-component.md ← 风格 B · S08 地图扩展组件(MapLibre 点位/连线/卡片/控制)
├── themes.md ← 风格 A · 5 套主题色预设(只能选不能自定义)
├── themes-swiss.md ← 风格 B · 4 套瑞士风主题色预设(IKB / 柠檬黄 / 柠檬绿 / 安全橙)
├── image-prompts.md ← GPT-M 2.0 配图类型、比例和基础提示词
├── screenshot-framing.md ← CleanShot X 式截图适配语义 + 内置背景资产映射
├── presenter-mode.md ← 演讲者 UI、AI 备注结构、观众屏同步与恢复契约
└── checklist.md ← 质量检查清单(P0/P1/P2/P3 分级)
加载顺序建议:
SKILL.md(这个文件)了解整体themes.md 帮用户选一套主题色themes-swiss.md 帮用户选一套主题色<style> 块——这是类名的唯一来源,缺类会导致整页样式崩
assets/template.htmlassets/template-swiss.htmllayouts.md(顶部有 Pre-flight 类名清单、主题节奏规划、动效 recipe 决策树)swiss-layout-lock.md,再读 layouts-swiss.md;正文页必须从 S01-S22 选择,每页写 data-layoutswiss-map-component.mdimage-prompts.md 挑图片类型、比例和基础提示词;如果是用户原始截图,先读 screenshot-framing.md,优先使用 assets/screenshot-backgrounds/ 的内置背景资产components.md 查组件(含 Motion 动效系统章节,主要服务风格 A;风格 B 的组件细节在 layouts-swiss.md 附录)presenter-mode.md,生成稳定页面 ID 和 SPEAKER_NOTESvalidate-presenter-mode.mjs;风格 B 再运行 validate-swiss-deck.mjs,最后读 checklist.md 自检动效相关:模板已把 Motion One 的加载和 recipe 逻辑内嵌到底部 module script。你不需要改 JS,只需要按 layouts.md / layouts-swiss.md 的骨架在 HTML 里加 data-anim / data-animate 即可。离线演示靠 assets/motion.min.js,断网时自动降级为"无动画但内容可读"。风格 B 模板必须保留 B 键低功耗模式:切换后停止 WebGL/ASCII canvas RAF,取消正在运行的 Web Animations,并把当前页内容直接 reveal 到静态最终态。
违反其中任何一条,杂志感都会垮。
height:Nvh 固定,不要用 aspect-ratio 撑违反其中任何一条,画面瞬间从瑞士掉到 PowerPoint。
本 skill 的两种风格分别参考了:
风格 A · 电子杂志风:
风格 B · 瑞士国际主义风:
可以把它们当做风格锚点。
🌏 English version: README.en.md
一个适配 Claude Code / Codex 等 Agent 环境的网页 PPT 技能,用于生成单文件 HTML 横向翻页 PPT、PPT 配图和多平台封面,并内置完整的排练与演讲者模式。
内置两套视觉系统:
由 歸藏 在"一人公司:被 AI 折叠的组织"、"一种新的工作方式"等线下分享中沉淀而成,踩过的每一个坑都写进了
checklist.md。 赞助与支持信息见 SPONSORS.md。
旧主题 · Style A 电子杂志风
新主题 · Style B 瑞士国际主义
npx skills add https://github.com/op7418/guizang-ppt-skill --skill guizang-ppt-skill
也可以直接把这段话发给有 shell 权限的 AI Agent:
帮我安装 guizang-ppt-skill。请把 https://github.com/op7418/guizang-ppt-skill 克隆到 ~/.claude/skills/guizang-ppt-skill,安装完成后检查 SKILL.md、assets/、references/ 是否存在。
已经安装过的话,用这段话更新:
帮我更新 guizang-ppt-skill。请进入 ~/.claude/skills/guizang-ppt-skill 执行 git pull,然后告诉我当前最新 commit。
安装后直接对 Agent 说:
帮我基于这篇文章做一份瑞士风 PPT,控制在 7 页左右,需要 2-3 张配图。
也可以试这些请求:
帮我把这份 Markdown 做成杂志风演讲 PPT。
基于这份 PPT 的核心观点,生成一张公众号 21:9 头图。
把这张产品截图重新设计成适合 PPT 的 16:10 配图。
给这份 PPT 补齐演讲备注和每页计划时长,然后用演讲者模式帮我排练。
Guizang PPT Skill 的持续迭代获得 360 安全龙虾、Kimi work、Cola Skill 金牌赞助和 真格 Token Grant 支持。更多信息见 SPONSORS.md。
除了 Claude Code / Codex,也可以在这些平台使用归藏 PPT Skill:
| 渠道 | 链接 |
|---|---|
| 360 安全龙虾 | claw.360.cn |
| Cola Skill | colaskill.com/guizang-ppt-skill |
| Kimi work | kimi.com(安装后在 Skill 商店搜索 guizang ppt skill) |
B 可关闭 WebGL / canvas 动画,让动态内容退回静态背景✅ 合适:线下分享 / 行业内部讲话 / 私享会 / AI 产品发布 / demo day / 带强烈个人风格的演讲
❌ 不合适:大段表格数据 / 培训课件(信息密度不够)/ 需要多人协作编辑(静态 HTML)
| 任务 | 推荐方式 |
|---|---|
| 长文章变演讲 PPT | 先抽核心观点,再按 6-10 页节奏生成 deck |
| 方法论 / 产品分析 | 用 Style B 瑞士风,优先使用锁定版式和 21:9 主图 |
| 个人分享 / 观点表达 | 用 Style A 电子杂志风,保留更强叙事感 |
| PPT 配图 | 在 Codex 中用 GPT-Image 2.0 / GPT-M 2.0 生成照片、信息图、流程图、UI 情景图 |
| 多平台封面 | 从同一份内容生成公众号 21:9、1:1 分享卡、小红书 3:4、视频号横版封面 |
| 截图统一风格 | 把原始截图重新生成到模板需要的比例,再插入 PPT |
| 现场演讲 / 排练 | 让 Agent 从大纲生成备注和时长,按右下角 P 进入演讲者模式 |
| 平台 | 状态 | 说明 |
|---|---|---|
| Claude Code | 支持 | 原生 Skill 工作流,适合生成和迭代 HTML deck |
| Codex | 支持 | 适合生成 PPT、调用图片生成能力、做浏览器视觉检查 |
| Cursor / 其他本地 Agent | 可用 | 需要能读写文件并执行 shell 命令 |
| WorkBuddy | 适配中 | 单独整理上架版本,去掉平台不需要的渠道差异 |
| 普通 Chatbot | 不推荐 | 没有文件系统和浏览器预览时,很难稳定生成完整 deck |
npx skills add https://github.com/op7418/guizang-ppt-skill --skill guizang-ppt-skill
帮我安装
guizang-ppt-skill这个 Claude Code skill。请按下面步骤做:
- 确保
~/.claude/skills/目录存在(不存在就创建)- 执行
git clone https://github.com/op7418/guizang-ppt-skill.git ~/.claude/skills/guizang-ppt-skill- 验证:
ls ~/.claude/skills/guizang-ppt-skill/应该看到SKILL.md、assets/、references/三项- 告诉我安装好了,之后我说"做一份杂志风 PPT"之类的话就会触发这个 skill
把这段话复制粘贴给 Claude Code / Cursor / 任何有 shell 权限的 AI Agent,它会自动完成安装。
git clone https://github.com/op7418/guizang-ppt-skill.git ~/.claude/skills/guizang-ppt-skill
装好后,Claude Code 会在对话里自动发现并调用这个 skill。触发关键词:
Skill 本身是结构化工作流,Agent 会逐步引导:
assets/template.html,Style B 用 assets/template-swiss.htmlreferences/checklist.md,P0 级问题必须全过;瑞士风和演讲模式分别运行对应校验器P 进入演讲者模式,检查观众屏同步并记录实际时长详细说明见 SKILL.md。
两套模板都内置同一套演讲者运行时。打开 deck 后,点击右下角 P 即可进入演讲者视图;浏览器会同时打开一个干净的观众屏。所有核心能力都在本地 HTML 和浏览器里完成,不依赖实时字幕、云端中继、手机遥控或 AI 教练服务。
演讲者视图示例
16:9,小屏时整页等比缩放,不裁切、不挤压文字16:9 预览,并提醒人工确认 HDMI、转接器和投影仪常用快捷键:← / → 翻页,Home / End 跳首页或尾页,G 宫格,L 激光笔,C 圈选,B / W 黑屏或白屏,F 冻结观众屏,? 查看完整快捷键。
让 Agent 生成或补齐演讲模式时,可以直接说:
根据这份大纲给每一页补齐演讲目的、讲述要点、转场和计划时长。没有提供的互动或现场信息不要猜,然后运行演讲模式校验器。
演讲备注契约和完整行为说明见 references/presenter-mode.md。校验命令:
node scripts/validate-presenter-mode.mjs path/to/index.html
node scripts/validate-presenter-mode.mjs path/to/index.html --target-minutes 30
瑞士风是这次新增的结构化主题。它不是"换一套 CSS",而是一套更严格的版式系统。
S01 到 S22 中选择,不能临时发明页面结构data-image-slot,常见主图按 21:9 或 16:10 生成瑞士风校验命令:
node scripts/validate-swiss-deck.mjs path/to/index.html
在 Codex 环境中,完成 deck 初稿后可以主动询问用户是否需要生成配图。用户确认后,再询问图片类型或风格,常用类型包括:
生成图片时要遵守四个关键规则:
references/screenshot-framing.md,用 assets/screenshot-backgrounds/ 内置背景 + 程序化缩放/留边/对齐处理,不要默认重画截图内容配图提示词见 references/image-prompts.md,截图适配见 references/screenshot-framing.md。
这个 Skill 也可以基于文章或 PPT 核心观点生成平台封面。典型规格:
封面原则和 PPT 一样:只用少量关键词,视觉重心落在大标题上,不要把正文堆满。
复制下面任意一条给 Agent,再附上你的文章、Markdown 或素材文件:
帮我基于这篇文章生成一份 8 页左右的瑞士风 PPT,需要 3 张配图,图片比例跟模板槽位匹配。
帮我把这个产品分析文档做成电子杂志风 PPT,重点突出观点和叙事节奏。
基于这份 PPT 的主题,做两张封面:公众号 21:9 头图和 1:1 分享卡,视觉保持一致。
把这些产品截图重新设计成统一的 16:10 PPT 配图,保留关键信息,不要画页脚和标题。
guizang-ppt-skill/
├── SKILL.md ← Skill 主文件:工作流、原则、常