图文课件快速生成工具

SKILL效率
效率 未标注权限 许可证不明确
安装这个技能

本技能用于将 PPT 截图、课堂翻拍照片、幻灯片图片、PDF 扫描件还原为一份可编辑的单文件 HTML 课件或PPTX。当用户输入一张或多张 PPT / 课件照片或 PDF,并要求转成课件、生成课件、还原这张幻灯片、照片转课件、PPT 图片生成课件时触发。核心约束(单模式):全部图形(卡片、方框、箭头、表格、色块、线条、图标)必须用矢量(HTML/CSS 或 SVG)绘制,严禁把原图直接粘贴进页面当内容;文字必须可点选编辑(contenteditable);版式、配色、字体、层级严格对齐原图,不简化任何图形方案;页面按窗口等比铺满自适应;多张照片默认合并为同一份带翻页(← → / 滚轮 / 触屏)的单文件,而非每页一个独立文件。支持双向转化:导入 `.pptx` 解析为可编辑 HTML(python-pptx 读文字/形状后矢量重绘)、导出 HTML 为可编辑 `.pptx`(pptxgenjs,真文本框 + 每页备注);生成课件时按内容语义主动配图,配图须与内容强相关、禁用无关装饰图。输出存工作区(优先 F 盘),不落 C 盘。

一句话选型结论

按资料字段整理

图文课件快速生成工具是效率类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类效率 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_fa6d10d9/ppt-image-text-to-courseware
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

效率
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_fa6d10d9仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量64.5 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
整理待办与日程

把零散任务收进清单,排出优先级。

批量处理重复任务

把固定动作做成模板,重复执行。

把流程写成清单

把口头流程整理成可复用的步骤。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在效率场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
图文课件快速生成工具当前 未标注权限 未标注 未标注 未标注 有
Nano PDF 文档 联网访问 ClawHub 市场 424.9 万 OpenClaw 有
自动更新程序 浏览器控制 ClawHub 市场 296.4 万 OpenClaw 有
Gemini 助手 联网访问 ClawHub 市场 254.7 万 OpenClaw 有
word DOCX 文档 联网访问 ClawHub 市场 239.6 万 OpenClaw 有
Excel XLSX 前端 联网访问 ClawHub 市场 227.0 万 OpenClaw 有

SKILL.md 全文

64.5 KB
模型实际读到的说明书原文,来自技能仓库

PPT / 照片 / PDF 转可编辑课件(andy-ppt-image-to-courseware)

用途

把任意一张 PPT / 课件照片、一份 PDF 扫描件、或一个 .pptx 文件,做成视觉专业、版式配色对齐原图、文字可编辑的单文件 HTML 课件;
多张照片自动合并成同一份带翻页的课件(续作:除非老板明说「另起一份」,否则在旧版后追加页)。
- 反向也支持:已有可编辑 HTML 课件,导出为可编辑 .pptx(真文本框 + 每页备注)供挑选。
- 生成课程材料时,按内容语义主动配图,配图须与内容强相关。

何时使用

命中以下任一信号即调用本技能:

  • 「把这张 PPT 照片转成课件 / 生成课件 / 还原成幻灯片」
  • 「照片转课件」「PPT 图片生成课件」「讲课 PPT 还原」「PDF 扫描件生成课件」
  • 用户贴了截图/翻拍图/PDF,并要求做成可编辑的讲课材料
  • 用户给出一组连续课件照片,要求按页码合并成一套
  • 用户给了 .pptx 文件,要求「转成课件 / 还原成 HTML / 做成可编辑网页课件」
  • 用户拿到 HTML 课件,要求「导出 PPTX / 转成 PowerPoint / 出可编辑 pptx」

硬性规则(务必遵守 · 单模式:矢量重绘)

一、严禁贴原图,全部矢量重绘(本技能第一铁律)

  • 照片只用于读图识别内容,绝不作为页面内容直接 <img> 铺进页面(不交付"照片居中展示"式成品)。
  • 原图里的每一个可视化元素 —— 卡片、方框、箭头、表格、色块、线条、图标、图表 —— 都要用 HTML/CSS 或 SVG 重新绘制。
  • 不简化:原图有几种图形方案、几个框、几条箭头,就还原几个;不合并、不省略、不偷换成纯文字。
  • 原图仅作「原图对照」浮层(base64 内嵌),供老板逐页核对还原度,不进正文。

一·例外:混合模式(仅局部贴原图,其余矢量可编辑)

  • 适用场景(用户明确授权时):当某一页的某个图形元素(如 logo、复杂图标、脑部齿轮/神经元示意图等)纯矢量重绘反复无法还原、老板判定不像时,可改为「混合模式」——仅把该元素从原图裁剪出来用 <img> 嵌入,其余文字与版式仍矢量重绘、全部可编辑。这是第一铁律的例外,仅在老板明确说"贴原图 / 局部贴原图"时启用;默认仍是全矢量重绘。
  • 裁剪取图方法(避免裁到周边文字):
    1. 用图像库(Pillow)打开原图,按元素色域定位。先逐行统计「该元素主色」像素,找最长且最粗的连续色段作为元素主体 y 范围(标题文字在元素上方、底部标签在下方,都是独立较矮色段,会自然被排除);再在该 y 段内逐列求 x 包围盒。
    2. 浅色背景易误判陷阱:浅蓝/浅灰背景往往也满足"b 通道最高"的朴素判定,会被当成"内容"导致整张图被选中。正确判定需加低明度通道约束:例如蓝色元素用 b>160 且 (r<120 或 g<120) 且 (b-r>40 或 b-g>40)(背景三通道都高、r/g 也高,会被排除;纯蓝/纯紫元素因 r/g 低而命中)。不同主色按需调整阈值。
    3. 加 8~12px padding 后裁剪,转 base64 内嵌;<img> 用 object-fit:contain 原比例显示。
  • 背景融合:混合页的页面背景色取原图背景色(从原图主色采样获得),让裁剪小图的浅色底与页面自然融合,避免一块突兀的矩形色块。
  • 全页贴原图仍属禁止:除非老板明确要求整页贴原图(兜底),否则不可把整页 <img> 铺满;混合模式只贴"局部难还原元素"。
  • 混合模式是临时兜底,不是终点——拿到清晰原图要回退矢量:当老板随后提供了更清晰/本技能可读的原图时,应基于新图重新做纯矢量重绘,回到第一铁律,而不是继续沿用裁剪贴图。第23页的最终路径就是标准示范:图读不清 → 混合模式救急(局部贴原图)→ 老板发清晰图 → 重做纯矢量版 → 通过。清晰参考到位后,矢量版在可编辑性上严格优于贴图(贴图里的文字不可改),所以不要懒得重做。

一·例外·补:贴图页遇半透明水印 → 反混合(un-blend)去水印算法(2026-10-21 实战验证)

  • 适用场景:混合模式/截图保真页贴入的 UI 截图带有半透明灰色水印(如"xxx.edu.cn"斜排大字、平台名水印)。老板说"忽略水印 / 去掉水印"时,不要打码、不要放弃贴图改矢量、更不要原样保留——用本算法把水印从像素层还原掉。
  • 先验教训:形态学开闭运算不可行,别在这条路上调参。水印灰度(约 207~216)与截图 UI 灰度(占位文字 216、浅灰 pill 235~242)区间重叠,腐蚀/膨胀阈值分不开:第一轮除不净,第二轮把 UI 浅色元素抹花。直接上反混合。
  • 算法原理(un-blend):半透明水印 = 灰色(灰度 GW≈207)以透明度 α 叠在背景上,观测灰度 g = GW*α + bg*(1-α)。逐像素解出 α 再反解背景:alpha = clip((255-g)/T, 0, 0.93)(T≈48 为归一化尺度),还原 rec = (ch - GW*alpha)/(1-alpha)。
  • 只动"浅色低饱和区",深色/彩色天然安全:仅处理 g>=200 且 sat<22(sat = max(rgb)-min(rgb))的像素——深色文字、红框、彩色按钮一律不碰。
  • 水印实心核单独处理:α≥0.55 的深核先形态学定位(MinFilter 腐蚀 + MaxFilter 膨胀找粗笔画连通块,细笔画 UI 文字不命中),再用邻域扩散修复(roll-based 8 邻域迭代,把周围干净像素向内填)填充。
  • 多 pass 逐级清扫(阈值从紧到松,每 pass 后目检防误伤):① pass1 反混合主扫(浅色低饱和区);② pass2 深核邻域填充(α≥0.5 且远离深色邻域);③ pass4 α≥0.30 补扫;④ pass5 灰度 g∈[172,235] 扫残留;⑤ pass6 g∈[233,249] 收尾。
  • ⚠️ 保护性回拷(必做):松阈值 pass 会误伤 UI 浅色元素(实战:pass6 把红框内浅色占位文字抹掉)。修复:处理前用 PIL 定位受保护矩形(红框、彩色标注)像素包围盒,处理完从原裁剪图把该矩形区域原样拷回成品。
  • 验收:处理前后同区域放大裁剪对比目检——水印完全消失、UI 文字/pill/红框完好,允许极轻微残留(页面缩放后不可见即可)。

二、文字必须可编辑

  • 所有文字节点统一 contenteditable="true",提供「编辑开/关」开关;不交付只读/锁定成品。
  • 标题、正文、图注、标签、页码、底部金句,逐字转写原图;修正 OCR/翻拍错别字;保持段落、项目符号、缩进。
  • 打码 / 模糊水印无需还原,向老板说明即可。半透明灰色水印不走打码——用上方「一·例外·补」的反混合 un-blend 算法像素级去除。

二·补、页面可删除 / 可调整演示顺序(多页课件必备)

  • 多页课件工具条必须提供「页面管理」入口,支持两类操作:
    1. 删除页面:在面板 ✕ 指定页(删除前 confirm 确认;至少保留 1 页,不允许多删到空)。
    2. 调整演示顺序:在面板用 ↑ ↓ 把指定页前移 / 后移,实时改变翻页顺序。
  • 面板列表显示每页序号 + 主标题(取该页 h1 文本),点击可跳转;当前页高亮。
  • 导出同步:导出的 HTML 必须按面板调整后的最新 DOM 顺序写入、剔除已删页,原图对照(data-orig/ORIG)随页同步,重开后顺序与内容一致。
  • 实现要点(见 assets/deck-scaffold.html):每页 <section> 用 data-orig 绑定自己的原图 base64,删除/移动只操作 DOM 顺序,导出时按当前 slides 顺序重写 ORIG 数组。
  • 手动改 ORIG 的坑(必看):用脚本批量增删 ORIG 项时,必须保留 var ORIG = [ ... ]; 外层方括号。常见错误是用 re.sub 把整个 var ORIG = [..]; 子串替换成拼接串,结果把 [ ] 一起丢掉 → var ORIG = "a","b"; 非法、整个脚本不执行、页面白屏。正确做法:文本页(无原图)追加,直接在括号内末尾加 ,"";删页则按 DOM 位置删对应项(从大到小删避免位移)。改完务必 node --check 抽出的 <script>。

  • 调序 / 删除必须"零破坏"(红线,老板 2026-10-09 明示 · 跨课件生效):无论用工具条「页面管理」↑↓ 还是用脚本批量重排,都必须满足以下硬约束——否则搬一页就可能导致后续页整体错位、ORIG 数组被截断、<script> 语法崩盘、页面白屏、内容乱套:
    1. 只动顺序,不动内容:删除/调序只操作 DOM 顺序(移动 <section> 块、改 slides 数组),绝不触碰任何页的 innerHTML——结构、文字、内嵌 base64、CSS class 搬完和搬前一字不差。
    2. 搬"完整块"而非字符串截取:移动/删除某页,必须用开闭标签深度计数提取完整的 <section class="slide ...">…</section> 整块(含其可能嵌套的子 <section>);禁止用朴素正则 <section>.*?</section> 或按行号硬切——遇到嵌套结构会切断、导致后续页整体错开、多出孤立 </section>、甚至把 ORIG 数组从中间截断而整段脚本语法崩盘(白屏)。
    3. 每页样式走独立 class,不依赖页序:所有页 CSS 写进 <style> 的独立 class(如 .s-xxx),绝不在某页内写 inline 关键样式、也绝不写"按 DOM 位置 / 第 N 页"的全局后代选择器——否则搬页后样式漂移、版面走形。
    4. ORIG 按 DOM 位置自动绑定,调序无需手动改:原图对照 bindOrig() 用 slides[i] ↔ ORIG[i] 按位置绑定;调序后绑定随 DOM 重排自动正确,不用手动搬 ORIG(只有"增/删页"才动 ORIG 数组,且必须保外层 []、按位置增删、node --check 复查)。
    5. 调序后强制配平复核:sections 数 == data-orig 数 == ORIG 项数(非空+空)三方一致;node --check 抽出的 <script> 语法通过;无残留孤立 </section>、无重复 id、无结构错层。任一不过即判不合格、当场修。

  • fit() 放大溢出 = 演示"超出屏幕/显示不全"的根因(红线,2026-10-22 已修):脚手架现已 flex 双居中,但旧 fit() 逻辑 var sc=Math.min(...),sv=Math.max(...);var s=(sv/sc-1>0.06)?sc:sv; 在窗口比例偏离 16:9(典型 16:10 笔记本、浏览器窗口宽于 16:9)时取 sv(cover)把整页放大超过视口,配 body{overflow:hidden} 把上下裁掉。修正:fit() 永远 var s=Math.min(vw/1280,vh/720);s=Math.max(s,0.45);(纯 contain),contain 在 16:9 本就铺满,仅在非 16:9 留少量黑边、绝不裁内容。详见本项第 2 点。

  • Edge(headless) 截图尺寸偶发错乱(坑,2026-10-22):--force-device-scale-factor=2 --window-size=1280,720 偶发输出 936×527(而非 2560×1440),会把 PPTX 背景图截歪。规避:截背景大图一律 --force-device-scale-factor=1 --window-size=1280,720(稳定出 1280×720),再用 Pillow resize((2560,1440), LANCZOS) 2 倍上采样;截完校验尺寸,异常按 1280×720 裁切兜底。

  • 本机无 PowerPoint / WPS / LibreOffice(约束,2026-10-22):PPTX 无法本地渲染预览,只能用 python-pptx 做结构化校验——逐 shape 量 left/top/width/height 换英寸,确认无越界(Slide 10×5.625in;1px=7143.75EMU、1px=0.5625pt)。生成/改完必须跑一次越界计数(见 scripts/verify_bounds.py 的 pptx 模式),越界 shape 数为 0 才算过(首页装饰元素有意出血的那些除外)。

  • 内容留"安全边距" + 整页 scale(.94) 收口法(技巧,2026-10-22):每页可见内容(文字/插画/引线/kicker)必须落在 1280×720 画布内并留 ≥40px 边距。验收:scripts/verify_bounds.py 提取每页内容元素 getBoundingClientRect,要求 minX≥8 / maxRight≤1272 / minY≥8 / maxBottom≤712(画布坐标)。若某页贴边/偏挤:不要逐条改坐标(会破坏内部已对好的 SVG 引线),而是给该页根容器加 transform:scale(.94);transform-origin:center center; 整页等比缩 6% 居中——内部相对位置不变、四周自动让出约 38px 立刻合规;再重捕背景+重提坐标重建 PPTX。

  • 图片被过滤,靠"量坐标"代替"看截图"验收(约束,2026-10-22):当前会话看不到截图,所有"是否溢出/是否贴边"的验收都用 headless Edge 提取元素 getBoundingClientRect 在 1280×720 坐标下核算,不靠肉眼。脚本见 scripts/verify_bounds.py。

  • python-pptx 追加页必须 drop_rel,否则 PPTX 被写坏(坑,2026-10-22 血泪):想在既有 PPTX 末尾"重建某一页"时,删旧页只从 prs.slides._sldIdLst remove 是不够的——slide part 仍挂在包图上。随后 add_slide() 会再次分配同名 slideN.xml,保存时 zip 出现两条同名 part(UserWarning: Duplicate name: 'ppt/slides/slideN.xml'),PowerPoint 打开可能报修复。正确删页:
    python for sldId in list(prs.slides._sldIdLst)[keep:]: prs.part.drop_rel(sldId.rId) # 先断关系,part 才不被写回 prs.slides._sldIdLst.remove(sldId)
    若文件已经出现重复 part(zipfile.namelist() 里同名两次、presentation.xml.rels 里同 Target 两条 rel),drop_rel 也清不干净,需在 zip 层外科修复:删掉多余 slides/slideN.xml 与 _rels/、从 presentation.xml.rels 删对应 <Relationship>、从 <p:sldIdLst> 删引用该 rId 的 <p:sldId>、从 [Content_Types].xml 删该 part 的 <Override>,重打包后再用 python-pptx 干净追加。每次保存后必查:len(namelist()) 无重复名 + len(Presentation(x).slides) 页数正确。

  • PPTX 背景截图要"稳定取景",否则整页上移被裁成假象(坑,2026-10-22):headless Edge 的 --window-size=1280,720 实际布局视口常小于 720,若同时把 #stage-wrap 强制 transform:scale(1),1280×720 的 deck 会溢出视口、被 flex 居中上移,截图底部内容被切——看起来像真溢出,其实只是取景问题(量 getBoundingClientRect 时内容明明都在 720 内)。稳妥做法:截图期间把 #stage-wrap 设为 position:fixed;left:0;top:0;transform:none,用高窗口(如 --window-size=1280,1040)截图,再 Pillow crop((0,0,1280,720)) —— 得到与 deck 坐标严格 1:1 的渲染,背景与文本框坐标才不会错位。量测与截图用同一套布局。

  • headless Edge --screenshot 偶发截到"渲染前",产出近黑空图(坑,2026-10-22):对内容较多/较新的页,--screenshot 有约一半概率截到页面还没渲染完的时刻,产出近黑图(可能只有 20~30 种色,肉眼是深灰一片)。别用"颜色数>1"判空——27 色的暗图也算多色、会漏判。正确判空:截图后裁出 deck 区域、算平均亮度,meanRGB > 90 才接受,否则重试(循环 10~14 次);并加 --run-all-compositor-stages-before-draw、--virtual-time-budget=6000。背景与预览都用同一套"亮度判空 + 重试"截图函数。

  • python-pptx 反复"清空 slide 再 add_picture"会残留孤儿图片 rel(坑,2026-10-22):clear() 只把 <p:pic>/<p:sp> 从 slide XML 移除,不会清 slideN.xml.rels 里指向旧图的 Relationship;反复重建同一页后,.rels 会堆多条指向旧图/废图的 rel(含全黑孤儿图),文件变脏(虽不渲染、但 bloated 且可能触发 Office 修复提示)。修法:要么用 drop_rel 删整页再干净重加(不要 clear+add 反复叠加),要么在 zip 层外科清理——删孤儿 media/xxx.png、删对应 .rels 的 <Relationship>、删 [Content_Types].xml 的 <Override>,重打包。每次保存后必查:每页 .rels 只指向它真正用到的那 1 张背景图、media/ 无多余 part。

  • 卡片高度是 flex 分配值时,要点会溢出卡片压到页脚(坑,2026-10-22):双栏对比页 .m-cards{flex:1;min-height:0} 时,卡片高度=剩余空间;若卡内(图标+标题+比喻+3 条要点+内边距)合计高度 > 分配高度,最后一条要点会穿出卡片底边、压在页脚上(布局不报错、越界校验也只量外边界,容易漏)。生成后必须逐元素量 li 的 bottom 是否 ≤ 卡片 bottom,而不只看整页 maxBottom。修法:改用固定 px 排版(整册靠 transform:scale() 缩放,内部恒定 1280×720,px 最稳,别用 cqh——container-type:inline-size 下 cqh 解析不确定),并按"内容高度预算"压缩内边距/间距/字号,或给卡片 justify-content:center 让内容居中、留白均衡。

  • 卡片悬停凸出效果整册漏加(坑,2026-10-22 复发 · 红线):纯文字生成课件时,SKILL 六虽列了"悬停微动效",但第一版 13 页一个卡片 hover 都没写——只有编辑高亮、页面列表、原图对照有 hover,所有内容卡片(卡片/分栏/面板)都不会在鼠标悬停时抬起。根因:把 hover 当成"适度科技感"可选项、且用逐页零散加的方式,加卡片时忘了顺手加 hover。正确做法:把 hover 当强制基线(见 六·补),用全局类名分组选择器一次写全全部卡片 class(.m-card/.k-col/.h-col/.b-card/.c-col/.b-cure/.h-card/.b-step/.b-find/.loop-txt/.b-quote/.b-final/.b-who/.psy-figure/.m-foot-cell …),新增一类卡片必须同步加进该选择器;交付前 Grep 逐个核对卡片 class 都在 hover 列表里,缺席即补。

三、保真还原(版式 / 配色 / 字体 / 层级)

  • 版式对齐:标题位置、层级、卡片排布、图表坐标、线条走向,按原图 1:1 还原,不随意改布局。
  • 配色对齐:从原图取色值,不套任何预设主题 / 强制风格模板(如 guizang-ppt-skill 会改掉原图配色,禁用)。
  • 主色方案(红线,老板 2026-10-22 明示,跨课件生效):任何演示文稿都要有一个主色作为全篇统一基调,严禁每页换一个强调色(红/绿/蓝/紫/橙混搭)。照片转课件:主色 = 原图固有配色(保真还原,不另起炉灶);纯文字生成课件:主色 = 「焦糖金单主色」方案(完整色板见「十四」第 3 条)。
  • 字体风格:按原图选字体(如原图无衬线则用 Microsoft YaHei / PingFang 兜底;有衬线则保留衬线感),不花哨。
  • 风格克制(手绘/极简页):若原图是手绘风、极简黑白、无渐变/无装饰(如「人+山=仙」哲理曲线页),重绘时严禁擅自叠加科技感渐变、光晕、装饰圆、阴影、彩色图标。应保留原图的"素底 + 单色线/字"气质,文字与图形比例、留白、走向按原图 1:1 还原。
  • 图形与人物的空间关系(曲线/路径上的图标/人物):若原图有人物/图标"站在"某条曲线/路径上(如谷底/山顶的火柴人),SVG 定位时必须让脚底/底部与曲线接触点 y 坐标重合(腿从接触点向上画,而非把整个人压在曲线中段或悬浮在曲线上方)。人物躯干/头部整体位于曲线之上,绝不与曲线线条交叉重叠;可用小圆点或透明填充让描边不盖住曲线。
  • 曲线/走势类图形:先定极值点,再写 path:还原曲线前,先在原图上定出极值点与端点的相对坐标(起点、谷底、山顶、终点各自的 x/y),再据此写 C/Q 贝塞尔控制点;不要凭印象起笔。第23页首版正是把"左起下降 → 谷底 → 上升 → 山顶 → 右落"画反成"左小丘 → 谷底 → 主峰",走势错就是这么来的。写完对照原图的拐点数量与上下坡方向再交付。
  • 流程/层级图中的箭头与连接标签必须按原图位置与形状还原(红线):第35页"数智化六层架构"左侧的三个"协同"弧形箭头必须放在金字塔左侧并按原图弯曲走向绘制,禁止简单地在右侧或层间用小标签替代。还原前先确认:箭头/标签在元素的哪一侧、弯曲方向(凸向左侧/右侧/上/下)、起止点连接哪两层、颜色与对应层是否一致,再用 SVG <path> 忠实绘制,避免"形状和位置都失真"(本页即因此被老板打回)。

四、版式饱满均衡(每页都必须遵守)

  • 画布为 16:9 容器;内容整体在页面内水平 + 垂直双居中,四周只留 3%~5% 窄边距 —— 不贴边,也不留大段空白。
  • 垂直居中实现(防顶重,强制):.slide / .stage 必须 display:flex;flex-direction:column;justify-content:center;页类 padding 上下对称、且上 padding 可略大于下 padding(如 56px 56px 48px)实现"轻微重心偏下";严禁 padding-bottom:0 与 .takeaway{margin-top:auto} —— 这两条会把底部金句顶到最底、把上方内容全挤高,导致演示时顶部贴固定工具条被遮、整体重心偏上(这是既往最易犯的根因)。
  • 矢量内容要铺满页面:卡片/区块用 flex/grid 撑满可用区,重心居中,杜绝"上方/下方一大圈空白""贴顶/贴底"。
  • 卡片型页面必须撑满演示页 + 内容垂直居中(红线,已复发多次):本课件反复出现"卡片偏小、三张卡片聚簇在页面中间、上下/左右一大圈空白、底部卡片下半部分留白"。正确做法:① 卡片容器(如 .skill-list/.rpa-list/.vs-row)用 flex:1;min-height:0 占满可用高度,每张卡片再 flex:1 等分拉伸,禁止让卡片只用自然高度然后 justify-content:center 聚到中间;② 卡片之间 gap 拉大到 20~28px,让它们"铺开"而不是挤在一起;③ 卡片自身用 display:flex;flex-direction:column;justify-content:center 让内容在卡内垂直居中,消除"卡片下半部分大片留白"(绝不能只给 p{flex:1} 让它顶对齐、空白全堆在底部);④ 卡片 padding 22~34px、字号按正文底线放大(卡片标题 ≥1.85cqw、正文 ≥1.4cqw)。
  • 演示页不留大量空白 + 间距适度拉大(老板明示 2026-10-09,跨课件生效):课件演示页严禁内容堆在页面中间、四周/上下留大圈空白。除「卡片撑满」外,要点行/卡片等内容块之间的间距也要适度拉大让页面饱满——要点行/卡片 gap 拉到 20~32px、正文 line-height 1.7~1.95、块间 margin 20~40px。宁可内容铺开布满 16:9 页面,也不要挤在一起留白。落地样例:第37页三步要点行 gap 18→30、step padding 18/22→22/26;第39页上下卡片间距 14→26、流程卡 gap 12→20。凡老板说"饱满些 / 不要留大量空白",按此把间距往大调。
  • 卡片文字默认左对齐(老板明示规则,适用后续课件;标题除外):卡片标题(h3 等)可按原图居中或左对齐,但标题之下的正文、说明段落、金句、列表项等一律左对齐,阅读流最自然;仅当原图明确是居中标语/单行口号时才允许正文居中。像第43页"会用AI/善用AI"这类金句卡同样回归左对齐。禁止为多行正文卡强行右对齐——右对齐只适合极短单行标题或刻意设计,长句右边缘参差不齐且阅读吃力。
  • 表格/密集页防溢出(红线):表格页(如第33页十大信息技术表)行数多、单元格文字长易折行,flex:1 拉伸行后仍可能因内容最小高度之和超过容器而把最后一行挤出演示屏。正确做法:① 给页类加 overflow:hidden 兜底;② tbody tr 与 thead/tbody 都加 min-height:0 允许 flex 收缩;③ 收紧单元格 padding(如 7~9px)与字号(正文 ≥1.2cqw、表头 ≥1.5cqw),在"撑满好看"和"不溢出"之间取平衡——宁可稍小一圈,绝不溢出屏幕。
  • 放射/环绕式卡片布局(中心 + 四周卡)禁止用绝对像素定位:中心元素可 absolute 居中,但四周卡片严禁给每张写死 top/left/right/bottom 像素坐标——该写法高度依赖容器实际高度,卡片一变高/容器一变矮就交叠。正确做法:中心 absolute 居中 + 左右两列 flex 列(justify-content:space-between 或 center)排四周卡片,卡片在文档流自然分布,绝不重叠。
  • 主内容容器禁止用 flex:1 撑满:在 .split 之类主容器上写 flex:1 会把后续块(如底部总结行)顶到最底、内部块默认顶对齐,在图形与底栏之间留一大段空白、整体重心偏上,还会抵消 .slide 的 justify-content:center。要居中就用内容自然高度 + 列内 align-items:center,交给 .slide 的 justify-content:center 整体居中。
  • 装饰性背景层(渐变分隔、波浪 ::before、光晕、水印)必须沉到文字之下,且用稳健写法:
  • 推荐写法(手写新页一律用此):装饰层 position:absolute; z-index:0; pointer-events:none,正文整体包进一层 .rich-inner{position:relative; z-index:1},文字必然压在装饰之上,不依赖负 z-index 魔法,最稳健。
  • 禁止手绘新页用 z-index:-1 + 容器 isolation:isolate 沉底:该写法曾导致整页空白(第 11 页 s-rich 事故)——负 z-index 在某些叠放组合下会把整页内容沉到背景之后、显示全白。仅当严格沿用已验证页面(如 s-iceberg/s-dark)时才可保留,且必须实测渲染非空。
  • 页类严禁用 position:relative 覆盖 .slide 的 position:absolute;inset:0:.slide 靠 absolute;inset:0 铺满 1280×720 舞台并保持 deck 层叠约定;手绘新页写成 position:relative 会破坏铺满与叠放,是 s-rich 空白事故的另一根因。新页类要么不写 position(继承 .slide),要么显式写 position:absolute;inset:0。⚠️ 已复发:本规则在 s-aip(第22页)被本助手再次违反,导致二次空白事故。必须把本条当红线——写完新页 CSS 后,立即用 Grep 自检该页类选择器是否出现 position:relative,出现即判不合格、当场改回(删掉它或换成 position:absolute;inset:0),绝不放过。
  • 自适应铺满(去黑屏 / 居中 / 标题不被遮,红线):固定 1280×720 舞台 + transform: scale() 等比缩放,做到三点:
    1. body 必须是 flex 容器并垂直水平双居中(display:flex;align-items:center;justify-content:center)。只靠 #stage-wrap{margin:auto} 不行——margin:auto 在非 flex 块级 body 里只水平居中、不垂直居中,deck 会贴在视口顶部,缩放后下方整条露 body 深色 = "底部长黑屏",且内容整体重心偏上。这是黑屏 + 重心偏上的根因。
    2. fit() 永远用 Math.min contain(红线,2026-10-22 修正):var s=Math.min(vw/1280,vh/720);s=Math.max(s,0.45);。绝不能用 Math.max/cover 分支放大整页——脚手架现已是 flex 垂直水平双居中(body{display:flex;align-items:center;justify-content:center}),旧版"纯 contain 贴顶出底部长黑条"是没 flex 居中时的历史问题,现已不成立。而 cover(sv)在窗口比例偏离 16:9 时(典型:16:10 笔记本、浏览器窗口宽于 16:9)会把整页放大超过视口,配 body{overflow:hidden} + 居中 transform 直接把页面上下(标题/页脚/诗句底部)裁掉 = 老板说的"演示溢出屏幕/显示不全"。旧逻辑里 sv/sc-1>0.06 ? sc : sv 取 sv 的那支就是这个 bug,已于 2026-10-22 删除。结论:contain 在 16:9 时本就铺满(sc==sv),仅在非 16:9 留少量黑边——可接受,比裁内容强。改完用 scripts/verify_bounds.py 在 16:10 / 21:9 / 4:3 三种窗口下复核内容完整可见、无裁切。
    3. 工具条/提示/页码浮层在演示态自动隐藏:#bar/#hint/#page 加 transition:opacity .4s,并用 body.idle 类在鼠标静止 2.6s 后 opacity:0;pointer-events:none 淡出,任意 mousemove/keydown/touchstart 即恢复。否则 fixed 的 #hint(左上)/#bar(右上)会直接压在幻灯片标题/kicker 上,导致"第一行标题演示不全"。并把 #hint 从 top:14px 移到 bottom:14px(左下),彻底让出顶部标题区。

四·补、演示版式三标准(老板 2026-10-09 明示 · 跨课件生效 · 交付验收红线)

以下三条是课件「是否适合演示」的硬验收标准,与 四 的版式饱满规则互为表里。生成/修改的每一页,交付前都须逐条自检,任一条不过即判不合格、当场改(与 四 的卡片撑满 / 间距拉大 / 垂直居中规则一起落地):

  1. 充分利用画布、减少大面积空白、内容均匀分布:页面布局要把 16:9 画布用足,内容均匀铺在整页内,左右/上下都吃满可用区;严禁内容只挤在页面中央一小块、四周/上下留一大圈空白(此条即 四 的"版式饱满均衡"验收口径:卡片容器 flex:1 撑满、卡片 flex:1 等分拉伸、gap 20~28px 铺开、要点行/正文间距适度拉大)。
  2. 图文均衡排版、图文穿插、不单侧堆积:当一页同时含图(矢量图形或混合模式贴入的原图)与文字时,图与文要穿插分布、左右/上下重量均衡,禁止把图片或文字整体堆在单侧(如整页文字挤左边、图挤右边一大块,或图全堆顶部、文字全堆底部)——单侧堆积会破坏演示节奏、留白失衡。落地:
    - 混合模式贴原图页:图与文字同左右边距、同宽自适应(如 .doge-visual{padding-left:4%} 与标题/段落左 4%、宽 92% 对齐)、图文在同一视觉区内交错排布(参考第48页"贴原图与文字同边距、自适应演示页"做法),不要图居中而文字偏左、也不要图比文字宽出一截。
    - 纯矢量页:图形区与文字区用双栏/交错布局,让视线有节奏地左右/上下流动,不出现"左半页全是图、右半页全是字"的硬割裂。
  3. 配色清爽、对比度高、整体视觉平衡:配色从原图取、整体清爽(浅底深字 / 深底浅字、对比清晰不刺眼,禁纯黑 #000 用 #1E293B/#1F2937);整页左右 / 上下"重量"要均衡——不能左重右轻、上满下空或头重脚轻。重量均衡优先靠「双栏等宽 + 垂直居中 + 内容撑满」实现;深色块/重色卡不要只偏在一侧,须与浅色文字区形成对称或对角平衡。
  4. 卡片内部不可留大片空白(内容稀疏卡片的网格/等分拉伸是反模式):第1条的"卡片 flex:1 等分拉伸"、第五·2 的"卡片内 justify-content:center 撑满"只适用于卡片内容本身接近填满的页;当一页是"多张内容稀疏的卡片"(每卡仅 标题 + 1~3 行短文字,如信息工具箱 3×2 网格),严禁用 grid-template-rows:repeat(n,1fr) 或把卡片 flex:1 拉到与最高卡/整行同高——内容少的卡被撑高后,卡内文字上下会空出一大片,演示极难看。正确做法:① 卡片统一 min-height(如 clamp(172px,30cqh,234px))保证同页多卡等高一致;网格行高 auto + 整组 align-content:center 在剩余空间垂直居中;grid 默认 align-items:stretch 让同行等高、跨行因同一 min-height 也等高——既满足老板"每页卡片大小高度一致",又不会把卡拉到超出内容的过高;② 上下排卡片间距适度拉大(行 gap 用 clamp(22px,3.2cqh,36px) 量级)让两排分明、美观;③ 卡内文字 justify-content:space-between(标签/工具/说明贴顶·中·底分布)让内容在统一高度内撑开、不空,或 center + 大字号 + 适度 gap 饱满,杜绝卡内上下大空白;④ 字号按本红线底线取上限(卡片标题 ≥1.5cqw、正文 ≥1.3cqw),宁可字大些也不要卡内空荡。一句话:页面满 ≠ 卡片内满 ≠ 卡高一致;卡内空是另一种"大片空白",同样违反第1条。
  • 过程纪律(老板 2026-10-09 明示):与老板交互过程中发现的任何渲染问题 / bug / 踩坑(黑屏、错位、溢出、空白、配平失败、SKILL 规则被违反等),必须当场自动记录进本 SKILL 对应条目(红线圈出 + 复发标注),并修复对应页面,不等地主事后追问。每次踩坑都回写 SKILL,使其随真实项目持续变厚、变准(本课件已沉淀:s-rich 负 z-index 空白、s-aip 二次 position:relative 空白、s-dilemma 页类 position:relative 黑屏、ORIG 数组截断白屏、SVG viewBox 裁字、书封 flex 子元素撑爆结构区、s-src 网格 repeat(2,1fr) 把内容稀疏卡撑高致卡内上下大空白等)。

  • 页面重排(调序)纪律:老板要求把某页移到另一页前/后时,必须同步重排 <section> 块顺序与 ORIG 数组顺序(按同一目标索引序列),不能只挪 section——因为 bindOrig() 按 DOM 位置 slides[i]↔ORIG[i] 绑定、且用 ORIG[i] 覆盖 data-orig 属性。正确做法:用脚本提取全部 <section>(正则非贪婪配对)+ ORIG 数组元素(引号 token),构造 0-indexed 目标序列(如"第N页"=idx N-1),两列表同序重排后写回(sections 区间整体替换、ORIG 用 json.dumps 重组);配平校验 sections/data-orig/ORIG 三者均为总页数、node --check 通过。单独只改 section 顺序会导致原图对照错位(本课件 2026-10-09 重排:第45页→53前、46/47/48/52页→1后,已验证)。

五、文字排版强制标准(每页都必须遵守)

  1. 绝对禁止文字重叠:不要用 position: absolute 把文字随便摞在页面上;标题、正文、图注、页码各自占独立区块,用正常文档流或 flex/grid 排列,块间留 8~12px 以上空隙。
  2. 字号自适应,不写死:页类 class 上加 container-type:inline-size,字号统一用容器查询单位 cqw(如标题 clamp(30px,3.4cqw,48px)、卡片标题 clamp(16px,1.5cqw,22px)、正文 clamp(13px,1.2cqw,16px)),让文字真正随页面(舞台)大小自适应缩放;禁止用 vw 做字号——本课件舞台是固定 1280×720 + transform:scale 等比缩放,vw 基准是视口而非舞台,会导致缩放叠加错位、字偏小或偏大。标题约 28~40px、正文 16~20px、行高 1.5~1.8,行行透气;一段太长一页放不下时,自动缩小字号或拆到下一页,绝不挤在一起。
    - 信息密集页字号底线(红线,已复发):多卡片/多列表/小项密集页(如 6 栏功能页、时间线+两栏、成熟度阶梯页)最易为"塞进内容"把字压到 11px 以下——演示场景完全看不清。规则:正文下限 ≥ 1.3cqw(≈16px@1280)、小字项/列表项 ≥ 1.1cqw(≈13px@1280)、卡片标题 ≥ 1.5cqw;严禁把字压到 ≤ 0.9cqw(≈11px)。宁可改用 3×2 网格(如第26页从 6 栏横排改 3×2)、拆页、或放大舞台利用率,也不要牺牲可读性。卡片内容要撑满卡片空间——用 display:flex;flex-direction:column;justify-content:center 让内容在卡片内居中,并增大字号/行距/项间距,避免大片留白。
  3. 不溢出/不截断:长句 word-wrap: break-word 自动换行,不跑出页面;文字区有固定高度上限,超出滚动或分页,不压到其他文字;左右边距与内容一致(约 3%~5%),不许顶到屏幕边缘。
  4. 层级清楚:标题/副标题/正文/图注字号与颜色明显区分;标题与正文间留 16~24px;一页最多一个主标题。标题结尾不要标点符号(句号/问号/感叹号/冒号等一律去掉;成对引号/书名号可保留)。
  5. 字体与配色:用适合演示的中文字体;深色字配浅底、浅色字配深底,对比度足够,不出现浅灰字配白底看不清。黑色字体一律改用「中偏重度灰、近黑」(如 #1E293B/#1F2937,禁用纯黑 #000000)。
  6. 要求「文字放一行 / 单行」时必须先核算宽度,再加 nowrap:老板说"文字放一行"时,不能只加 white-space:nowrap 就交差——若字号本身超出栏宽,nowrap 只会让文字横向溢出/被切,比折行更难看。正确顺序是:
  7. 算栏宽:栏宽 = (舞台宽 1280 − 容器左右 padding) × 该栏百分比;
  8. 算字宽:所需宽度 ≈ 字数 × font-size × (1 + letter-spacing)(CJK 一字约 1em 宽);
  9. 必须满足 所需宽度 ≤ 栏宽,不满足就同步缩小字号(必要时略微加宽栏位配合),留出 10%~15% 余量更稳;
  10. 核算通过后再加 white-space:nowrap 锁定单行。
    实例:第23页左栏 37% ≈ 412px,13 字金句 @2.1cqw(26.9px) ≈ 349px(占 85%)→ 单行可容;此前 @2.8cqw 约 466px 超出 34% 栏宽(379px),所以才会折成两行。

六、科技感(适度)

  • 深色渐变底、标题发光/渐变描边、细发光线条、毛玻璃卡片;
    够炫但不喧宾夺主,适合讲课演示场景。

六·补、卡片 / 分栏 / 面板必须带悬停凸出效果(强制 · 红线,2026-10-22 复发)

  • 凡课件里出现的「卡片 / 分栏 / 面板 / 标签块」类元素(圆角带边框或带底色的独立内容块,如 .m-card、.k-col、.h-col、.k-fuel-card、.b-card、.c-col、.b-cure、.h-card、.b-step、.b-find、.loop-txt、.b-quote、.b-final、.b-who、.psy-figure、.m-foot-cell 等),必须统一加上鼠标悬停凸出微动效:translateY 抬起(约 -6px)+ 轻微放大(scale 1.012~1.02)+ 阴影加深;这是交互反馈、也是演示节奏感的一部分,绝不能漏(本课件 2026-10-22 第一版整册 13 页一个卡片 hover 都没加,被老板打回)。
  • 实现方式(全局统一,一次写全,不逐页零散加):在 <style> 末尾用类名分组选择器(而非逐页 .s-xxx .card:hover)一次性覆盖全部卡片 class,降低漏加概率。规范写法:
    css .m-card,.m-foot-cell,.k-exp,.k-col,.k-quote,.k-fuel-card,.k-over,.k-final, .h-iron,.h-col,.h-baseline,.h-evo,.h-answer,.h-final, .b-find,.loop-txt,.b-quote,.b-step,.b-final,.b-who, .b-card,.c-col,.b-take,.b-hero,.b-cure,.h-card,.psy-figure{ transition:transform .28s cubic-bezier(.2,.7,.3,1),box-shadow .28s ease; will-change:transform; } .m-card:hover,.m-foot-cell:hover,...(同组 :hover){ transform:translateY(-6px) scale(1.015); box-shadow:0 16px 34px rgba(126,90,30,.20),0 0 0 1px rgba(200,150,60,.22); z-index:5; } @media (prefers-reduced-motion:reduce){ /* 同上,但 transition:none 且 :hover{transform:none} */ }
  • 冲突规避(必看):① 卡片 base 样式不要给 transform(否则覆盖 hover);若某页容器本身 transform:scale(...)(如 .s-stress .inner),该页内卡片不纳入全局选择器;② 卡片若是 position:static,transform 仍会创建新层叠上下文、自然浮到兄弟之上,无需强求 position:relative;③ 每页根 .s-xxx 与 #deck 多为 overflow:hidden,但卡片普遍在 24~46px 内边距内,6px 上移 + 1.5% 缩放不触边、不被裁,安全;④ 与 [contenteditable]:hover 的编辑高亮(背景)可共存,悬停时卡片抬起 + 文字底色高亮同时出现,无冲突。
  • 交付前 Grep 自检(红线):对本次新增/改动页的全部卡片 class,逐个确认其类名出现在全局 hover 选择器列表里;任一卡片 class 缺席即判不合格、当场补。新增一类卡片时,必须同步把它加进这个分组选择器(这是本规则复发的主因——加卡片忘了加 hover)。

七、全局右下角水印(可选 · 跨课件复用)

  • 老板要求给每页加内部资料水印时,用通用类伪元素统一注入、不侵入任何页 HTML:给 .slide 加 ::after,content:"\00A9内部资料声明"、position:absolute; right:34px; bottom:10px、font-family:"Microsoft YaHei",sans-serif、font-size:13px(10号字≈13px)、font-weight:700、color:rgba(110,110,110,.4)(浅灰半透明)、pointer-events:none(不挡交互)、user-select:none、z-index:6。伪元素相对 .slide(position:absolute) 定位、脱离 flex 流,不影响各页布局;切勿改 .slide 的 position(会覆盖绝对定位致黑屏,s-dilemma 黑屏同因);水印落右下角角落、半透明,正文图表正常可见。
  • 位置/字号按老板最新要求:10号加粗、向右值调大(更靠左)避免贴极右边缘。

八、纠斜与裁边(预处理)

  • 上传照片若歪斜或带白/黑边,先用 scripts/crop_images.py 检测并纠正(投影法,端正照片有守卫生效不误转),再读图重绘。

九、PDF 扫描件

  • 用 pdftoppm / pdfimages 把 PDF 每页转成图片,再按照片流程处理;多页 PDF 自动合并翻页。

九、合并统一模板

  • 把两份/多份材料合成一份课件时,统一模板与配色风格,按逻辑重排页码与顺序,内容有连贯性;不机械拼接。

十、续作规则

  • 未明说「重新另起一份 / 新建一份课件」时,默认在已有课件文件里追加新页(见工作流第五步)。

十一、存储位置

  • 产物存工作区(如 F:\WorkBuddy_Financedata\...),不写 C 盘;临时脚本用完即删。

十二、PPTX 导入与 PPT↔HTML 双向转化

  • 导入(PPTX → HTML,可编辑):用户给 .pptx 时,用 python-pptx(from pptx import Presentation)逐页解析:
  • 提取每页文字、形状(文本框 / 矩形 / 箭头 / 表格 / 图片 / 占位符),映射到单文件 HTML 课件的 <section class="slide s-xxx">;文字节点统一 contenteditable;
  • 形状/表格/箭头/色块全部矢量重绘(CSS/SVG),不要把 PPTX 内嵌位图直接 <img> 铺页(局部难还原元素走「一·例外」混合模式,且向老板说明);
  • 版式对齐:保留原 PPTX 的页序、标题层级、卡片/分栏布局;配色从 PPTX 取(主题色 pr.slide_master / 形状 fill);每页用独立 class 承载该页专属版式;
  • 多页自动合并翻页;原 PPTX 页(如需)可先用 LibreOffice / PowerPoint 把每页渲染为 PNG、再 base64 内嵌作「原图对照」浮层(对齐 data-orig/ORIG 机制)。
  • 依赖:pip install python-pptx(用 managed venv 安装,不污染系统)。
  • 导出(HTML → PPTX,可编辑):已有 HTML 课件时,用 pptxgenjs 把每个 <section class="slide"> 转成 PPTX 一页:
  • 文字(含 contenteditable 文本)写入真文本框(textbox / 形状内的 text),保留标题与正文层级、卡片分栏近似;
  • 每页备注(speaker note)由该页底部金句 / takeaway 生成;
  • 矢量图形(CSS/SVG)尽量转成 PPTX 原生形状(矩形、箭头、表格);纯 CSS 渐变/装饰未必需还原,但文字与结构必须可编辑,不输出"整页渲染成图"的位图化 PPTX。
  • 双向铁律:无论哪个方向,转化全程必须保持「可编辑」——PPTX 里的文字是文本框(可改),HTML 里的文字是 contenteditable(可改);禁止把整页拍成图片塞进另一端(那会丢失可编辑性,违反本技能核心)。

十三、内容驱动配图(相关性优先 · 老板 2026-10-19 明示)

  • 生成课件(尤其纯文字源 / 新建页)时按内容语义主动配图,不可只堆一大段文字、也不可放与内容无关的装饰图糊弄。
  • 与「保真还原」的关系:若源材料(原图 / PPTX)本身已有配图,以还原源图配图为准(按 一 / 三 章矢量重绘),不另起炉灶重配;本规则的"主动配图"主要适用于两类场景:① 源材料为纯文字、无图,需补配图让页面饱满且相关;② 按文字主题新建整页。两者不冲突。
  • 配图与内容强相关:图标 / 插画 / 示意图须准确表达该页主旨——讲「数据治理」配数据库 / 链条 / 仓库图,讲「人机协同」配人与齿轮协作图,讲「风险」配盾牌 / 警示图,讲「增长」配上升曲线 / 阶梯图。用内容决定配图,而非随手挑图标。
  • 配图形式优先矢量:图标用 SVG/CSS 绘制(可编辑、不贴位图、随版式缩放);复杂概念用示意图 / 流程图;确需真实照片时走「一·例外」混合模式并说明。
  • 图文均衡(呼应 四·补 第 2 条):配图与文字穿插分布、左右 / 上下重量均衡,不单侧堆积;图不喧宾夺主、不挤占正文阅读区。
  • 配图数量适度:一页配图服务于表达,不是越多越好;内容稀疏页可用「配图 + 卡片」组合把页面撑满、消除大片空白(呼应 四·补 第 4 条),但每张图都要有内容支撑、不凑数。

十四、纯文字生成课件的分页与金句原则(老板 2026-10-22 明示)

用户给一段纯文字(非照片 / 非 PPT)要求生成课件时,除遵守一~十三外,还须遵守两条:

  1. 按内容量分页,不硬塞一页:内容多(含多个独立主题/层次,如「实验背景 → 概念对比 → 理论框架 → 结论金句」)时,按逻辑拆成多页,每页只承载一个清晰主旨;禁止为了省事把大段内容挤压进一页(后果:字号过小、卡片溢出、要点穿出卡片、演示看不清)。拆分判据,命中任一即拆页:
    - 一段文字含 ≥2 个可独立成页的主题块(如实验、两类奖励、三大燃料、效应结论);
    - 一页正文独立区块 > 4~5 个,或要点总数 > 6~8 条;
    - 为塞内容需把正文字号压到 <1.1cqw。
    - 拆页后每页仍须版式饱满(四 / 四·补:配图、卡片、金句把每页撑满),而不是拆成几页空荡荡。

  2. 金句 / 摘要 / 总结 / 笔记句子必须显性体现:文字源里的金句、比喻句、结论句、括号总结(如「意义是地基,快乐是装修」)、段末点题句,是「讲者最想被记住的一句话」,必须单独提出来放在醒目位置——底部金句条(takeaway)、引语横幅、或收尾大字卡,用较大字号 + 主题色/深色底突出,不能只埋在正文里被淹没。落地:
    - 每页至少提炼 1 句金句/结论放在页底或显眼处;
    - 整篇的「压轴金句」(如「真正能持续做一件事的人,不是意志力更强,是内在动机还没被偷走」)放在最后一页做收尾大字;
    - 一句里出现多个金句(糖/蛋白质、地基/装修、毒药/燃料)时,把最凝练的一句做成横幅,其余并入正文或卡片。

  3. 演示文稿必须有一个主色方案(主色 + 辅助色,老板 2026-10-22 明示,跨课件生效):任何演示文稿 / 课件,无论照片转的还是纯文字生成的,都要确立一个主色作为全篇统一基调、辅以少量中性辅助色,严禁每页换一个强调色(红/绿/蓝/紫/橙/青混搭,视觉花哨、不专业)。当前默认主色方案为「焦糖金单主色」,统一色板:
    - 唯一强调色:焦糖金 #C8761E(渐变尾 #E0A040、深焦糖 #B4792E);
    - 对比页"负面/被动"一侧:暖灰棕 #8A7A63,浅底 #F4EFE6→#E9E2D4、边框 #D4C7AE;
    - 对比页"正面/意义"一侧:焦糖金浅底 #FBF0DD→#F3E1C2、边框 #E0B87A;
    - 页面底统一奶油暖底 radial-gradient(#FBF4E6,#F7F2E8,#F2EEE3),标题深灰 #2B2E33,正文灰 #4A4F55/#5A5F66,小标 kicker #B4792E;
    - 语义对比(糖vs蛋白质、毒药vs燃料、被动vs主动、温度计vs恒温器)用同色系深浅区分:正面=焦糖金、负面=暖灰棕,不再用红vs绿这种强对比;
    - 照片原样还原页豁免:照片页保持源照片固有配色(人体医学图的器官色、秋叶水彩色等),只把"我另加的强调色"(如红色 slogan、橙色圆点)统一进主色即可,不硬改源照片色。

工作流

1. 读图

  • 用 Read 工具查看用户所附图片/PDF(支持多张)。逐页识别:标题、栏目标签、卡片/区块、正文、图表、线条、色块、页码、底部金句。
  • 修正 OCR/翻拍错别字;保持段落、项目符号、缩进。打码/模糊水印无需还原,向老板说明。
  • 若照片歪斜/带白边,先跑 scripts/crop_images.py &lt;图1.jpg&gt; [图2.jpg ...] -o cropped(端正照片会判 0° 不误转)。
  • 用户给的是 .pptx 而非图片:不走读图,直接走「十二、PPTX 导入与 PPT↔HTML 双向转化」的导入流程——用 python-pptx 解析每页文字/形状 → 矢量重绘为 &lt;section class=&quot;slide&quot;&gt; 可编辑 HTML(文字 contenteditable、图形 CSS/SVG 重绘、配色从 slide_master/fill 取、原图对照用 LibreOffice/PowerPoint 渲染 PNG 后 base64 内嵌);多页自动合并翻页(依赖 pip install python-pptx,managed venv 安装)。
  • 读图是第一步,读不清就别硬画(红线):若 Read 读不到图(返回不支持/被过滤)或图片模糊到关键图形(曲线走向、人物姿态、小图标)无法辨认,立即告知老板——请其把图片保存到工作区 / 切换多模态模型 / 用文字描述内容。绝不要在读不清的情况下凭猜测反复矢量重绘:第23页曾因图读不清连续两版被判"不对",白做两轮还消耗信任。拿到可读的清晰图再动手,效率和还原度都远高于盲画。
  • Read 不支持读图时,用 OCR 引擎兜底(已实战验证 2 次):当会话模型不支持读图(Read 返回"does not support reading images")、且无法切换多模态模型时,先别急着让老板描述——装纯 Python 中文 OCR rapidocr_onnxruntime(pip install -i https://pypi.org/simple rapidocr_onnxruntime,内置 onnxruntime+PP-OCR 模型、无需外部二进制,支持中文,首次运行即可用),三步还原版式与配色:
    1. OCR 提取文字+坐标:RapidOCR() 读图,输出 [box, text, score](注意 score 是字符串,排序/格式化前先 float();box 是 4 点坐标),按 y 排序即得阅读顺序与行列结构。
    2. 逐块采样文字颜色:对每个 OCR box,取框内"高饱和像素"(sat=max-min&gt;40)的 RGB 均值,得到每块文字的准确颜色(背景色从角落/顶部采样)。
    3. 连通域去噪辨伪:用 8 邻域连通域分析判断零星彩点是否翻拍噪声——最大连通域仅十几个像素、且采样仍是背景色,则判定为噪声忽略,不被误导配色。
  • 局限:OCR 只能读文字,无法还原图形几何(框/阶梯/箭头/连线的精确形状与走向)。纯文字页(对照表、要点列表)可据此全矢量重绘;复杂信息图(架构图、阶梯路线图)矢量重绘易失真,此时走「标题矢量可编辑 + 图形主体贴原图」混合模式(裁掉顶部标题横幅后贴图,见 一·例外)。

2. 选骨架

  • 单页:复制 assets/slide-scaffold.html(矢量卡片骨架)。
  • 多页(≥2 张):复制 assets/deck-scaffold.html(带翻页合并骨架;深色页加 .s-dark、浅色页加 .s-light,每页用独立 class 承载原图专属版式)。

3. 矢量重绘与填充

  • 把转写文字填入 contenteditable 节点;卡片/方框/箭头/表格/色块/线条/图标/图表全部用 CSS/SVG 绘制,绝不贴原图当内容。
  • 复杂版式(表格、金字塔、趋势图、冰山图、放射卡片等):以骨架公共结构(舞台、翻页、工具条、原图对照、JS)为底,每页单独写针对性 CSS + HTML,新 slide 用独立 class 避免污染;配色从原图取。
  • 注入原图 base64(供「原图对照」浮层):
    bash node scripts/inject_images.js &lt;模板.html&gt; &lt;输出.html&gt; &lt;原图1.jpg&gt; [原图2.jpg ...]
    (用任意已装 Node 运行:node scripts/inject_images.js ...;若依赖不在默认解析路径,设置 NODE_PATH 指向依赖目录即可,跨平台通用,不绑定本机路径)

4. 强制标准核验清单(交付前必过)

  • [ ] 默认零 &lt;img&gt; 贴图 —— 所有图形均为矢量(CSS/SVG)重绘;例外:仅当老板明确授权「混合模式」时,允许 &lt;img&gt; 仅用于局部难还原元素(logo/复杂图标),且其余文字仍矢量可编辑、页面背景取原图色融合;整页铺原图仍禁止(除非老板明确兜底);
  • [ ] 版式/配色/字体/层级/风格 对齐原图:手绘/极简黑白页不擅自叠加科技感渐变、光晕、装饰圆、彩色图标;曲线/路径上的人物/图标脚底与曲线接触点 y 重合、整体位于曲线之上、不与曲线线条重叠;原图有的图形方案一个没少、没简化;
  • [ ] 每页内容水平+垂直双居中(.slide/.stage 有 justify-content:center;页类 padding 下≠0、上≥下;无 margin-top:auto 造成的重心偏上);四周仅 3%~5% 边距,无大片空白、无贴边贴顶贴底;
  • [ ] 无任何文字/图形重叠:无随意 absolute 摞字(块间 ≥8px);放射/环绕卡用 flex 列文档流而非固定像素坐标,绝不重叠;主内容容器未用 flex:1 撑满(无"中间大片空白、重心偏上");页类未用 position:relative 覆盖 .slide 的 position:absolute;inset:0(交付前必须 Grep 新写入的页类选择器,命中 position:relative 直接判不合格并改回;本规则已因 s-aip 第22页二次空白事故复发,红线);装饰层用 z-index:0 + 正文 .rich-inner{z-index:1} 稳健压字(禁止手绘新页用 z-index:-1+isolation 沉底,此前致 s-rich 整页空白);
  • [ ] SVG 内容不被 viewBox 裁切(「只显示一半」红线,已复发):SVG 根元素默认 overflow:hidden,超出 viewBox 的部分会被直接裁掉。&lt;text&gt; 的 y 是基线不是顶边——字形上伸约 0.78 × font-size、下伸约 0.22 × font-size;基线贴 viewBox 上边界(y &lt; font-size)就会把字的上半截切掉(第23页「人+山=仙」基线 y=10、字号 2.3cqw≈29 单位 → 上沿 y≈-13 被切)。写完 SVG 必须逐个核算每个 &lt;text&gt; / &lt;g&gt; 的包围盒是否落在 viewBox 内;贴边的(尤其顶部)优先给 viewBox 加负向余量(例:viewBox=&quot;0 -70 760 590&quot; 留出 70 单位顶部空间),而不是硬把元素往下挤(会挤掉与曲线的相对关系)。
  • [ ] 组合图形定位以「接触点」对齐,不用 translate 原点:人物/图标这类 &lt;g&gt; 组,其视觉接触点通常不在局部原点(如火柴人脚底在局部 y=28)。要把脚放在曲线点上,应令 translate_y + 28 = 曲线点 y,而不是 translate_y = 曲线点 y——后者会让整体下沉(第23页即下沉 28 单位致脚穿曲线)。定位后按 头顶 = translate_y - 62、脚底 = translate_y + 28 复核。
  • [ ] 要求单行的文字已做宽度核算:字数 × 字号 × (1+letter-spacing) ≤ 栏宽,且已加 white-space:nowrap;未核算就 nowrap 会横向溢出(栏宽 = (1280 − 左右 padding) × 栏百分比);
  • [ ] 标题 clamp 28~40px、正文 16~20px、行高 1.5~1.8、长句换行不溢出;信息密集页正文 ≥ 1.3cqw、小字项 ≥ 1.1cqw、卡片标题 ≥ 1.5cqw,未把字压到 ≤ 0.9cqw(≈11px)(此红线在 26/28/29/30/32 页反复踩坑——塞内容压字导致演示看不清);
  • [ ] 卡片型页面已撑满演示页、不聚簇、不偏空白(红线,已复发多次):卡片容器 flex:1;min-height:0 占满高度,每张卡片 flex:1 等分拉伸、gap 20~28px 铺开,卡片自身 justify-content:center 让内容垂直居中(消除"卡片下半部分大片留白"——禁止只给 p{flex:1} 顶对齐把空白堆底部);卡片 padding 22~34px、卡片标题 ≥1.85cqw、正文 ≥1.4cqw;金句/结论卡文字 text-align:right(老板规则)且撑满整页,说明类多行段落卡保持左对齐但同样撑满;
  • [ ] 表格/密集页不溢出屏幕(红线):表格页(如十大信息技术表)已给页类加 overflow:hidden 兜底、tbody tr 与 thead/tbody 加 min-height:0 允许收缩、单元格 padding 7~9px 收紧;最后一行完整在屏内、未被挤出底部;
  • [ ] 一页一个主标题,层级/配色对比清晰;
  • [ ] 工具条齐全:编辑开/关、原图对照、页面管理(删除页 ✕ + 调整顺序 ↑ ↓)、导出 HTML、打印存 PDF;
  • [ ] 多页翻页(← →、滚轮、触屏)与页码正常;fit() 用智能 cover/contain(sv/sc-1&gt;0.06 回退 contain)且 body 为 flex 垂直水平双居中——演示时无"底部长黑屏"、内容重心居中不偏上;
  • [ ] 演示态标题不被浮层遮挡(红线):#bar/#hint/#page 带 transition 且 body.idle 静止 2.6s 后淡出(鼠标/键盘/触屏即恢复);#hint 已移到左下(bottom:14px)而非左上,顶部标题区完全让出;首行标题演示完整可见;
  • [ ] 卡片文字默认左对齐:金句/说明/段落卡均左对齐,仅原图明确居中标语才允许居中;禁止为多行正文强行右对齐;
  • [ ] 所有内容卡片 / 分栏 / 面板都带悬停凸出效果(红线,2026-10-22 复发 · 见 六·补):每张卡片 class 都出现在全局 hover 分组选择器里(已统一 translateY(-6px) scale(1.015) + 阴影),鼠标悬停即抬起放大;Grep 逐个核对本次新增/改动页的卡片 class 无缺席,缺席即补;与 [contenteditable]:hover 编辑高亮共存无冲突;
  • [ ] 演示版式三标准已逐条自检(老板 2026-10-09 红线 · 见 四·补):① 画布用足、无明显大片空白、内容均匀分布整页(非挤中央一小块);② 图文均衡穿插、不单侧堆积(混合页图与文同边距自适应、纯矢量页图形与文字区双栏/交错);③ 配色清爽对比度高、整页左右/上下重量均衡(无左重右轻、上满下空、头重脚轻);任一条不过当场改。
  • [ ] 流程/层级箭头与标签按原图位置+弯曲方向+颜色还原,未简化为错位小标签;
  • [ ] 表格/密集页末行不溢出:overflow:hidden + min-height:0 + 收紧 padding/字号到 td ≥1.1cqw、th ≥1.4cqw;
  • [ ] 页面管理可用:删除页有确认、至少留 1 页;↑ ↓ 调序实时生效;导出 HTML 顺序与当前一致、不含已删页。
  • [ ] 内容驱动配图已做相关性自检(老板 2026-10-19 红线 · 见 十三):每页配图准确表达该页主旨、无无关装饰图糊弄;图文均衡穿插不单侧堆积;纯文字源/新建页已主动补相关配图、非只堆一大段文字(源材料本身有图则以「还原源图配图」为准、不另起炉灶重配);每张图都有内容支撑、不凑数。
  • [ ] 纯文字源已按「分页 + 金句」原则自检(老板 2026-10-22 红线 · 见 十四):内容多时已按逻辑拆成多页(未把 ≥2 个主题块/ >6~8 条要点硬塞一页、未为塞内容把正文压到 <1.1cqw),且每页仍版式饱满;每页已单独提炼 ≥1 句金句/结论放在页底金句条或引语横幅(用主题色/深色底突出),整篇压轴金句已放到最后一页做收尾大字——金句未被埋在正文里淹没。
  • [ ] 演示文稿已确立主色方案(老板 2026-10-22 红线 · 见 三 / 十四):全篇有一个统一主色、未出现"每页一个主题色"(红/绿/蓝/紫/橙混搭);照片转课件主色 = 原图固有配色、纯文字生成页主色 = 焦糖金 #C8761E;语义对比页正面 = 焦糖金、负面 = 暖灰棕 #8A7A63,不用红vs绿强对比;照片还原页保持源色、仅统一另加的强调色。
  • [ ] 调序 / 删除零破坏(红线):用面板 ↑↓ 或脚本重排后,已用"开闭标签深度计数"搬完整 &lt;section&gt; 块(非朴素正则 .*?&lt;/section&gt; / 行号硬切 / 改动 innerHTML);每页 CSS 仍为独立 class、不依赖页序;sections == data-orig == ORIG 三方配平、node --check 抽出的 &lt;script&gt; 语法通过、无孤立 &lt;/section&gt; / 重复 id / 结构错层;搬完每页结构与内容一字不差。

5. 产出与交付

  • 默认交付单文件 HTML 课件(自包含,含原图 base64 对照)。
  • 若老板要 PPTX,再按 pptx-batch 思路用 pptxgenjs 另出可编辑 .pptx(真文本框 + 每页备注)。
  • 用 present_files 打开预览并交付。
  • 续作:再收到新照片,复制 assets/deck-scaffold.html 的 &lt;section class=&quot;slide&quot;&gt; 追加为下一页,并在 JS 的 ORIG 数组按位置补一张原图 base64(inject 自动按 __ORIGn__ 填)。
  • 追加 ORIG 必须用上下文定位,禁止裸 rindex(&#x27;];&#x27;):]; 在脚本里可能出现多次(如 export 函数的正则 /var ORIG\s*=\s*\[[\s\S]*?\];/ 里就有 ];)。安全做法是用正则 var ORIG = \[([\s\S]*?)\];\s*var idx= 或先定位 var ORIG = [ 再匹配到其对应的 ];\s*var idx=,否则会把 base64 注入到 export 正则里,整段脚本语法崩掉。

参考

  • references/workflow.md:完整打法、命名规范、常见坑。
  • assets/slide-scaffold.html:矢量重绘模式单页骨架。
  • assets/deck-scaffold.html:多页翻页合并骨架(含浅色三卡 / 深色六卡示例)。
  • scripts/inject_images.js:原图 base64 注入助手(替换 __ORIGn__)。
  • scripts/crop_images.py:自动裁边 + 纠斜预处理(cv2/PIL)。
  • scripts/verify_bounds.py:演示不溢出 / 内容不裁切自检(两种模式,2026-10-22 新增)。
  • python scripts/verify_bounds.py html 课件.html:用 headless Edge 渲染,① 自适应回归门——在页内把 window.innerWidth/innerHeight 模拟成 16:9 / 16:10 / 21:9 / 4:3 四种窗口比,分别重跑 fit(),确认实际 scale 恒等于 min(vw/1280,vh/720)(contain),绝不等于 max(...)(cover,即旧「溢出屏幕」根因);② 逐页内容包围盒——量每页内容元素 getBoundingClientRect(画布坐标),装饰出血元素自动剔除,真实裁切 >4px 判 FAIL、贴近安全边距 [8,1272]×[8,712] 仅 WARN。
  • python scripts/verify_bounds.py pptx 课件.pptx:用 python-pptx 逐 shape 量 left/top/width/height(EMU→inch),统计并列出越界形状;全幅背景层 / 面积<8% 的小装饰出血(如秋叶)自动排除,只把真实内容越界算作失败(越界数=0 才算过)。
  • 说明:headless 下 --window-size 不能精确控制布局视口比例,故多窗口比改为页内覆写 innerWidth/innerHeight 模拟,比依赖 --window-size 更确定、可复现。
  • python-pptx:PPTX → HTML 导入依赖(from pptx import Presentation;pip install python-pptx,managed venv 安装,不污染系统)。
  • pptxgenjs:HTML → PPTX 导出依赖(npm install pptxgenjs;用 Node 把 &lt;section class=&quot;slide&quot;&gt; 转真文本框 + 备注)。

常见问题

5 问
答案由本站依据条目字段整理
图文课件快速生成工具怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_fa6d10d9/ppt-image-text-to-courseware。安装方式为未标注。装完刷新技能列表或重开客户端。

图文课件快速生成工具支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

图文课件快速生成工具权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

图文课件快速生成工具收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

图文课件快速生成工具用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。