Install
openclaw skills install @cxdanger123-commits/ppt-polish给已有的 PPT 做「美化 + 体检」的批量精修:先全量检查版式毛病(元素越界、文字溢出、互相压盖、字体字号、页脚页码、文案矛盾),再把 PPT 渲染成图片做真实视觉复核,最后按页批量统一配色、修正文案。特别擅长去掉 AI 生成 PPT 的「AI 味」(颜色太多、同色族难区分、占位框刺眼),让 PPT 更好看、更专业、风格统一。适合:美化PPT、优化排版、统一风格、检查PPT问题、批量改配色。运行需要 Windows + WPS Office 或 Microsoft PowerPoint。搜索关键词:PPT美化、PPT优化、PPT体检、PPT精修、去AI味、PPT排版。
openclaw skills install @cxdanger123-commits/ppt-polish把「一份已经存在的 PPT」变成「排版合格、风格统一、看不出 AI 味」的成品。
.pptx 文件(人做的或 AI 生成的都行).pptx(默认另存新文件,不覆盖原件).pptx 需要体检 / 优化 / 统一风格 / 修硬伤 / 出视觉复核 / 去 AI 味context.py 看它长在什么元素上,再决定是收敛还是保留。pip install python-pptx(几何检查与批量修改用;渲染走 COM 不需要 LibreOffice)# 备份:改之前一定留后路
cp "原文件.pptx" "原文件_备份_$(date +%Y%m%d).pptx"
# 检查占用:目录里出现 ~$xxx.pptx 锁文件 = 编辑器正开着
ls "目标目录/" | grep '^~\$'
有锁文件 → 输出到新文件(如 xxx_优化版.pptx),不要覆盖原文件。
python scripts/audit.py "<pptx路径>"
输出:页面尺寸与页数、填充色分布、字体、字号分布、文字色、越界元素、溢出风险、页脚样本。 先读输出再决定改什么 —— 常见硬伤一眼可见:页脚分母跟实际页数不符、封面时长跟目录时长矛盾、某个模块自成一套配色。
python scripts/context.py "<pptx路径>" "8B5CF6,4F46E5,059669,EC4899"
列出每个嫌疑色用在什么元素上(页号 / 坐标 / 尺寸 / 相邻文本),据此判断它是:
| 判断 | 处理 |
|---|---|
| 模块标识色(目录编号块、章节页进度条、章节徽章) | 保留「每模块一色」机制,只换色相 |
| 卡片装饰色(无语义) | 收敛到规范色板 |
| 语义色(❌ 错误示范 / ✅ 解法 / 红线警示) | 保留语义,只统一到同一个色值 |
python scripts/render.py "<pptx路径>" "<输出目录>" [宽] [高]
自动探测 KWPP.Application(WPS)→ PowerPoint.Application,把每一页导出成 PNG。
不需要 LibreOffice / Office 全家桶。
然后用多模态读图能力看几张关键页(封面、目录、各章节页、内容页样本、结束页),建立视觉基线。
写规则 JSON(见下),然后:
python scripts/refine.py "<pptx路径>" rules.json
{
"fill": [
{"from": "8B5CF6", "to": "6366F1", "pages": [1, 7, 21, 33, 34, 35]},
{"from": "EF4444", "to": "DC2626"}
],
"font": [
{"from": "7C3AED", "to": "4338CA", "pages": [34, 35]},
{"from": "EC4899", "to": "2563EB"}
]
}
pages 省略 = 全局替换;pages 用 0-based 页索引数组。
按页号限定是刚需 —— 同一个颜色在不同模块里可能是不同用途。
python scripts/verify.py "<pptx路径>" palette.json # 色板合规 / 页脚连续 / 越界 / 溢出
python scripts/overlap.py "<pptx路径>" # 文本框互相压盖
python scripts/render.py "<pptx路径>" "<新输出目录>" # 再渲染,读图对比
| 坑 | 解法 |
|---|---|
from pptx.util import RGBColor 报 ImportError | 正确路径是 from pptx.dml.color import RGBColor |
改 run.text 后格式丢失 | 同 run 内替换会保留格式;跨 run 的文本把第一个 run 设为全文、其余清空 |
| 改长文本后文字横向撑出框 | word_wrap=False 的框不换行,改完要加宽 |
| 重新渲染时删除旧图被拦截 | 部分 Agent 环境带文件安全防护会拦 os.remove/rm,换输出目录而不是删旧的 |
WPS SaveAs 导 PNG 报「发生意外」 | 用 pres.Export(dir, "PNG", w, h),不要用 SaveAs |
当用户说"PPT AI 味太浓""颜色太多""风格不统一"时,走这套流程。
AI 生成 PPT 的典型痕迹:① 紫色系(6D28D9/8B5CF6)泛滥;② 每个模块一种色相形成彩虹效果;③ 黄/绿/红底色卡片到处都是;④ 占位框用醒目橙色虚线。统一方案:杀紫色 → teal 品牌 + 中性灰 + amber 警示,但保留设计意图色(封面渐变、目录导航色谱、深色高亮框)。
Phase 1 · 全局色映射:定义 COLOR_MAP(47→8),遍历所有 shape 的 a:srgbClr 元素替换 val 属性。详见 references/redesign-methodology.md 的 COLOR_MAP 完整定义。
Phase 2 · 还原设计意图色:Phase 1 会把不该统一的也统一了。还原三类:
is_dark_block_shape()(无文字+大块)判断,#0F172A 还原为 #1E3A8APhase 3 · 占位框统一:① 含"截图位/待补"文字 → slate-400;② 虚线边框 prstDash + amber 色 → slate-400;③ "截图待补"徽章文字 → 白色
Phase 3.7 · 占位药丸精准修复:先找所有有 prstDash 虚线 + 宽>4" 的占位框,在每个框右上角 (box_w-1, box_y+0.4) 范围内找小矩形(w<1, h<0.4),改 fill 为 slate-400。位置匹配法比尺寸+颜色匹配法更精准,不会误改编号/分类药丸。
| 坑 | 解法 |
|---|---|
| 全局色映射把封面渐变也改成纯黑 | Phase 2 从备份还原,封面是品牌门面不参与统一 |
| 深色高亮框变黑(#1E3A8A 被映射到 #0F172A) | Phase 2 用 is_dark_block_shape() 判断大块深色 shape 还原 |
| 按尺寸+颜色匹配改药丸 → 误改编号/分类药丸 | 改用位置匹配:先找占位框,再在框右上角找小矩形 |
sh.text 在 Picture 对象上抛 AttributeError | 先 if not sh.has_text_frame: continue 过滤 |
has_text_frame=False 时 sh.text 报错 | 拆两步:先判 has_text_frame,再判 text.strip() |
references/color-strategy.mdreferences/redesign-methodology.mdSKILL.md 本文件(流程 + 原则 + 坑)
scripts/audit.py 全量体检:几何/配色/字体/页脚/越界/溢出
scripts/context.py 嫌疑色的元素上下文采样(先问用途再处理)
scripts/render.py 渲染成 PNG(自动探测 WPS → PowerPoint)
scripts/refine.py 按 rules.json 批量替换填充色/字体色/文本
scripts/verify.py 修后复检:色板合规/页脚连续/越界/溢出
scripts/overlap.py 文本框互相压盖检测
references/color-strategy.md 配色收敛方法论
references/redesign-methodology.md 去 AI 味 4 阶段方法论 + COLOR_MAP