Ray PPT Refine — PPT 排版美化器(验收 + 改造)
> 定位:对已有 PPTX 做排版美化——检测排版问题、批量修复、一键换肤。只动排版,不动内容。与 ray-ppt-generator 正交互补(详见文末「与 ray-ppt-generator 的关系」表)。
四条铁律(先于一切流程)
- 只动排版,不动内容结构。能改的:字体、字号、颜色、配色、对齐、间距、缩进、元素位置、版式布局。不能改的:页数、标题文字、观点、正文内容、逻辑顺序——那是内容,归作者/generator 管。
- 失同步必提示,不另造演讲稿。若美化必须改动结构(拆页/合并页/改标题),先停下警告:"这会破坏演讲稿/备注的逐页同步",用户确认后才动;演讲稿由 generator 单源产出,本 skill 不生成演讲稿。
- 视觉 QA 驱动,不信代码信图片。代码证明"结构存在",不证明"版式舒服"——先转图片逐页看诊断,修复后再转图片复验,至少一轮 fix-and-verify。
- 主要文字必须可编辑(v2.1.0 新增)。美化后交付的 PPTX 必须保持:主标题/副标题/正文/关键数字/图表标签/页脚说明都在 PPT 原生文本框里,可被用户直接编辑;不得把文本转图片、不得把整页合成为一张图、不得为了"视觉效果"牺牲可编辑性。装饰性图形(logo、复杂插画、照片背景)可以是图片,但信息层必须是文本。判定红线:
pictures=0不是目标,但text_as_picture > 0就是失败。
常见崩坏模式(每次 refine 前必读,先于 5 步流程)
> 告诉 AI 要做什么效果一般,告诉它前人最容易在哪里塌效果更好。以下三种反模式均在真实执行中复现过,每次必须主动警惕。
反模式 1:口头宣布"美化完成"(最常见)
错误做法:
> 「4 页样张已完成美化,配色统一、字体一致,可以批量化了」(没跑任何脚本,没转任何图)
问题所在:判断"美化完成"的依据是 AI 自己的观感,不是程序输出、也不是 VL 核验。无论理由多充分,这句话都是 AI 在给自己写完成证书。
正确做法:
1. 执行 python scripts/refine_gate_check.py <refine后pptx路径> <诊断json>
2. 读取 <工作目录>/refine_gate_result.json
3. 只有 "passed": true 时才能进入批量修复 / 交付
4. 如果 "passed": false,按 user_code_errors[] 修复后重跑
> 视觉核验先试原生 Read:导出的 PNG 先直接 Read 一张——2026-09 起主流模型普遍原生多模态(deepseek-flash-V4.1、glm-flash-5.3 等),能看就直接看(更快、更省、细节不丢)。只有 Read 报读不了图时,才走 ray-ppt-ocr-eyes 降级链路(OCR+VL 逐页描述),见 references/refine-toolkit.md 第 2 节末尾——链路存在 ≠ 可以跳过,"模型看不了图"不是跳过视觉 QA 的理由。
反模式 2:跳过样张直接批量改 100 页
错误做法:
> 拿到 95 页 PPT,直接对每个页面跑统一字号缩放 + 统一字体替换,跑完才发现页脚被放大 / 卡片页被撑爆 / 表格列宽重排。
问题所在:每条规则都有边界(页脚白名单、卡片页排除、表格只换字体),这些边界要在样张上验证,不能在全量上裸跑。
正确做法:
1. 先选 3-5 页代表性样张(封面/章节页/典型内容页/表格页/卡片页各一),跑完整 refine 流水线
2. 对样张转图 VL 核验 + 跑 refine_gate_check.py,全部通过才进入批量
3. 批量时分页类型排除不适用规则(见「四条铁律」第 4 条 + 常见坑表)
反模式 3:默认"既然是美化就该全换",不先问体系
错误做法:
> 用户说"美化一下",直接做 2 轮样张(纸张手绘风→照片灰度化),用户看完才说"化工蓝体系更清爽,保留现有体系只补图"。
问题所在:「美化」是个有歧义的词——可能是「换配色体系」「换版式体系」「保留体系补手法(线语言/插图/留白)」三种之一。AI 默认第一种,用户往往想要后两种,导致 N 轮返工。
正确做法:
1. Step 3 诊断确认前必问:「换体系 or 保留现有体系补手法?」
2. 换体系 → 走「一键换肤」(6 套通用 + 化工安全配色)
3. 保留体系补手法 → 走 design-languages/INDEX.md 三因子匹配(差距 0.5 + 内容 0.3 + 偏好 0.2)从 8 类设计语言里选补充手法
4. 用户明确说"看着办"再走推荐路径,并明示推荐理由给用户否决权
何时用 / 何时不用
| 该用 | 不该用 |
|---|---|
| 有一份 PPTX,排版粗糙要美化 | 从零生成 PPT(用 ray-ppt-generator) |
| 统一字体/配色/风格(换肤) | 改内容、改文字、加页删页(内容问题) |
| 修复文字溢出/元素重叠/对齐 | PPT 内容本身要重写(回 generator 或手动) |
| 把默认蓝/AI 痕迹改成专业版式 | 需要联网检索补内容(那是 generator 的活) |
工作流程(5 步)
备份 → 视觉QA检测 → 诊断清单(用户确认)→ 批量修复 → 复验交付
Step 0:备份(强制)
改任何已有 PPTX 前,先复制备份:<原名>_backup.pptx。Win32COM 修改不可逆,备份是后悔药。
Step 1:读取解析 + 模式选择(沿用模板 vs 重新设计)
用 python-pptx 打开,遍历 slides/shapes/text_frames,摸清结构:页数、每页元素、字体分布、颜色分布。代码见 references/refine-toolkit.md 第 1 节。
量化诊断阈值(v2.1.0,2026-08-20 新增)——Step 3 诊断确认时按阈值自动判定,不再依赖描述性语言:
| 检查项 | 阈值(失败即触发) | 说明 |
|---|---|---|
| 字体不统一 | 字体 Top1 占比 <70% | 主字体不是 Microsoft YaHei → 需批量统一 |
| 配色混乱 | 主色在可见 shape 填充中占比 <40% | 无主导色;含默认 Office 蓝 #0000FF → 建议换肤 |
| 字号过小 | 9-11pt 字号在正文 run 中占比 >30% | 小字太多 → 需分档缩放(映射表见 refine-matrix.yaml) |
| 字号过杂 | 字号种类 >6 种(排除页脚) | 层级过多 → 建议分档收敛到 4-5 级 |
| 行距异常 | 段落 line_spacing 均值 <1.2 或 >2.5 | 行距太紧/太松 → 批量调 spacing |
# 量化诊断示例(Step 3 确认前跑)
fonts = Counter() # 所有 run 的字体
font_colors = Counter() # 所有可见 shape 的填充色
body_sizes = Counter() # 正文字号(排除页脚白名单)
for slide in prs.slides:
for shape in slide.shapes:
# ... 统计逻辑
top1_font_ratio = fonts.most_common(1)[0][1] / sum(fonts.values()) if fonts else 0
if top1_font_ratio < 0.70:
diagnostics["font_consistency"] = {"status": "fail", "top1_ratio": top1_font_ratio}
阈值细节见 references/refine-matrix.yaml。
模式选择(必做,美化的第一个决策)——问用户:
| 模式 | 做什么 | 适用 |
|---|---|---|
| 沿用模板 | 只优化内容排版——修溢出、统一字体/字号、对齐、图表配色对齐模板色系;不动母版、页眉页脚、背景、Logo、主题色等全局元素 | 已有品牌模板,只需优化内容 |
| 重新设计 | 含模板在内的整体视觉重塑(走下方"一键换肤") | 无模板 / 模板太丑,要整体升级 |
> 拿不准时默认"沿用模板"——保守改造,不动全局元素。用户明确要换风格才走"重新设计"。
设计语言匹配(v2.0 新增,选"重新设计"时必做)——读 references/design-languages/INDEX.md,按三因子加权(差距 0.5 + 内容 0.3 + 偏好 0.2)推荐 2-3 套设计语言让用户选:
1. 提取目标 deck 版式特征(标题栏样式/列表页占比/卡片存在性/章节页样式/插图风格)
2. 与 design-languages/ 各档案的「特征指纹」比对 → 差距越大改造价值越高
3. 内容类型匹配(培训课件→B卡片徽章/A手绘线;技术汇报→C大数字/D深色科技;公文→E政务;事故→A时间线)
4. 用户偏好修正("化工蓝体系更清爽"→偏好保留体系补手法;历史选过 +10 分)
5. AskUserQuestion 推荐 2-3 套让用户选(铁律:用户说"美化"≠要换体系,先问)
选定后:读该语言 profile.md(特征/改造路径)+ 看 layouts/*.png 样板 + 用 palette.json 配色 token + 复用 assets/ 素材。
Step 2:视觉 QA 检测(核心)
用 export_slides_to_images() 把每页导出 PNG,逐页看——不要只信解析数据。同时跑排版扫描器自动初筛。产出"问题清单"。检测维度见下「诊断模式库」。
Step 3:诊断清单 → 用户确认改造方案
把检测到的问题整理成清单,按优先级排列,给用户确认改造范围再动手:
发现 N 处排版问题:
🔴 严重:3 页文字溢出(P3/P7/P12)、全 deck 字体不统一(宋体混入)
🟡 建议:配色默认蓝无主题、5 页元素未对齐
🟢 可选:标题层级可再拉开
改造方案:①统一微软雅黑 ②应用[商务深蓝]配色 ③修复溢出页 ... 确认?
杠杆收敛(v2.2.0 新增,外部对比吸收):诊断清单可能列出 10+ 项,但汇报只挑 3-5 个最大改造杠杆(对观感提升贡献最大的项),其余归入"次要项(可后补)"一句话带过。原因:清单过长会分散用户注意力、拖延确认;多数时候 3-5 个杠杆改完 deck 已质变,次要项用户会主动要求补。判断口诀:"改完这 3-5 项,用户会明显觉得'好多了'吗?" 不会 → 杠杆没选对。
Step 4:代表性页面预览 → 批量修复
先做样张再批量(降低返工):不一次性改全部——先改 3-5 页不同类型的代表页(文字信息页 / 数据图表页 / 结论汇总页),转图给用户预览,确认风格对味后,再用 Win32COM 批量执行剩余页(保留渐变/阴影等效果,python-pptx 重排会丢效果)。修复方法见 references/refine-toolkit.md 第 3-5 节。
Step 5:复验交付(⭐ 机读化门禁,v2.1.0)
> 核心原则:门禁必须机读化(学 Mck gate_check),AI 不得口头宣布"QA 通过"。
- 先跑门禁脚本(必须,不得跳过):
python ~/.workbuddy/skills/ray-ppt-refine/scripts/refine_gate_check.py \
<refine后pptx路径> <诊断清单.json> --outdir <工作目录>
- 读取
<工作目录>/refine_gate_result.json:
-"passed": true→ 进入转图复验
-"passed": false→ 修复user_code_errors[]列出的问题,重跑门禁 - 转图 VL 核验(门禁覆盖不到的视觉层面:色感/留白感/设计感)
- 重跑 Step 1 的export_slides_to_images()导出受影响页,逐页复验——一个修复常引入新问题
- 重点看:样张一致性、新字体渲染效果、配图协调性、档位/卡片/警示条风格统一 - 门禁 + VL 全绿才交付;回 Step 4 再修一轮(最多 2 轮,2 轮仍有问题说明要拆方案 B 重写脚本)
排版问题诊断模式库
| 问题模式 | 检测方法 | 修复方法 |
|---|---|---|
| 文字溢出 | 文本框文字多/未 word_wrap;图片中文字顶到边框 | 启用 word_wrap、缩字号、框加大、或拆栏 |
| 字体不统一 | 扫描 run.font.name,统计非微软雅黑(宋体/Calibri 混入) | Win32COM 批量统一 Microsoft YaHei |
| 配色混乱 | 颜色种类过多 / 默认蓝 / 无主色 | 一键换肤:应用配色方案库(主色 60-70%) |
| 层级不清 | 标题正文同字号 / 无灰阶 | 拉开字号对比(标题大、正文小),用灰阶分主次 |
| 对齐/间距 | 元素左边缘不齐 / 间距忽大忽小 | 统一左对齐、间距 ≥0.3"、边距 ≥0.5" |
| 元素重叠 | 图片中文本框/形状碰撞 | 移位、调层级、缩尺寸 |
| AI 痕迹 | 标题下装饰线 / 全 deck 重复同一版式 / 纯文字页 | 删装饰线、变化版式、加视觉元素 |
| 图片问题 | 越界 / 比例失调 / 与页脚碰撞 | 等比缩放、归位、避开页脚区 |
| 图标素材来源(v2.5 新增) | 需要"小图标/徽章"却不知道该去哪拿:iconfont 主力格式是 SVG,python-pptx 原生不支持(实测 add_picture 对 SVG 抛错),venv 无 cairosvg/svglib | ①单色简单语义图标(盾牌/警报/齿轮)→ iconfont 下 PNG(透明底)直接做图标池,或拆 SVG path 用 FREEFORM 重绘(保矢量可编辑);②多色复杂插画 → 走 ImageGen/图库,不从 iconfont 硬取;③图标字体(iconfont 前端玩法)python-pptx 无字形支持,不用。完整能力边界见 generator code-templates 2.25 |
| 图文不协调 | 图片与内容无关(如化工安全页配沙滩风景)/ 图上有 AI 乱码文字 / 图风格与全 deck 不统一(卡通+写实混搭)/ 图遮正文或压字对比度不足 | ①内容无关→提示用户换图(给建议,不自行换——换图是内容决策,归 generator);②AI 乱码字→裁掉文字区或建议重生成(无文字版);③风格混搭→统一为同一风格;④压字→加半透明蒙版或移位 |
| 图表混乱 | 图表带网格线 / 系列颜色杂 / 数据标签挤 | 去网格线、统一配色、只突出关键数据系列 |
| 重点淹没 | 核心信息和普通信息一个样 | 识别关键信息,用加粗/放大/强调色突出,引导注意力 |
| 线性元素缺失(v1.2 新增) | 统计细长形状/箭头/横线数量:时间线/流程/事件链页无线元素(轴线/连接线/分隔线)→ 视觉"块状呆板" | 补"线"语言:细长矩形(宽>>高)做轴线/分隔线、箭头连接流程节点、虚线引导阅读路径。参考高手版手法:447 个细长 freeform(高均 0.3")构建线性节奏 |
| 版式单调(v2.3 新增) | 连续 3+ 页都是"标题+列表块";内容类型与版式不匹配(时限内容用列表、分级内容用表格) | 按内容类型换版式(6 个实战验证手法,源码在 generator code-templates 2.16-2.21):硬时限→横向时间轴(时限徽章+轴线+说明卡);目录/职责/要点→卡片矩阵(左色条+数字圆点);DO/DON'T→红绿灯对比(左绿右红+中央信号灯);梯度考核→热力图表格(整行绿→红底色);分级上报→双通道地铁图(每通道一条线+站点);级别划分→阶梯图(台阶逐级升高)。这是"美化改结构"的最大杠杆 |
| 图形隐喻半成品(v2.3 新增) | 页面声称"环形流程/循环"但节点间无连线箭头(视觉=散点);旋转椭圆拼花/拼人形等复杂隐喻造型生硬 | 二选一:①补全连接语言(弧形箭头/循环连线)让隐喻成立;②退回朴素布局(条带/步骤条)——隐喻做一半不如不做。复杂有机造型(花瓣/五角)不推荐:python-pptx 旋转椭圆拼贴效果生硬 |
| 配色微调无感(v2.3 新增) | 换肤用了邻近色(如 #005293→#0D3B66),用户第一眼"看不出变化" | 换配色要么拉开色相/明度差距(蓝→绿/深蓝→暖灰),要么先问清意图:用户要"变个样子"就拉大差距,要"更沉稳"就保留体系只补手法(铁律 3 的量化版) |
| 重排不减密(v2.3 新增) | 美化轮把原页文字原样塞进新图形(卡片/时间轴/阶梯),信息密度不降,用户评"换汤不换药/效果一般" | 重排必须伴随减法:每页先定"主角"(3 秒内先看到的一个图形/数字/大字),描述文字砍 30%,次要信息下沉为小字或页脚。高手版式的本质是"每页一个主角+大量留白",不是"新形状装旧内容" |
| 网格失准(v2.4 新增) | 元素间"说不上来的乱":对齐看起来差 1-2px、间距忽宽忽窄、徽章与文字框错位——dump 坐标发现离散(如 315 个不同坐标值,仅 4% 落在常见倍数上) | 对齐到 20pt 设计网格(0.278" 基准格,页边距 40pt=2 格、卡片间隙 8-10pt=半格):改版式/新增元素时坐标一律取网格倍数;字号同步取整(无 10.8/12.5 小数档)。验证:重读文件统计坐标网格命中率,目标 ≥60%(手法已回 generator 2.22 gx(n) 函数) |
| 插图风格未统一(v1.2 增强) | 有图但风格混搭 / 彩色图与全 deck 冷色系不协调 | 统一灰度/滤镜是排版范畴修复(PIL 灰度化即可,不动图内容):全 deck 图片统一灰度或同一色调后,视觉立刻统一。高手版 51 张图全部灰度处理(含封面/分区页全页背景图 + 要素页固定位置插图) |
> 判断口诀:先严重后建议——溢出/字体/配色是硬伤,对齐/层级/痕迹是提升,线/图是质感。
设计哲学:AI slop 反模式警告(v1.4 新增,吸收 GH 27k 星 frontend-slides)
> 模型默认会收敛到平庸的通配设计("AI slop"审美)——美化前先认通病,再给对策:
| 通病(默认会犯) | 对策(要主动做) |
|---|---|
| 均匀配色、无主色 dominance | 主色占 60-70% 视觉权重,1-2 辅色 + 1 强调色,绝不平均分配 |
| 居中排版的"填充感" | 正文左对齐(只有标题/封面居中);不整页纯文字 |
| 默认蓝 / 无主题色 | 从主题文化/行业汲取配色(化工→安全蓝/纸张手绘风),不用默认值 |
| 为装饰而装饰(角部图案/无意义图形) | 每个视觉元素服务信息层级,删掉会让页变差的才留 |
| 同质化重复版式 | 全 deck 不重复同一版式;每页至少一个差异化视觉锚点 |
自检:"这页删掉任何一个元素会变差吗?" 不会 → 删掉(减优于加)。
视觉语言参考(v2.0 起指向设计语言资产库)
> 完整资产库:references/design-languages/INDEX.md(8 类分类索引 + 自动匹配规则)+ 每类 profile.md(特征指纹/配色/改造路径)+ layouts/ 样板图 + palette.json 配色 token。
> 下方表格是已归档语言的快速速查;完整档案看对应文件夹。
| 编码 | 设计语言 | 一句话 | 档案路径 | 状态 |
|---|---|---|---|---|
| A | 手绘线语言 | 用"线"建立视觉节奏(447 freeform)+ 暖纸色极简 + 固定位置灰度插图 | design-languages/A-handdrawn-line/ |
✅ 已归档 |
| B | 卡片+徽章 | 浅色卡片矩阵 + 1:1 方形徽章 + 功能色条 + 大数字 + 底部通栏提示 | D:/RayClaw/skill-archives/ray-ppt-refine-B-card-badge-20260828/(62MB assets 外置归档,2026-08-28) |
📦 已外置 |
| C | 大数字信息图 | 120pt 半透明数字背景 + 数据突出 + 章节编号 | design-languages/C-big-number/ |
⬜ 空档案 |
| D | 深色科技风 | 深空蓝/黑底 + 霓虹强调 + 科技感 | design-languages/D-dark-tech/ |
⬜ 空档案 |
| E | 政务公文风 | 红头文件 + 仿宋 + 严谨庄重 | design-languages/E-gov-doc/ |
⬜ 空档案 |
| F | 培训卡通插画 | 扁平人物插画 + 鲜艳配色 + 亲和 | design-languages/F-cartoon/ |
⬜ 空档案 |
| G | 极简杂志风 | 大留白 + 衬线标题 + 杂志排版 | design-languages/G-minimal-magazine/ |
⬜ 空档案 |
| H | 数据大屏风 | 深底高亮 + 图表密集 + 驾驶舱 | design-languages/H-data-dashboard/ |
⬜ 空档案 |
A 手绘线语言速查(RBPS 意识培训 90页)
| 手法 | 高手版实现 | 适用场景 | python-pptx 可实现性 |
|---|---|---|---|
| 手绘线语言 | 447 个细长 FREEFORM(高均 0.3"):时间线轴线/连接线/分隔线/箭头 | 时间线、流程、事件链、目录页——用"线"建立视觉节奏,打破纯块状 | 细长矩形 + 箭头形状 + 虚线格式(line.dash_style) |
| 固定位置插图 | 要素/章节页右侧统一位置 (6.2,1.1) 放 3.3×3.8 灰度示意图,34 张位置完全一致 | 多页同构内容(要素页/条款页)——右侧统一插图形成"卡片感" | 图片 + 统一坐标常量,refine 只负责灰度统一与归位 |
| 分区页全页背景图 | 章节过渡页用全页灰度工业场景图 + 大字标题,比纯色过渡页有场景感 | 封面/章节过渡页 | 全页图片 + 压暗层(PIL 调暗或半透明矩形) |
| 暖纸色极简 | #F4F2EE 米白底 + #9D5A37 棕褐强调 + #252525 近黑正文("图纸感") | 工程师/技术受众的培训课件 | 配色方案库「纸张手绘风」(见 refine-toolkit.md 第 4 节) |
B 卡片+徽章速查(General EHS Onboarding 23页)
| 手法 | 高手版实现 | 适用场景 | python-pptx 可实现性 |
|---|---|---|---|
| 卡片化布局 | 浅色圆角卡片 + 功能色左条 + 标题 + 描述,网格自适应(1×3/2×2/2×3) | 3-6 条短描述列表页 | cards() 布局函数(common_en.py 已验证);只适合短描述(英文≤130 字符) |
| 1:1 方形徽章 | 每卡片配方形徽章(图标/照片缩略),"徽章+标题+正文"卡片语言 | 卡片页 | 0.55" 徽章 + 白底圆角衬垫 0.61";⚠️ 与右侧竖图同池必冲突,需替换 |
| 功能分色 | 绿=健康/权益、蓝=法规/职责、红=警示、橙=注意 | 全 deck | 功能色常量(PRIMARY #005293/ORANGE #E67E22/RED #C0392B/GREEN #1E8E4E) |
| 大数字关键数据 | 核心指标(80分/30年/6小时)36-40pt 单独呈现 | 数据页 | 独立文本框放大字号 |
| 底部通栏提示 | 关键页底部全宽提示条(白字加粗居中) | 关键警示页 | banner() 双位置(bottom y=6.45 / top y=1.18,内容满页用 top) |
| 章节预告卡片 | 章节页底部居中 3 张深蓝卡片+功能色顶条 | 章节页 | section() previews 参数 |
> 完整档案(改造路径/素材/经验引用):已外置归档 D:/RayClaw/skill-archives/ray-ppt-refine-B-card-badge-20260828/(含 profile.md),需要时按路径取用
配图落地三坑(v1.3 新增,实战验证 2026-08-17)
> 给已有 deck 配图(灰度照片/插图)时的高频坑与解法:
| 坑 | 现象 | 解法 |
|---|---|---|
| 横向图进竖框留白大 | 1200×800 照片放进 3.3×4.4 竖框,按比例缩放后只占 3.3×2.2,上下空 2"+,图显小(用户反馈"图小空白大") | 装饰插图用 cover 不用 contain:居中裁成与框同比例再撑满白框(PIL crop),零留白。代码见 refine-toolkit.md「配图工具」 |
| 白框与图片错位 | 白框按"图片缩放尺寸"定位、图片按"传入框"居中——两个基准不一致 → 图片偏下、白框漏底(用户反馈"图片靠下漏白框") | 单一基准:先算图片实际位置(框内居中),白框围绕图片实际位置外扩(四边各 0.05") |
| 插图与相邻元素重叠 | 插图底边 6.65 撞底部说明条 6.35(重叠 0.3") | 配图后必跑专项检查:每张插图底边 vs 底部说明条/卡片标题位置,插图高限按最矮相邻元素预留 0.1"+ |
配图决策链:先扫描空白(右半区→网格→精确小区域逐层收敛)→ 有空白直接配 → 无空白不要强行塞图(会遮内容)→ 改用布局让位(公共函数收窄文字宽,批量让出侧边栏)→ 让位后仍验证插图与相邻元素。
图片来源决策(v1.5 新增,2026-08-18 三图库实测)
> 配图素材从哪来?按「通用主题 vs 专业主题」分流,下载图必须 VL 核验。
| 来源 | 适用 | 实测结论(2026-08-18) | 注意 |
|---|---|---|---|
| ImageGen 生成 | 专业化工安全主题(受限空间/动火/中毒救援/危化品储存) | 语义 100% 可控、风格统一、竖版 3:4 直接适配 | 每张带"AI生成"水印 → PIL 裁右下角 8%×6%;生成后 VL 核验内容防跑偏 |
| Pexels 下载 | 通用主题(灭火器/安全帽/脚手架/警示牌) | ✅ 可访问;搜 "confined space entry" 有可用免费图(如 7417585 灰度警示牌),但专业好图在 iStock 付费赞助位,免费结果混隧道/星空等无关图 | 必须英文关键词;逐张 VL 核验真实内容(9 张池图 2 张跑偏:可口可乐产线/戴头饰女性) |
| Pixabay 下载 | 通用主题 | ✅ 可访问;中文搜索歧义严重——"受限空间"匹配成"太空/宇宙",前 10 全跑偏 | 用英文关键词 "confined space" |
| Unsplash 下载 | 通用主题 | ⚠️ 直连超时,国内访问不稳定 | 不优先 |
决策规则:
1. 通用主题(PPE/消防/警示/高处)→ 优先下载图(免费),逐张 VL 核验再入映射
2. 专业主题(特殊作业/中毒救援/危化品工艺)→ ImageGen 生成(语义可控)
3. 无论哪条路,绝不按文件标题猜主题(P9 错配教训:按 "construction worker" 想当然标高处,实为货仓工人)
4. 风格统一优先:下载照片是彩色实拍,与灰度扁平插画混搭会破坏统一 → 混用时统一灰度化(PIL 灰度)
一键换肤(配色方案库)
> 换肤前先确认意图(v1.4.1 新增,2026-08-17 实战教训):用户说"美化/换肤"不等于要换配色体系——可能只想保留现有体系补手法(线语言/插图/留白)。动手做样张前先问一句:"换体系 or 保留现有体系只补手法?"(本次实战:连续做了 2 轮样张——纸张手绘风→照片灰度化,用户才说"化工蓝体系更清爽",若先问可省 2 轮样张)
检测到"配色混乱/默认蓝/无主题"时,推荐换肤。内置 6 套通用 + 化工安全配色(RGB 见 references/refine-toolkit.md 第 4 节)。按场景推荐 2-3 套让用户选:
| 场景 | 推荐配色 |
|---|---|
| 商务汇报/年终总结 | 商务深蓝 / 炭灰极简 |
| 技术分享/产品发布 | 科技深空 / 商务深蓝 |
| 培训课件/教学 | 暖陶简约 / 青绿信任 |
| 化工安全/危化品 | 化工安全配色(SAFE_BLUE 系列) |
| 工程师/技术受众培训 | 纸张手绘风(#F4F2EE 米白 / #9D5A37 棕褐 / #252525 近黑,图纸感) |
换肤 = 批量替换主色/辅色/强调色 + 标题栏/页脚配色,不动内容文字。
常见坑与排查
| 问题 | 原因 | 解决 |
|---|---|---|
| Win32COM 改完效果丢失 | python-pptx 重写会丢渐变/阴影 | 用 Win32COM 修改,不用 python-pptx 重排 |
| 颜色没改成 | .RGB 是 BGR 顺序 |
用 rgb_to_bgr() 转换 |
| COM 索引报错 | COM 索引从 1 开始,非 0 | 遍历从 1 起;True = -1 |
| 文件被占用无法写 | 直接改被打开的文件 | 先关 PowerPoint;先写临时文件再替换 |
'method' object is not iterable(COM 遍历文本) |
TextRange.Paragraphs / Paragraphs(pi).Runs 是方法不是属性 |
必须带括号调用:tr.Paragraphs()、Paragraphs(pi).Runs(ri),索引从 1 开始(0 越界) |
| bash 内联 Python 改 PPT 路径失效 | bash 吞掉反斜杠:D:\Work 变 D:/Work |
COM 工作流一律用独立 .py 文件(Write 工具写盘再执行),不用 python -c 内联 |
os.remove 报 SAFE_DELETE_FAIL_CLOSED |
沙盒回收站不可用,删除 fail-closed 拒绝 | 不删旧文件,直接 SaveAs 覆盖目标路径 |
| 批量改字号把页脚/页眉改坏 | 页脚页眉也是文本 shape,被统一缩放规则命中 | 先按文本内容("Rianlon"/"Page"/页码)识别页脚页眉元素,白名单排除;页眉标签单独给较小增量 |
| 表格字号缩放变形 | 表格单元格用 tr.Paragraphs(pi).Runs(ri) 遍历,直接改 .Size 会触发列宽重排 |
表格只换字体不换字号;字号缩放仅对普通文本框生效 |
| 改完演讲稿对不上 | 动了页数/标题 | 违反铁律 2——应提前警告,已改则提示回 generator 重导 |
| 横向图进竖框留白大 | contain 缩放(按比例)在竖框上下留白 | 装饰插图用 cover(居中裁切撑满框),见「配图落地三坑」 |
| 白框与图错位 | 白框基准与图片居中基准不一致 | 白框围绕图片实际位置外扩(单一基准) |
| 插图撞底部条 | 插图底边 > 相邻元素顶部 | 插图高限按最矮相邻元素预留 0.1"+ |
| 批量注入参数错位(banner 插进函数参数列表 / icons 注入错页) | 跨行正则 .*?\) 在多行函数调用上不可靠,插入点定位错 |
用括号深度匹配定位完整调用块(p\d+ = 函数名\( 起,数括号找配对 )),再精确 Edit;注入后跑一致性核对脚本逐页比对 |
| 徽章与右侧竖图同页重复 | 图标池与 PAGE_ILLU 右侧图共用同一资产池 → 同页出现 0.55" 徽章 + 3.7×5.2" 大图同图 | 替换右侧竖图(约束:不在本页 icons + 不与前后页大图重复);QA 按"同页 sha1 重复"判定,跨页徽章复用放行 |
| banner 与内容重叠 | banner 默认 bottom 但内容区满 | 先量内容区底边 y,banner pos='bottom'(y=6.45 高 0.4)或 pos='top'(y=1.18 高 0.3)二选一,间隙 ≥0.02" |
卡片图标徽章 + 通栏警示条(v1.5.4 新增,Plan C 实战)
图标徽章(E7):给卡片加 1:1 方形照片徽章,形成"徽章+标题+描述"卡片语言。
- 零外部资源:用现有灰度写实方形图(1024×1024)直接缩略即可;白底圆角衬垫 0.61" + 照片 0.55"(衬垫外扩 0.03")
- 布局避让:有徽章时标题右移(x=徽章右+0.15")、描述下移(y+0.72");无图标时回退原位(标题 x+0.35"、描述 y+0.62")
- 注入方式:cards() 加 icons=[...] 参数(路径列表与 items 等长);映射表单独存 JSON(页→每卡图标 key),脚本读取注入
- 同池冲突红线:徽章图标池与右侧竖图(PAGE_ILLU)共用资产时,同页必出现"大图+同图小徽章"——右侧竖图自动替换(不在本页 icons + 不与前后页大图重复 + 语义分组优先)
通栏警示条(E8):关键警示页加全宽色条(白字加粗居中),比普通文字醒目。
- banner() 双位置:pos='bottom'(y=6.45 高 0.4)用于底部有空间页;pos='top'(y=1.18 高 0.3)用于内容满页(先量内容区底边,防重叠)
- 配色遵循功能分色:RED=警示、ORANGE=注意
反例黑名单(❌ 不要做)
❌ 改内容——页数/标题/观点/正文文字(那是内容,归作者 / generator)
❌ 用 python-pptx 重写排版——会丢渐变/阴影效果,改用 Win32COM
❌ 不备份就改——Win32COM 不可逆,先 _backup.pptx
❌ 只信扫描器不看图——数据给线索、图片给真相,修复后必须转图复验
❌ 改结构不警告——动了页数/标题却不提示演讲稿失同步
与 ray-ppt-generator 的关系
| ray-ppt-generator | ray-ppt-refine(本 skill) | |
|---|---|---|
| 定位 | 内容引擎:从无到有 | 排版美化器:从有到好 |
| 输入 | 材料 / 主题关键词 | 任意已有 PPTX |
| 输出 | PPTX 初稿 + 演讲稿 MD | 美化后的 PPTX |
| 演讲稿 | 单源产出(权威源) | 不产出,失同步仅提示 |
独立演进:本 skill 聚焦"最强版式美化器"(检测 / 换肤 / 修复);generator 聚焦"最强内容生成器"。经验由 ray-self-reflection 回流,高手由 ray-skill-evolve 学习。
实战经验
> 经验已按主题分类到 references/experiences/(overflow / layout-pitfalls / image-assets / template-skin),含 Problem/Root Cause/Fix/Rule 四字段结构化格式。
> 本区只保留最近 3 条(滚动窗口)+ 待回流的 pending 条目索引。完整历史见 references/experiences/README.md。
最近 3 条(滚动窗口)
- 2026-09-04|[LRN-20260904-002]|场景:对照拆解用户自做美化版(豆包 AI 生成 deck vs python-pptx 原版,21 页逐 shape 量化对比)|经验:①"看不见的结构"才是观感差距主因——20pt 设计网格命中率 73% vs 4%(模板已回 generator 2.22)、序列同色相明度递进 vs 五色相乱跳(generator 2.23)、文字覆盖层解耦(generator 2.24);②外部 AI 生成 deck 指纹识别:内嵌"XX AI 生成"角标 PNG(zipfile 翻 media/ 一眼定位)、Noto Sans SC 字体、全 AUTO_SHAPE 文字覆盖层结构(底层 roundRect 底色+上层透明 rect 文字)、Tailwind Slate 灰阶(#334155/#94A3B8/#E2E8F0)——对比分析第一步先验指纹,判断对手是"人手改"还是"AI 工具生成";③对比分析方法论:dump 两版全部 shape(类型/坐标/字体/字号/颜色/文本)→ 全局统计(字体占比/字号阶梯/色板 census/网格命中率)→ 代表页逐 shape 对照;量化数据比"感觉更整齐"有说服力;④内容层确认:好版本真做减法(P13 字数 -30%、P17 -52%)+ 正向补强("上报不追责"激励、"如有疑问联系安全科"出口)——印证诊断库"重排不减密"行|死路:肉眼对比只说出"换了字体/换了颜色"表层差异,漏掉网格系统这类结构性差异|来源:事故制度 deck 用户美化版拆解|计数:1|状态:resolved
- 2026-09-04|[LRN-20260904-001]|场景:PPT 高手建议落地重做(事故制度 deck 21 页 v2)|经验:①6 个版式手法验证有效(时限时间轴/卡片矩阵/红绿灯/热力图表格/地铁图/阶梯),已升格为 generator code-templates 2.16-2.21,refine 侧入诊断库"版式单调"行的修复指向;②三条反面教训入诊断库:图形隐喻半成品(环形无箭头=散点)/ 配色邻近色切换用户无感(#005293→#0D3B66 第一眼无变化)/ 重排不减密(新形状装旧内容="换汤不换药",用户"效果一般"的根因);③QA 链路实战确认:越界+重叠+文本流三脚本全绿 → COM 导 PNG 逐页目检,6 轮 fix-and-verify 收敛;踩坑:
Inches()收到裸 float 产生天文坐标(Emu 减法必须先转 in 再算)、heredoc 批量 replace 吞行(补丁后 grep 复核递增行)|死路:倒置金字塔用旋转 180° 三角形+叠加文字(文字溢出斜边落白底);改用宽度递减圆角条(文字框内永安全)|来源:事故管理制度宣贯 PPT v2 美化轮|计数:1|状态:resolved - 2026-08-27|[LRN-20260828-001]|场景:无多模态模型的视觉 QA 断头|根因:refine 全流程(铁律 3/反模式 1/Step 2/5)假设"导出 PNG 后模型能看图",DeepSeek 纯文本模型直接 Read PNG 报"不支持读图",视觉 QA 链路断头|Fix:toolkit 第 2 节补降级链路——COM 导 PNG(附 PowerShell 原生 COM 备选 + 首次调用无输出陷阱)→ ray-ppt-ocr-eyes(OCR+VL 双层,opencode-go)逐页核验;路径必须 Windows 格式(Git Bash /e/ 不认);左右分栏页 OCR 合并行是假象,布局判断以 VL 层为准。已在 generator v3.14.0 的 extend-deck.md 同步沉淀(23 页新增页逐页验证通过)|死路:只跑越界/重叠几何检测就交付(LRN-20260818-001 已证明几何检测会假通过)|来源:马来西亚 EHS 课件 47 页扩充|计数:1|状态:resolved(⚠️ 2026-09-12 补记:本条前提已变——原生多模态已成主流模型常态,Read PNG 通常直接可用;本条降级链路改为「读不了图时」启用,判定以实测为准)
- 2026-08-19|[LRN-20260819-008]|场景:95页英文 deck 套用公司中文模板|经验:模板套用 ≠ 硬套模板文件——提取 DNA 重绘。只读解析模板(clrScheme + shape 明细 + OCR)提取 DNA(品牌色/Logo/标语/版式语言),关键页重绘(封面/章节/结束),内容页只嵌品牌元素。QA 用"Logo 页数=82/96"验证注入正确|死路:直接以模板文件为基础修改(中文残留+结构丢失)|状态:pending
pending 条目索引(待回流主流程)
references/experiences/overflow.md:LRN-20260817-003(重叠检测行高估算)references/experiences/layout-pitfalls.md:LRN-20260817-002(自产 deck 改源)/ LRN-20260819-003(高手版六语言)/ LRN-20260819-007(资源自检)/ LRN-20260819-008(DNA 重绘)/ LRN-20260904-001(图形隐喻纪律+Emu 减法坑,已入诊断库可毕业)references/experiences/image-assets.md:LRN-20260818-001(行高估算器)/ LRN-20260818-002(图库规模)/ LRN-20260818-003(VL 判定)/ LRN-20260819-002(页面级 VL 核验)
完整 LRN 列表(含 Problem/Root Cause/Fix/Rule 结构化字段)见 references/experiences/*.md。
参考资料
references/refine-toolkit.md— PPTX 读取解析、排版扫描器、Win32COM 批量修复、配色方案库、转图片 QA(按需加载,复制即用)
维护记录(最近 3 条)
| 日期 | 变更 |
|---|---|
| 2026-09-12 | v2.5.1:视觉核验前置检查(原生读图优先)。铁律区「当前模型无多模态时」条目改为「先试原生 Read,只有读不了图才走降级链路」——2026-09 起主流模型普遍原生多模态(deepseek-flash-V4.1、glm-flash-5.3 等),原表述会诱导跳过原生 Read 直接调 OCR;历史条目 LRN-20260828-001 补记前提已变。 |
| 2026-09-04 | v2.5.0:图标素材能力边界(iconfont 可用性评估,探针实测)。诊断库新增「图标素材来源」行——python-pptx 实测 SVG 原生不支持(add_picture 抛 UnidentifiedImageError)、PNG 直接可用、venv 无 cairosvg/svglib、图标字体不支持。单色简单图标→PNG 池或 FREEFORM 重绘;多色复杂插画→ImageGen/图库。完整见 references/changelog.md。 |
| 2026-09-04 | v2.4.0:对照拆解用户自做美化版回流(豆包 AI 生成 deck,21 页逐 shape 量化对比)。①诊断库新增「网格失准」行(20pt 网格命中率 73% vs 4% 是观感差距主因,修复=坐标对齐 20pt 格+字号取整);②LRN-20260904-002(外部 AI deck 四指纹 + 对比必须 dump 量化);③内容层减法实证。完整见 references/changelog.md。 |
| 2026-09-02 | v2.2.0:进化轮(对比外部 PPT 美化领域 Top 候选,克制吸收 1 项)。Step 3 诊断清单新增「杠杆收敛」——汇报只挑 3-5 个最大改造杠杆,次要项一句话带过(防清单过长分散注意力)。 |
| 2026-08-28 | v2.1.1:实战回流(无多模态模型视觉 QA)。refine-toolkit 第 2 节补降级链路(COM 导 PNG → ray-ppt-ocr-eyes OCR+VL 逐页核验 + PowerShell 原生 COM 备选);反模式 1 补「链路存在 ≠ 可跳过」;新增 LRN-20260828-001。与 generator v3.14.0 extend-deck.md 互引。 |
| 2026-08-20 | v2.1.0:进化轮(对比 Mck/GordenPPTSkill/CyberPPT)。减法:LRN 经验按主题拆 references/experiences/*.md(overflow/layout-pitfalls/image-assets/template-skin,Problem/Root Cause/Fix/Rule 四字段);维护记录完整版卸 references/changelog.md。加法:①反模式区独立成节(先于 5 步流程);②铁律扩为 4 条(新增"主要文字必须可编辑"红线);③机读化 QA 门禁 scripts/refine_gate_check.py(passed 由代码判定,禁口头宣布);④能力边界矩阵 references/refine-matrix.yaml;⑤Step 3 诊断量化阈值(字体占比/主色占比/字号分布)。 |
| 2026-08-19 | v2.0.1:B 类布局模板沉淀收尾——layout_templates.py 补齐 33 张徽章图实现完全自包含(资源完整性自检:_asset() 引用↔文件逐一比对,见 LRN-20260819-007);B-card-badge/profile.md 新增「可复用代码模板」节(9 函数速查 + demo 验证);INDEX.md「使用方式」加代码模板入口;demo 样板图 D01-D04 归档 layouts/。 |
完整历史:references/changelog.md(v1.5.4 及更早版本) |