ppt-report-generator-e3b0c4 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ppt-report-generator-e3b0c4 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
把"多组业务数据 + 阶段性结论"产出成一份 16:9 的、可在浏览器全屏播放、可一键导出 PDF 的网页版 PPT。
slides/slide-N.html + scripts/slide-N.js + styles/slide-N.css,由 build.py 合成单一 HTML。改一页只动一页,省 token、省冲突。data/slide-N.{xlsx,csv,json},build 时自动转 JSON 注入。日常用 Excel 改数据,渲染代码完全不动。references/chart-mapping.md),不要随心情画图。默认使用 ECharts。references/design-system.md)。data-theme 属性切换(见 references/themes.md)。触发条件(任意一条命中即用):
src/slides/、build.py、shell.html)想新增一页或换主题打开 assets/slides-templates/,按页面"主体类型"挑一个起点:
| 主体类型 | 模板 | 用法 |
|---|---|---|
| 月度交付总览(多板块 × 多卡片) | kpi-overview.html | 第 1 页类汇总页 |
| 两个对象左右对照(如两国数据) | two-country.html | KPI 行 + 双卡片 metric 表 |
| 三阶段时间线 + 多个图表 | three-phase.html | 时间线 + 多 chart-card |
| 多对象时间趋势 | multi-trend.html | 4 国 / 4 渠道 折线图 + 里程碑标记 |
| 分类条形 + 趋势折线组合 | supply-bars.html | 物料/品类 mini-bar + 总趋势 |
| 产业图谱 / 竞品全景 / 客户分层(一个领域/生态的完整图谱) | landscape-map.html | ⚠ 用前必读 [`references/landscape-skeleton.md`](references/landscape-skeleton.md) 选骨架 —— 这套三层 tier 只适合 AI/SaaS 软件分层栈;实体产业/航天/能源等用价值流横轴;银行用客户矩阵;创新药用研发管线。选错骨架 = 八股套用,会被一眼识破 |
| 2×2 战略矩阵(波士顿 / GE-McKinsey 风) | matrix-2x2.html | 在两个连续维度上定位 N 个对象的咨询报告标配页型。典型场景:竞品估值定位 / BCG 业务段矩阵 / 客户分层 / 项目优先级。纯 CSS 实现(不要用 ECharts scatter — 4 象限着色 + 标签防遮挡用 CSS 干净得多)。详见 references/matrix-2x2.md — 含 6 套经典轴组合 + 数据归一化公式 + 标签防遮挡规则 |
| 人物画像 / 拟人化能力 / 风险热图 | human-portrait.html | 数据驱动一次成 ⭐。中央人体剪影 + 部位可见色点 + 周边标签 + 引线自动连接。只写一段 labels 数据(每个标签绑定一个身体 part),剪影 path / 部位坐标 / 色点 / 引线全部由 assets/scripts/silhouette.js 的 renderHumanPortrait() 算出 —— 无需手画剪影 / 校准坐标 / 摆引线像素。详见 references/human-portrait.md |
| 价值流横轴(实体产业「价值如何沿链条流动」) | value-chain.html | B 骨架 · 实体产业框架图。5~6 个环节卡横向 ▶ 串联,每段含「核心数字 + 关键活动 + 自营/外采徽章」,色彩沿链渐深表达价值聚集。适用:商业航天 / 能源 / 制造 / 消费品。纯 CSS 全静态,零 JS。⚠ 用前先读 references/landscape-skeleton.md 确认骨架 |
模板是骨架,复制后改文案、改数据、改 ID 即可。
src/data/slide-N/这一步最重要。每页一个文件夹,里面放任意多个独立数据文件,文件名(不含扩展名)即 JS 里的 key,build 时自动合并注入为 window.__DATA_N__。
src/data/slide-3/
├── kpis.xlsx → window.__DATA_3__.kpis (单 sheet 自动解包为数组)
├── trend.csv → window.__DATA_3__.trend
└── marks.json → window.__DATA_3__.marks支持三种格式,可混用:
| 格式 | 转换结果 |
|---|---|
.xlsx 单 sheet | [{col: val}, ...] 数组(自动解包,省掉一层 key) |
.xlsx 多 sheet | {sheetA: [...], sheetB: [...]} dict |
.csv | [{col: val}, ...] 数组 |
.json | 原值直接读取 |
约定:第 1 行 = 表头;数字自动转 number;sheet 名 / 列名 / 文件名以 _ 开头跳过(备注用);空行跳过。
JS 里访问(多数据源各自独立):
function initSlide3() {
const D = window.__DATA_3__;
// D.kpis = [{label: 'DAU', value: 12.4}, ...] ← 来自 kpis.xlsx
// D.trend = [{week: 'W1', na: 12.1, eu: 8.4}, ...] ← 来自 trend.csv
// D.marks = [{x: 'W4', label: '上线'}, ...] ← 来自 marks.json
}下次更新数据:直接在 Excel / CSV 里改完保存,重跑 python3 build.py — 渲染代码完全不动。
独立调试:python3 xlsx2json.py src/data/slide-3/ 可单独看该页合并后的 JSON 输出。
向后兼容:旧格式 slide-N.xlsx / .csv / .json 单文件仍支持,build 优先找目录、找不到再找单文件。详见 references/architecture.md。
references/chart-mapping.md)不要直接选自己想画的图。根据数据形态查决策表:
references/design-system.md)每段文字必须能回答"我是哪一级"。slide-label / slide-title / slide-subtitle 三件套是强制顶部结构。结论里的关键数字必须包 <strong> 或 <span class="pos|neg|warn"> 高亮。
python3 build.py # 合成最终 HTML → 输出到 dist/(目录/文件名可在 build.py 顶部 CONFIG 改)
open dist/*.html # 浏览器打开,按 ←/→ 翻页
python3 export_pdf.py # (可选)导出 PDF(自动找 dist/,输出 dist/*.pdf)如果用户想换风格,不要重写 CSS。在 <body data-theme="dark-tech"> 上改 attribute 即可。详见 references/themes.md。
构建完不等于做完。交付前三件事一件不少(详见 references/report-quality.md 的 14 条铁律 + checklist):
python3 check_deck.py # 机检:字号过小 / 币种混用 / 数字缺信源 / 术语清单
python3 export_images.py dist/*.html # 逐页截图(横屏可用 export_pdf.py)——必须肉眼过一遍landscape-qa.md),只信截图。横屏(16:9)是默认;但面向手机观看(老板手机竖握看)或社媒公司宣传(小红书 / 公众号 / 朋友圈 / 视频号)时,要出竖屏版本——网页 / PDF / 图片三种输出都支持。详见 references/portrait.md。
核心理念:低「内容密度」、不低「有效信息密度」——一屏少放东西(元素 ≤ 5、大字号、大留白、一个核心观点 + 一个视觉锚),但每个元素有信号、不放水。别把横屏高密度页直接竖过来。
工作流(场景驱动,关键):
assets/presets.json 取该场景的标准尺寸 + 页面模型 + 导出形态(小红书=3:4 1242×1656 逐张卡 / 公众号=1080 宽长图 / 朋友圈=4:5 / 手机全屏=9:16 …,中文别名也认)。cp assets/shell-portrait.html src/shell.html(按场景改 body 的 --design-w/h)cp assets/styles/portrait.css src/styles/(build.py 自动纳入)assets/slides-templates/portrait/ 的模板(10 套):cover(封面钩子)/ big-number(单巨数)/ list(≤5 项)/ single-chart(单图)/ quote(金句)/ section(章节分隔)/ end(结尾 CTA)/ comparison(A vs B 对比)/ timeline(竖向时间线)/ image-text(上图下文)export_images.py --preset 小红书/公众号/手机汇报 会按目标比例重渲染出图,不用为每个平台重做python3 build.py → python3 export_images.py dist/*.html --preset 小红书(按场景精准出逐张 PNG / 长图 / PDF)。竖屏全部 scope 在[data-format="portrait"],与横屏零冲突。--design-w/h设在<body>上。
data/slide-N.json 或顶部 const 变量,渲染函数只接受参数。--fs-label / --fs-title / --fs-subtitle / --fs-h2 / --fs-h3 / --fs-body / --fs-caption / --fs-mini 8 个级别。var(--accent)、var(--accent2) 等主题变量,确保切主题不崩。transform: scale(--fit) 自动处理。不要用 vw/vh。src/,再 python3 build.py。references/layout-principles.md 第 6/10 节)。layout-principles.md 第 11 节"故事曲线")。1fr 1fr + 子项 flex:1 1 0; min-height:0 + 弹性占位(如 phase-arrow-v)补差,不要写死 height(详见 layout-principles.md 第 7b 节)。flex-wrap 居中且 `align-items:center`(关键!flex 默认 stretch 会把 chip 纵向拉成 2 倍高,是高度失控的隐形元凶);三 tier 用 grid-template-rows:1fr 1fr 1fr 等高封顶——有界,永不溢出。landscape-map 三层 tier 模板 —— 那只是 AI / SaaS 软件分层栈的专用骨架,不适用所有行业。value-chain.htmlreferences/landscape-skeleton.md 选定骨架,在 slide 顶部 HTML 注释里写下"骨架 + 理由",再开始动手。选错骨架会被一眼识破"参考案例呆板"——这条规矩是 SpaceX IPO Deck 那次教训沉淀的。读取顺序按需:
references/architecture.md — 拆分架构、build.py 工作原理、自适应缩放references/design-system.md — 字号 / 字重 / 颜色 / 间距硬规则(字怎么写)references/layout-principles.md — 经典汇报 PPT 布局法则:金字塔结构、F/Z 阅读路径、三分法、视觉锚点、信息密度、故事曲线(东西怎么摆)references/report-quality.md — 交付前质量铁律 14 条 ⭐(内容可信 / 表达清晰 / 版面克制 / 工艺可靠)+ 可勾选 checklist。每条 ❌→✅。交付前 Step 8 逐条对照,配套机检脚本 check_deck.pyreferences/chart-mapping.md — 数据形态 ↔ 图表选型决策表(ECharts 配置范本)references/components.md — 通用组件库(KPI / 卡片 / Phase / Timeline / Mini-bar / Metric-row)references/themes.md — 5 套预设主题 + 自定义主题方法references/landscape-skeleton.md — 「产业全景图」骨架选择强制流程(5 种骨架: 分层栈 / 价值流横轴 / 客户矩阵 / 研发管线 / 生态网络)。做全景图前先读这个,选定骨架再开工,避免见到"全景图"就套 landscape-map 八股references/landscape-qa.md — landscape-map / 结构图类页面生成后的质量自检与优化清单(踩坑黑名单 · 数据规范 · 渲染自检 · LLM 二次复查),生成此类页面后逐条对照(注:仅在选定骨架是「A 分层栈」后才用本清单;其他骨架不适用)references/matrix-2x2.md — 2×2 战略矩阵设计与数据规范(咨询报告标配页型)。6 套经典轴组合、归一化公式、4 象限战略命名、标签防遮挡规则、踩坑黑名单。做"竞品定位 / BCG 矩阵 / 客户分层 / 项目优先级"类页面先读这个references/svg-aesthetics.md — 让 AI 手写的 SVG 真的好看(5 大反丑原则 + OpenMoji 抓取大法)。任何需要写 inline SVG 的场景(人体 / 图标 / 流程节点 / 徽章)先读这个,不要凭直觉硬画 pathreferences/human-portrait.md — 人物画像页型(数据驱动一次成)。中央人体剪影 + 部位可见色点 + 引线自动连接,只写 labels 数据。配套 human-portrait.html 模板 + scripts/silhouette.js(剪影资产)references/portrait.md — 竖屏格式(手机 / 小红书 / 公众号 / 朋友圈)⭐。场景驱动:先问发哪儿 → 查 presets.json 取标准尺寸 → 用竖屏模板 → export_images.py 出图。低内容密度高有效信息密度 + 场景规格表 + 10 套竖屏模板 + 三种输出。做竖屏汇报/社媒宣传先读这个assets/ 下都是可直接拷贝的成品文件:
shell.html — HTML 骨架(含 {{STYLES}} {{SLIDES}} {{SCRIPTS}} 占位符)build.py — 合成脚本(按页号顺序拼接;自动抽取模板内联 `<style>`/`<script>` → 模板做到「一个文件,拷过去即插即用」,不用手动拆样式块;同时把 src/assets/ 拷进 dist/)export_pdf.py — 横屏 PDF 导出(playwright + img2pdf)export_images.py — 竖屏导出(逐张 PNG / 公众号长图 / PDF),场景预设感知(--preset 小红书)check_deck.py — 交付前机检(字号过小 / 币种单位混用 / 数字缺信源 / 术语清单)。只做不依赖布局测量的可靠检查;溢出 / 留白交给截图。配 references/report-quality.mdpresets.json — 竖屏场景规格表(小红书 / 公众号 / 朋友圈 … → 标准尺寸 + 页面模型 + 导出形态)shell-portrait.html — 竖屏 shell(data-format="portrait" + 画幅变量)fetch_logos.py — 可选:把在线 logo 下载缓存到本项目 src/assets/logos/ 供离线/存档(landscape-map 默认在线引用 logo,不跑此脚本也能显示,跑了则断网也不丢)styles/common.css — 全局样式 + 5 套主题变量styles/components.css — 通用组件scripts/common.js — 自适应、导航、ECharts helperscripts/silhouette.js — 人体剪影资产(男/女剪影 path + 部位坐标 + renderHumanPortrait(),human-portrait 页用,build 自动注入)scripts/theme-switcher.js — 主题切换 UIdata/slide-N.json — 数据样例slides-templates/*.html — 9 套横屏页面模板(kpi-overview / two-country / three-phase / multi-trend / supply-bars / landscape-map / matrix-2x2 / human-portrait / value-chain)slides-templates/portrait/*.html — 10 套竖屏低密度模板(cover / big-number / list / single-chart / quote / section / end / comparison / timeline / image-text)styles/portrait.css — 竖屏低密度设计系统(scope 在 [data-format="portrait"],横屏零影响)mkdir my-report && cd my-report
# 1. 拷贝 assets 整个目录到当前项目作为 src/
cp -r <skill_path>/assets src
# 2. 拷贝 build.py / export_pdf.py 到项目根
cp <skill_path>/assets/build.py <skill_path>/assets/export_pdf.py .
# 3. 按需挑模板,重命名为 slide-1.html / slide-2.html ...
# 4. 写数据 → 改文案 → build → 预览~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.