Install
openclaw skills install opc-ppt-design-workflow交互式PPT设计全流程管控,基于create-ppt技能,增加需求确认→风格预览→正式生成三阶段交互
openclaw skills install opc-ppt-design-workflow交互式PPT设计全流程管控,基于create-ppt技能,增加"需求确认→风格预览→正式生成"三阶段,确保交付即满意。
收到PPT制作需求后,必须向用户逐一确认以下5个维度。用户已明确给出的不再重复问,缺失的必须问:
| 维度 | 必问问题 | 示例 |
|---|---|---|
| 1.内容定位 | PPT主题是什么?核心传达1-3个要点?受众是谁? | "技术成果转化OPC案例全集,受众是培训学员" |
| 2.章节架构 | 几个章节?每章重点是什么?有无必须包含/排除的内容? | "9章,去掉曹操案例,加电促会" |
| 3.页面规模 | 预计多少页?有无特定页数限制? | "12-15页" |
| 4.数据精度 | 哪些数据必须精确呈现?哪些可以概括? | "879→120筛选数据必须精确" |
| 5.风格偏好 | 从8大风格中选择(可多选2-3种做预览) | "轻松科普风+科技动感二次元风" |
提问模板:
收到,做PPT前我需要确认几个点:
1. **内容定位**:[已知的填上,未知的问]
2. **章节架构**:[已知的填上,未知的问]
3. **页面规模**:[已知的填上,未知的问]
4. **数据精度**:[已知的填上,未知的问]
5. **风格偏好**:以下8种风格,选2-3种我做预览对比:
A. 严谨学术顶刊风 E. 日系蒸汽波迷幻风
B. 轻松科普风 F. 极简手绘插图风
C. 欧式轻奢商务风 G. 新中式混搭风
D. 科技动感二次元风 H. 美系硬朗大气风
用户选择风格后,每种风格只做1-2页预览(封面页+1个典型内容页),让用户直观对比选择。
预览生成规则:
./{标题}_preview_{风格代号}.pptx.html预览提示词:
我做了[2-3]种风格的预览,每样1-2页,你看看哪个感觉对:
[风格A预览] - 特点说明
[风格B预览] - 特点说明
[风格C预览] - 特点说明
选哪个?也可以选2-3种混搭(比如封面用A,内容用B)
用户确认风格后,开始全量生成。
生成规则:
线性扁平风格,纯白背景,深灰细线网格纹理,极简无装饰。标题使用衬线体,字号中号,正文极小号。配色仅用深灰+单色强调(深蓝或深红)。数据图表严谨对齐,表格带细线框。不要出现人像和装饰图案。米白暖色风格,米色图纸感背景,低饱和暖色调。扁平几何图形和图标辅助说明,圆角卡片承载内容。标题中号粗体,正文小号。配色以暖灰、淡蓝、淡橙为主,点缀亮色。轻松友好但信息清晰。不要出现人像。线性扁平风格,深藏青底色,金色细线装饰。标题使用衬线体大号,正文小号。几何色块以深色为主,金色或浅色文字。极简装饰线条,对称构图。不要出现人像。赛博科技风格,深蓝渐变背景,霓虹发光线条和几何粒子装饰。标题大号粗体,带发光效果。信息卡片半透明玻璃质感,边框发光。流程图用霓虹箭头连接。配色以深蓝+电光蓝+亮紫为主。不要出现人像。蒸汽波美学风格,渐变粉紫底色,网格线和日落圆形装饰。标题使用粗体大号,文字带轻微阴影。几何图形以圆形和三角为主,半透明叠层效果。配色以粉紫+青蓝+日落橙为主。不要出现人像。手绘笔记风格,米白纸张质感背景,手绘线条装饰。标题使用手写风格大号字,正文小号。信息用手绘框和箭头组织,配简洁的手绘小图标。配色以黑白为主,点缀单色(蓝色或绿色)。不要出现人像。新中式风格,宣纸质感底色,淡墨晕染装饰。标题使用衬线体大号,正文小号。几何色块以淡金和墨色为主,配以简笔水墨元素(山、云、竹等抽象化)。配色以墨灰+淡金+朱红为主。不要出现人像。硬朗工业风格,深灰底色,粗实线条分隔。标题使用超粗体大号,正文中号。色块以深色为主,配以高对比亮色强调。几何形状方正,无圆角。配色以深灰+亮黄+白色为主。不要出现人像。| 元素 | 学术顶刊 | 科普/手绘 | 商务/中式 | 科技/二次元 | 蒸汽波/硬朗 |
|---|---|---|---|---|---|
| 页标题 | 中号 | 中号大 | 大号 | 大号 | 超大号 |
| 节标题 | 小号 | 中号 | 中号 | 中号 | 大号 |
| 正文 | 极小号 | 小号 | 小号 | 小号 | 中号 |
| 数据数字 | 中号 | 大号 | 大号 | 超大号 | 超大号 |
| 风格 | 允许特效 | 禁止特效 |
|---|---|---|
| 学术顶刊 | 细线网格、表格线 | 发光、渐变、粒子 |
| 轻松科普 | 圆角阴影、淡渐变 | 发光、粒子、强对比 |
| 欧式商务 | 金线、对称、渐变色块 | 粒子、手绘元素 |
| 科技二次元 | 发光、粒子、玻璃质感 | 水墨、手绘 |
| 蒸汽波 | 叠层、网格、渐变 | 严谨表格 |
| 手绘插图 | 手绘线条、笔记框 | 发光、几何精确 |
| 新中式 | 水墨晕染、淡渐变 | 发光、粒子 |
| 美系硬朗 | 粗线、色块对比 | 圆角、渐变、手绘 |
AI生图模型(Stable Diffusion/Seedance等)本质是画字而非写字——根据字形概率分布生成像素。遇到中文这种笔画密集的字符,极大概率产生:
核心原则:图像负责"好看",HTML负责"正确"。
每页PPT由两层构成:
┌─────────────────────────┐
│ HTML文字层(z-index:2) │ ← 标题、正文、数据、标签
├─────────────────────────┤
│ AI生图背景层(z-index:1) │ ← 配色、装饰、图形、图标
└─────────────────────────┘
原则1:生图prompt中尽量不放文字
原则2:必须放文字时,只用英文/数字/极简中文
原则3:所有关键文字必须有HTML层兜底
每页生成的pptx.html结构:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<style>
.slide-container {
position: relative;
width: 1280px; height: 720px;
overflow: hidden;
}
.bg-image {
position: absolute; top: 0; left: 0;
width: 100%; height: 100%;
object-fit: cover;
z-index: 1;
}
.text-layer {
position: absolute; top: 0; left: 0;
width: 100%; height: 100%;
z-index: 2;
pointer-events: none;
}
.text-layer .title {
position: absolute;
top: 40px; left: 60px;
font-size: 36px; font-weight: 700;
font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
text-shadow: 0 2px 8px rgba(0,0,0,0.3);
/* 根据风格调整颜色 */
}
.text-layer .subtitle {
position: absolute;
top: 90px; left: 60px;
font-size: 20px;
font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
text-shadow: 0 1px 4px rgba(0,0,0,0.2);
}
.text-layer .content-card {
position: absolute;
/* 精确定位到生图中的卡片区域 */
font-size: 16px;
font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
text-shadow: 0 1px 3px rgba(0,0,0,0.2);
background: rgba(255,255,255,0.7);
padding: 8px 12px;
border-radius: 8px;
}
.page-number {
position: absolute; bottom: 15px; right: 25px;
font-size: 12px; color: rgba(255,255,255,0.5);
font-family: sans-serif;
z-index: 2;
}
</style>
</head>
<body>
<div class="slide-container">
<img class="bg-image" src="{AI生成的图片URL}" alt="背景"/>
<div class="text-layer">
<div class="title">OPC案例全集</div>
<div class="subtitle">23个实战案例 · 9大方法论</div>
<!-- 其他文字元素精确定位 -->
</div>
<div class="page-number">1/14</div>
</div>
</body>
</html>
| 文字类型 | 定位方式 | 说明 |
|---|---|---|
| 页面标题 | 绝对定位 top+left | 固定在顶部,与生图标题区域对齐 |
| 副标题 | 绝对定位,标题下方 | 跟随标题 |
| 数据数字 | 绝对定位,居中/偏移 | 大号粗体,精确覆盖生图中的数字位置 |
| 卡片内容 | 绝对定位+半透明底色 | 白色半透明底确保可读性 |
| 页码 | 绝对定位 right+bottom | 固定右下角 |
| 流程标签 | 绝对定位,逐一 | 每个标签单独定位到流程节点上方 |
交付前必须逐页检查:
| 场景 | 文字处理方式 | 生图prompt文字量 |
|---|---|---|
| 封面(1-2个大词) | 允许生图渲染+HTML兜底 | 2-3个短词 |
| 数据展示页 | 生图只画图形,HTML覆盖数字 | 0个或仅数字 |
| 流程图页 | 生图画箭头/节点框,HTML填文字 | 0个 |
| 对比页 | 生图画左右色块,HTML写对比内容 | 0个 |
| 矩阵卡片页 | 生图画卡片框,HTML填内容 | 0个 |
| 章节过渡页 | 允许生图渲染章节名+HTML兜底 | 1-2个短词 |
本Skill是create-ppt的流程管控层,不替代create-ppt的生图能力。实际生图仍调用create-ppt的脚本,本Skill负责:
图文分离双层架构(图底层+文字层)有一个致命缺陷:AI生图不知道文字会放在哪,文字也不知道图片的视觉重心在哪。结果就是文字经常压在图片的装饰元素上,或者文字因为图片底色太杂而看不清。
在原来的"两层"之间,插入一个视觉缓冲层(text-zone-backdrop)——一个渐变半透明遮罩,在文字区提供实底保证可读性,在图片区透明让视觉元素展示。
┌──────────────────────────────┐
│ HTML文字层(z-index:3) │ ← 标题、正文、数据
├──────────────────────────────┤
│ 渐变缓冲层(z-index:2) │ ← 文字区实底→图片区透明
├──────────────────────────────┤
│ AI生图背景层(z-index:1) │ ← 配色、装饰、图形
└──────────────────────────────┘
在生图prompt中强制指定文字区和视觉区的空间分配:
内容页prompt模板(在风格prompt末尾追加):
构图要求:左侧45%和顶部15%为纯净纹理/渐变区域,仅保留极简装饰线条;
视觉装饰元素(图形、图标、色块)集中在右侧55%和底部25%。
画面中不要出现任何文字、字母或数字。
封面页prompt模板:
构图要求:中央60%区域(水平30%-70%,垂直25%-65%)为纯净纹理区域,仅保留极简装饰;
视觉装饰元素集中在四周边缘和角落。
画面中不要出现任何文字、字母或数字。
目录页prompt模板:
构图要求:左侧60%为纯净纹理/渐变区域;视觉装饰集中在右侧40%。
画面中不要出现任何文字、字母或数字。
根据页面类型,在bg-img和text-layer之间插入渐变遮罩div:
内容页缓冲层CSS(文字左图右布局):
.text-zone-backdrop {
position: absolute;
top: 0; left: 0;
width: 55%; height: 100%;
z-index: 2;
background: linear-gradient(to right,
var(--backdrop-solid) 0%,
var(--backdrop-solid) 55%,
var(--backdrop-mid) 80%,
transparent 100%);
pointer-events: none;
}
封面页缓冲层CSS(居中标题):
.text-zone-backdrop-cover {
position: absolute;
top: 25%; left: 15%;
width: 70%; height: 50%;
z-index: 2;
background: radial-gradient(ellipse at center,
var(--backdrop-solid) 0%,
var(--backdrop-mid) 60%,
transparent 100%);
pointer-events: none;
}
目录页缓冲层CSS(左侧列表):
.text-zone-backdrop-toc {
position: absolute;
top: 0; left: 0;
width: 65%; height: 100%;
z-index: 2;
background: linear-gradient(to right,
var(--backdrop-solid) 0%,
var(--backdrop-solid) 65%,
var(--backdrop-mid) 85%,
transparent 100%);
pointer-events: none;
pointer-events: none;
}
各风格的缓冲层变量:
| 风格 | --backdrop-solid | --backdrop-mid |
|---|---|---|
| A学术顶刊 | rgba(255,255,255,0.96) | rgba(255,255,255,0.7) |
| B轻松科普 | rgba(255,248,240,0.93) | rgba(255,248,240,0.65) |
| C欧式商务 | rgba(10,22,40,0.88) | rgba(10,22,40,0.5) |
| D科技二次元 | rgba(11,14,45,0.88) | rgba(11,14,45,0.5) |
| E蒸汽波 | rgba(43,16,85,0.85) | rgba(43,16,85,0.45) |
| F手绘插图 | rgba(255,249,240,0.93) | rgba(255,249,240,0.65) |
| G新中式 | rgba(245,240,232,0.93) | rgba(245,240,232,0.6) |
| H美系硬朗 | rgba(45,45,45,0.9) | rgba(45,45,45,0.55) |
每种页面类型定义固定文字区域坐标,避免凭感觉定位:
| 页面类型 | 标题位置 | 内容区 | 图片展示区 |
|---|---|---|---|
| 封面 | center(30-60%h, 15-85%w) | center-sub | 四周边缘 |
| 目录 | top-center(0-8%h) | left(5-55%w, 10-88%h) | right(55-100%w) |
| 左文右图 | top-left(0-8%h, 5-50%w) | left(5-48%w, 10-85%h) | right(48-100%w) |
| 右文左图 | top-right(0-8%h, 50-95%w) | right(50-95%w, 10-85%h) | left(0-52%w) |
| 全幅数据 | top-center(0-8%h) | center(10-85%w, 10-85%h) | 背景装饰 |
| 结尾 | center(35-60%h) | center-sub | 四周边缘 |
| 元素 | 封面页 | 内容页 | 最小值 |
|---|---|---|---|
| 主标题 | 72-80px | - | 72px |
| 副标题 | 28-32px | - | 28px |
| 页标题 | - | 42-48px | 42px |
| 卡片标题 | - | 20-24px | 20px |
| 正文/卡片文字 | - | 16-18px | 16px |
| 数据数字 | - | 52-60px | 52px |
| 标签/辅助 | - | 14-16px | 14px |
| 页码 | 12px | 12px | 12px |
| 目录条目 | - | 17-19px | 17px |
| 表格内容 | - | 14-15px | 14px |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<style>
:root {
--backdrop-solid: rgba(245,240,232,0.93);
--backdrop-mid: rgba(245,240,232,0.6);
--title-color: #4A4A4A;
--text-color: #666;
--accent-color: #C9B037;
}
.slide-container {
position: relative; width: 1280px; height: 720px; overflow: hidden;
}
.bg-image {
position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; object-fit: cover;
}
.text-zone-backdrop {
position: absolute; top: 0; left: 0; width: 55%; height: 100%; z-index: 2;
background: linear-gradient(to right,
var(--backdrop-solid) 0%, var(--backdrop-solid) 55%,
var(--backdrop-mid) 80%, transparent 100%);
pointer-events: none;
}
.text-layer {
position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 3; pointer-events: none;
}
.text-layer .page-title {
position: absolute; top: 3%; left: 4%;
font-size: 44px; font-weight: 700; color: var(--title-color);
font-family: 'STSong','PingFang SC',serif;
}
.text-layer .content-area {
position: absolute; top: 12%; left: 4%; width: 46%;
}
.page-number {
position: absolute; bottom: 12px; right: 20px; font-size: 12px;
color: rgba(74,74,74,0.4); z-index: 3;
}
</style>
</head>
<body>
<div class="slide-container">
<img class="bg-image" src="{AI图片URL}"/>
<div class="text-zone-backdrop"></div>
<div class="text-layer">
<div class="page-title">标题</div>
<div class="content-area">
<!-- 所有内容元素 -->
</div>
</div>
<div class="page-number">X/Y</div>
</div>
</body>
</html>
交付前必须检查:
参数(色值、字号、百分比)是骨架,呼吸感才是灵魂。一张PPT好不好看,差的不在色值差几个数字,差在视觉节奏、层次关系、和"该安静的地方安静"。
1. 留白不是空,是呼吸
2. 每页只有一个声音
3. 对比的张力,不在大小在关系
4. 节奏感:松紧交替
5. 风格的灵魂是气质,不是元素
在标准prompt基础上,追加美学指令(用比喻和感受词,而非纯参数):
| 页面类型 | 美学指令示例 |
|---|---|
| 封面 | "标题区安静如停顿,装饰区轻如回声,整体感觉像一本精装书翻开的第一页" |
| 目录 | "节奏均匀如心跳,每个条目是平等的,没有谁比谁更重要" |
| 内容页 | "文字区是主角在念台词,装饰区是舞台灯光——看得见但不抢戏" |
| 数据页 | "大数字是页面的唯一高音,其余元素都是和弦伴奏" |
| 章节过渡 | "突然安静,像一句话说完后的停顿,给读者消化上一章的时间" |
| 结尾 | "像一首曲子的余音,安静地结束,不拖泥带水" |
交付前,不要只检查参数清单,问自己三个问题: