Install
openclaw skills install @kenzje228/custom-ai-pptx-generatorCustom AI PPTX Generator — Design-driven, editable PowerPoint creation from your content. 可定制化AI 演示文稿(PPT)生成器 · 千题千境 (QianTi QianJing) AI-PPT workflow. This skill should be used when the user asks to create a PPT / presentation / training deck / project briefing / policy explainer from requirement n
openclaw skills install @kenzje228/custom-ai-pptx-generator本 skill 封装「千题千境」AI-PPT 工作流的原始基线版本(2026-09-12 ~ 09-14 三案例实战定版)。 边界声明(重要):
modules/00_design_direction_gate ~ modules/08_visual_qa)、不使用 SlideSpec /
Style DNA / Anti-Repetition 等新架构概念。完整知识底稿见 references/千题千境_项目经验总结.md(10 节:三案例复盘、
5 步工作流详解、python-pptx 坑全集、COM/PowerShell 环境坑、素材抠像、
排查方法论、用户硬规则、目录规范、可复用资产清单)。执行任何一步前,
先查阅该文档对应章节。
验收状态: 验收测试一(制度/流程说明类,SSC 口径)、验收测试二 (Employee Onboarding Journey,2026-09-15:Design Intent Brief 驱动 8 页全异构构图、 人物贴图第 2 步前置确认 + AI 圆形徽章素材椭圆嵌入、全流程零返工交付)均已通过, 覆盖「员工体验叙事类」与「制度说明类」两类典型场景。
① 需求文字+素材 → ①.5 Design Intent Brief(轻量,无确认节点)
→ ② 结构确认 → ③ ASCII 草稿确认 → ④ 终稿预览样图 → ⑤ 原生重建 PPTX → ⑥ 视觉自检交付
↘ (不满意) 提示词交付兜底
铁律:②③④ 三步各有用户确认节点,必须停下等用户拍板,不得自行批准推进。 (①.5 Design Intent 是 AI 内部思考步骤,不新增用户确认节点,随②的结构稿一并呈现即可。)
定位: 这不是 Style Engine、不是 Narrative Engine、不是 Template Library、不是 Design System。 它只是一段 concise 的 Design Intent Brief,让 AI 在画 ASCII 草稿之前先主动思考: 「这份 presentation 最适合如何被视觉表达?」——而不是直接套用过去成功过的 layout、 template 或 corporate PPT pattern。
Brief 必须包含 6 项(纯文本,一段到底,控制在 ~150 字/项以内):
硬规则(A~H):
Token 效率铁律: 本步骤必须轻量——不做多轮 design exploration、不生成多个完整 style alternatives、不生成图片、不生成 PPT、不重复 Content Analysis 已完成的分析。 只输出一个 concise Design Intent Brief,然后进入第 2 步。
必须让用户拍板四件事,缺一不可:
风格偏好必须显式确认:给出候选风格 + 每种「看起来是什么样」的白话描述让用户选, AI 不能默认替用户决定,也不得默认裸排版。用户自定义的名字/文案是一等公民, AI 只提供候选。
visual expression: — 本页采用 Brief 中哪种视觉表达(对应 Preferred Visual Expressions /
Avoid 两项做取舍;整体 style 保持一致,individual expression 按内容变化)key visual idea: — 本页的核心视觉想法是什么(一句话,对应 Core Visual Idea 在本页的落地)输入继承(三层): Original Content(source of truth)+ Approved ASCII Storyboard (已确认的结构/视觉规格)+ Design Intent Brief(设计意图)。 Visual Prototype 不得重新发明与已确认方向完全不同的设计——样图是 ASCII 稿 (含每页 visual expression)的视觉落地,不是另起炉灶。
三条路径,按优先级:
| 路径 | 条件 | 说明 |
|---|---|---|
| A. hy-image-generation(混元生图 3.0) | 已配置 TENCENTCLOUD_SECRET_ID/KEY | 首选;密钥未配时路径空闲 |
| B. 内置 image_gen | 快速验证视觉走向 | 中文易出错字;样图仅用于确认视觉走向 |
| C. 提示词交付兜底(默认主路径) | 用户对样图不满意 | 立即停止反复生成,输出 N 个可复制提示词,用户去外部工具出图,回传后做原生重建 |
output_dir。
(2026-09-15 海洋案例补充:即使传了独立 output_dir,并行批次仍会把全部结果
落进最后一个目录并互相覆盖——ImageGen 工具层会忽略并发调用的 output_dir。
因此多图生成必须逐张串行调用;若已并行且部分文件被覆盖,先 Read 幸存文件
逐张辨认是哪一页,再只补生成缺失页。)output_dir(同前:并行撞名)。references/prompts/ 下三个范本:
千题千境_单block提示词.txt — 单 block 可复制版(含英文出图 + 中文对照)千题千境_6页提示词.md — 6 页提示词包(Markdown 版)SSC自动化_单block提示词.txt — 商务风 LEGO 黄+深蓝配色范本迭代修改规则(最小改动原则):
scripts/deck_ssc_v1.py 或 scripts/deck_qianti_v2.py 骨架):
调色板常量 → helpers(S/box/para/set_font/conn/solid/bg)
→ 图标库(ic_*,统一签名 (slide,cx,cy,sz,col,bgc),内细节用底色反白)
→ 每页一个 page*() 函数 → main 逐页构建 → 另存 ASCII 名渲染副本
deck_xxx_render.pptx)——
COM 打开中文路径会失败,全靠这份副本。Export(png,'PNG',1920,1080) → 逐张比对样图
(导出脚本模板:scripts/export_png_template.ps1,改两个路径即用)_v1→_v2);
首版有缺陷也是移档留存(如 draft0.pptx),不是删除。C:\Users\kenzj\.workbuddy\binaries\python\envs\ppt\Scripts\python.exe
(已装 python-pptx;中文输出加 -X utf8 并设 PYTHONIOENCODING=utf-8 / PYTHONUTF8=1)powershell -NoProfile -ExecutionPolicy Bypass -File <path>$ 会被吞),一律写 .ps1 文件再跑。try/finally 保证 $pres.Close() / $app.Quit()
(export_png_template.ps1 已内置),不依赖事后清理;
② 仍有挂死实例时,只终止本技能自己启动的那个实例(能拿到 PID 就按 PID 终止;
确认屏幕上没有用户打开的其他演示文稿时才可按进程名处理);
③ 严禁无差别 Get-Process POWERPNT | Stop-Process -Force——用户可能有
未保存的无关演示文稿,强制终止会静默丢失数据;确需强制终止非本技能启动的
进程前,必须先向用户说明未保存数据丢失风险并获得明确确认。| 脚本 | 用途 |
|---|---|
deck_ssc_v1.py | 构建器骨架范本(LEGO 黄+深蓝商务风,helpers + 10 图标函数) |
deck_qianti_v2.py | 构建器骨架范本(童趣糖果色风) |
export_png_template.ps1 | COM 导出 PNG 模板(1920×1080;安全版:参数化输入、运行级输出目录、不删除既有文件、try/finally 清理 COM) |
bissect.py | 增量变体二分(定位 XML 级损坏,PowerPoint 打不开时用) |
test_sync.py / test_sync2.py | 同尺寸并列图标选型模板(候选并排 + 一轮导出定版) |
sample_ssc_colors.py | 配色采样(从样图提取主色) |
cutout.py | 素材抠像管线(alpha ramp + 水印擦除 + 绿边扩散,如需图片素材时) |
注:deck 骨架脚本不含任何作者本机绝对路径——输出目录默认在脚本旁 output/,
可用环境变量 QIANTI_OUT / QIANTI_ASSETS 覆盖;所有保存走 safe_save_path()
(已存在则自动 _v2/_v3 递增,永不静默覆盖,与用户协作硬规则 #1 一致);
诊断脚本(test_sync* / bissect)输出到运行级目录,保留历史证据。复用时按新项目改写
输出文件名与内容即可。
ppt/slides/slideN.xml 查 <a:avLst> 重名 gd;再用 bissect.py 增量二分。
两大已知根因:<a:alpha val> 单位是千分比(必须 alpha*1000);
UP_DOWN_ARROW 设 adjustment 会生成重复 adj1/adj2。test_*.py 同尺寸并列选型,一轮定版,
不在主稿反复打补丁。para_runs(tf, [("", 0, …)]) 会产出非法字号;改用 parse_xml('<a:buNone/>')
挂到 pPr 的方案,不造空 run。完整坑清单见 references/千题千境_项目经验总结.md 第三~六节。