zcbot/skills/ppt/SKILL.md

27 KiB
Raw Blame History

name description
ppt 生成 PowerPoint 演示文稿 (.pptx) 文件。 触发:用户明确点名 PPT / 幻灯片 / 演示文稿 / .pptx / slide / deck 之一。 不触发:用户明确说要"报告 / 文档 / 纪要"等指向纯文档形式的产物。⚠️ 歧义先反问:用户说"汇报 / 方案 / 材料"等产物形态不明的词、且没说成品形式时,不要直接 load 本 skill 也不要假定走文档,先反问一句"这份要做成 PPT 演示稿,还是 Word/Markdown 文档?" 用户确认 PPT 后再 load。

PPT(SVG-first)

把材料变成可演示、可编辑的 .pptx。

核心管线:素材 → 策略(spec)→ [配图] → 执行(逐页手写 SVG)→ SVG 质检 → 后处理 → 渲图验收 → 导出 PPTX(验收在导出之前;导出边界有硬门,没验收过的 deck 拒绝产出 pptx)

为什么是 SVG:不再用 python-pptx 拼固定版式件(那是版面单调/AI 味的天花板)。AI 把每页当矢量设计稿手写成 SVG(设计自由度 = 浏览器级),再由纯 Python 转换器逐元素译成原生可编辑的 DrawingML(形状/文本/渐变都能在 PowerPoint 里选中改)。SVG 与 DrawingML 是同一套"绝对坐标 2D 矢量"世界观的两种方言,转换是翻译而非格式硬凑。详见 references/shared-standards.md

进度展示:多页 deck 用 task_progress 标记「摄取素材 / 八条对齐 + 逐页大纲 / [配图] / 逐页 SVG / 质检 / 渲图验收 / 导出」等关键阶段;不要把每页内部写入都当进度步骤。

资源

脚本(host 上用 .venv/Scripts/python.exe <skill_dir>/scripts/xxx.py ... 跑;<skill_dir> = 本 skill 绝对路径):

  • svg_quality_checker.py —— SVG 结构质检(禁用特性 / viewBox / spec_lock 漂移 / 配色越界等)。引擎,自包含
  • finalize_svg.py —— SVG 后处理(图标内嵌 / 配图裁切内嵌 / tspan 展平 / 圆角矩形转 path)→ 产出 .build/svg_final/(隐藏、可再生)
  • svg_to_pptx.py —— SVG → 原生 PPTX(逐元素译 DrawingML;默认嵌演讲者备注 + Office 兼容 PNG 兜底)
  • total_md_split.py —— 把 notes/total.md 拆成逐页备注(导出前跑)
  • update_spec.py —— 改 spec_lock.md 的颜色/字体后,一键传播到所有已生成 SVG(改稿用)
  • svg_preview.py —— 无头 Chrome 把 SVG 渲成 PNG 供肉眼/vision 验收(SVG 是视觉真相;替代了浏览器 live preview);渲 project 目录时同步登记 .build/acceptance.json 验收记录(每页源 sha1 + verdict)
  • accept_pages.py —— 看完 PNG 后标记每页验收结论(--pass/--pass-all/--fail --reason);标 pass 要求"渲过图 + 渲后源没改",导出 gate 只认 pass 页
  • project_utils.py / error_helper.py —— 引擎辅助(canvas 校验 / 友好报错),被上面脚本 import,不直接调

设计知识(references/,先读相关的,不默写):

  • shared-standards.md —— SVG→PPT 硬约束(禁用特性清单 / XML 良构陷阱 / 字体栈纪律),执行前必读
  • executor-base.md —— 执行通则(模板继承 / 逐页 spec_lock 重读 / 字号纪律 / 内容→版式)
  • strategist.md —— 策略通则(八条对齐内容 / 配色派生 / 字号阶 §g / 配图意图 §h / spec 产出);注:其中"Confirm UI 浏览器确认页"机制在 zcbot 里用聊天确认替代,只取其设计判断
  • image-layout-patterns.md / image-layout-spec.md / svg-image-embedding.md —— 图文版式 72 式 + 并排尺寸算法 + 配图嵌入规范
  • canvas-formats.md —— 画布格式(viewBox / 安全区)
  • modes/(5 种叙事骨架:pyramid/narrative/instructional/showcase/briefing)+ visual-styles/(19 种视觉风格:editorial/swiss-minimal/glassmorphism/dark-tech/data-journalism/…)—— 去 AI 味的关键,执行时按 spec 锁定的那一个读
  • animations.md —— 导出动画(可选,默认只翻页淡入、无逐元素动画)

模板库(templates/,opt-in,默认自由设计不读):

  • layouts/(版式模板)/ decks/(整套替换:中汽研/招商银行/重庆大学等)/ brands/(品牌身份)/ charts/(71 个图表/信息图 SVG)—— 索引见各自 *_index.json
  • icons/ —— 5 套图标库(tabler-outline/tabler-filled/chunk-filled/phosphor-duotone/simple-icons,共 1.1w+)。executor 写 <use data-icon="<lib>/<name>">,finalize 自动从这里内嵌(默认目录,无需预取);锁 inventory 前用 ls templates/icons/<lib>/ | grep <关键词> 验名
  • design_spec_reference.md / spec_lock_reference.md —— spec 产出骨架,策略阶段写 spec 前必读

素材摄取:用 markitdown CLI 把 PDF/DOCX/PPTX/XLSX/HTML/URL 转 Markdown,落 <project_dir>/sources/<name>.md

工作目录约定

<task_dir> = system prompt 注入的绝对路径。每份 deck 用一个独立 project 目录 <project_dir> = <task_dir>/<deck_slug>/(deck_slug 按主题取,多 deck 不撞)。引擎契约文件(design_spec.md/spec_lock.md)和各产物子目录都在 <project_dir> 下:

<project_dir>/
├── sources/            # markitdown 转出的素材
├── design_spec.md      # 人读:设计叙事(受众/风格/配色理由/逐页大纲)——引擎契约之一
├── spec_lock.md        # 机读:执行锁(HEX/字体栈/图标/图片清单/page_rhythm/page_layouts)——executor 每页重读
├── images/             # 配图(imagegen 生成 / 用户提供 / 公式 PNG);SVG 里用 ../images/ 引用
├── templates/          # 仅当用户给了模板路径才有(模板 SVG + 其 design_spec)
├── icons/              # 可选:项目本地图标(没有则 finalize 回退到 skill 的 templates/icons/)
├── svg_output/*.svg    # ★ executor 逐页手写的 SVG(视觉真相、改稿对象)—— 唯一可见的 svg 目录
├── notes/total.md      # 演讲者备注(逐页),total_md_split 拆分后导出嵌入
├── exports/<slug>_<ts>.pptx   # ★ 最终产物(原生 DrawingML,可编辑)
├── REVISIONS.md        # 修订日志(见 §修订日志)
└── .build/             # 可再生构建产物(dotfile 隐藏、随时可删;用户文件列表看不到)
    ├── svg_final/      #   finalize 产出(图标/配图已内嵌,自包含;供 legacy 导出 + 忠实预览)
    ├── preview/        #   svg_preview 渲的验收 PNG
    ├── acceptance.json #   渲图验收记录(每页源 sha1 + verdict;导出 gate 依据)
    └── backup/latest/svg_output/   # SVG 源快照(只留最新一份,可不跑模型重新导出)

所有产物写 <project_dir>,不写 cwd / skills/ / repo 根。可见面 = 源 + 交付物(sources/images/svg_output/notes/exports + 两个 spec + REVISIONS);派生的中间物(svg_final/preview/backup)一律进 .build/,由脚本自动落位,不要手动在根目录建 svg_final/preview/backup

默认主题 — 自由设计(content-driven)

默认不锁死配色:策略阶段根据内容 + 受众 + 选定的 visual_style 派生一套协调配色与版式(在 spec 阶段给用户 ≥3 个配色/风格候选挑)。模板是地板也是天花板 —— 默认自由设计让版面跟着内容走,而非被固定语汇框死。

  • 商务红 #C00000 / 中建材等品牌色,作为候选之一;中文政企/集团/科研商务汇报默认就把商务红列进 ≥3 配色候选(见 strategist.md §e)。用户点名("做成蓝色 / 用我们公司紫色")或素材里有 brand guideline → 按其锁定。
  • 现成一款 business-red 商务红品牌预设(templates/brands/business-red/:#C00000 全色表 + 宋体标题 + 实心图标);用户说"红色 / 商务红 / 中建材风"→ 指给他按路径 opt-in,或直接锁其配色。其它品牌/模板同理:用户给 templates/ 下明确路径才触发(见 strategist.md 模板分发),不主动猜、不模糊匹配。

阶段一:策略(Strategist)—— 八条对齐 + 逐页大纲,产出 spec

先读 references/strategist.md(取其设计判断)+ templates/design_spec_reference.md + templates/spec_lock_reference.md(产出骨架)。

0. 先检测已有 spec:glob <task_dir>/*/spec_lock.md

  • 当前 task 已有 project → 展示给用户,问「沿用进阶段二 / 重定调(新建 project 目录,旧的保留)」, BLOCKING 等决定。
  • 没有 → 走下面。

八条对齐(ah)——按下表一次性给推荐方案(默认自由设计),然后 BLOCKING:等用户确认/修改。不要一条条问。zcbot 走聊天确认(不开浏览器 Confirm UI),内容与 strategist.md 的 ah 一致:

# 默认
a 画布 16:9(viewBox 0 0 1280 720)。其它见 canvas-formats.md
b 页数 独立拍板项(见下方「页数 gate」):按内容量 × 投递目的推一个具体数字(如「建议 10 页」),不甩「常 815」这种区间就想过;封面 + 正文 + 尾页
c 受众 + 核心信息 + 投递目的 看材料推断受众;投递目的 text(读)/balanced(商务,默认)/presentation(演讲)定正文字号与密度
d mode + visual_style mode 选 5 骨架之一;visual_style 给 ≥3 个候选(safe/shifted/bold)让用户挑 —— 这是观感主轴
e 配色 按 visual_style + 内容派生 ≥3 套候选(每套含 bg/primary/accent/text…);自由设计默认
f 图标 选 1 个库(tabler-outline 等),stroke 库要定 stroke_width;**锁 inventory 前 `ls templates/icons//
g 字体 + 字号 CJK+Latin 字体栈(栈尾必须是预装字体,见 shared-standards §字体);正文字号按投递目的一个定值;公式策略 mixed/render-all/text-only
h 配图 none/ai(走 imagegen skill)/provided/placeholder;ai 要定 image_rendering + image_palette(deck 级锁)。用户没给图时别默认整本 none:封面/分节/概念/氛围页主动把 ai 配图作为候选提给用户(数据/列表/流程页仍走图表→§VII,不配装饰图);提议免费,只有用户确认后 imagegen 才花钱(成本门见阶段二)。见 strategist.md §h

🔒 页数 gate(不可默认放行):页数是唯一必须拿到用户明确数字才能往下走的项。给完 ah 推荐后,若用户只回笼统的「可以 / OK / 你定」而没给出、也没逐字认可一个具体张数, 必须单独再追问一句「这份就定 N 页,可以吗?」 —— 拿到明确整数(用户报的数,或对你推荐数的显式点头)后,才用这个数去写逐页大纲。禁止把区间中位数(如 ~12)当默认值自行敲定、绕过用户。唯一例外:用户明确说「页数你随意 / 不重要 / 你定就行」时,按你的推荐数走、不再追问(但仍要在预览里写出这个数,让用户有机会否掉)。逐页大纲的页数 = 已确认的这个数,一页不多一页不少(封面 + 正文 + 尾页含在内)。

逐页大纲(写进 design_spec.md §IX,也是 spec_lock 的 page_rhythm/page_layouts 依据):论断式标题 + 每页标节奏(anchor/dense/breathing)。三条硬纪律(大纲阶段定死):

  • 论断标题:写结论不写主题("渗透率破 60%" 不是 "行业背景");
  • 节奏不雷同(整本 ≤2 次):相邻内容页不同版式,且同一版式原型全 deck 最多 2 页(图标卡网格 / 全宽横条列表 / 两栏裸文字列表(图标小标题+下划线+文字堆 ×2、零图形 —— 一次真实交付里出现了 4 页)尤其;5 页"2×3 图标卡"哪怕文案不同也读作同一张片重复,真实翻车过);第 3 页起换形态(时间轴/分层/象限/流程/hub-spoke/图表)。narrative 真正停顿处插 breathing(单概念/金句/大图,禁多卡网格);不要为凑节奏造填充页;素材含 ≥3 组可比数值(规模/占比/趋势/阶段目标)→ 全本至少 1-2 页真数据图表(bar/line/donut/进度条),大字 KPI 是强调不算图表,零数据图表要在 spec 写明理由;
  • 内容→版式映射(必须落到 spec,不能整本留空):历程→时间轴、循环→闭环、2-4 数字→KPI、并列→网格、单震撼数字→breathing 大字、≥3 数据点→图表(charts/ 模板或自绘);对比→象限/分栏、流程→process_flow、占比→donut、架构→分层、关系→hub_spoke。标题语义必须被图形兑现:标题写"架构"就画层块堆叠(不是等宽横条列表)、写"矩阵"就画真象限(不是卡片网格)、写"流程/层级"就有方向/层次 —— "五层架构"画成五条一样的横条是典型名不副实。每个能结构化的内容页都要在 spec_lock 的 page_charts/page_layouts 落一个视觉处理 —— 内容 deck 不许 page_charts + page_layouts 同时空着(=啥图都没分配,执行层必堆文字方块)。视觉下限见 strategist.md「GATE — visual floor」;质检会硬卡"全是文字方块"的扁平 deck(见阶段四)。

大纲连同 ah 一起给用户预览, BLOCKING 等确认整份结构后再进阶段二(改文字比改 slide 便宜)。

确认后产出两份引擎契约(按骨架填,只填实际用到的行):

  • <project_dir>/design_spec.md —— 人读叙事(IXI 节,见 design_spec_reference.md)
  • <project_dir>/spec_lock.md —— 机读执行锁(canvas/layout_grid/mode/visual_style/colors/typography/icons/images/page_rhythm/page_layouts/page_charts/forbidden,见 spec_lock_reference.md)。executor 每页重读它,是长 deck 抗漂移的命门。layout_grid(margin_x/content_top/footer_y/gutter)是跨页对齐的锚 —— 手写绝对坐标没有锁定基线必漂,质检会硬卡偏离网格 215px 的"想对齐没对齐"。

公式策略 mixed/render-all 且有公式 → 写 images/formula_manifest.json 后渲染(ppt-master 的 latex_render 未搬;zcbot 可用现有公式渲染或转图后按 images 行登记)。

阶段二:配图(条件触发)

仅当 spec §VIII 有 ai:把要 AI 生成的配图汇总,load imagegen skill 走它自己的成本确认流逐张生成(有强制确认门,不要绕过),产物落 <project_dir>/images/web/provided/placeholder/none → 跳过本阶段。

ppt-master 自带的 image_gen.py / image_search.py 配图子系统未搬;zcbot 统一走 imagegen skill。spec 的 §VIII 图片清单格式照用,只是获取机制不同。

阶段三:执行(Executor)—— 逐页手写 SVG

先读(按本 deck spec_lock 锁定值):

references/executor-base.md          # 执行通则
references/shared-standards.md       # SVG/PPT 硬约束
references/modes/<locked-mode>.md    # 锁定的叙事骨架
references/visual-styles/<locked-style>.md  # 锁定的视觉风格

只读锁定的那一个 mode + 一个 visual-style,别 glob 整个目录。

纪律(来自 SKILL 全局 + executor-base,务必遵守):

  1. 逐页串行手写,不批量、不脚本生成:每页由当前主 agent 在同一上下文里手写 SVG;禁止写循环脚本批量产 SVG(跨页视觉一致性靠逐页带上游上下文,生成器做不到),也不要 5 页一组。
  2. 每页前重读 spec_lock.md:颜色/字体/图标/图片只能来自它;查本页 page_rhythm/page_layouts/page_charts;坐标吸附 layout_grid(左缘=margin_x、正文顶=content_top、并排卡片同 top 同高等 gutter,打破网格要 ≥16px 干净地打破,不许差几 px 的"差不多" —— 对齐纪律详见 executor-base §3)。抗上下文压缩漂移。
  3. 模板供结构不供皮(非 mirror):继承几何/标签位置/编码逻辑,重新上 visual_style + spec_lock.colors 的皮;字号按 spec_lock 角色锁定值,不继承模板占位字号。
  4. 图标(锁了就必须用,非可选装饰):spec_lock 有 icons.library + 非空 inventory 时,每个内容页必须放 13 个 inventory 内的图标(KPI/列表/流程/对比/特性网格版式尤其要,常一卡一图标)——自由设计没有模板可继承图标,只能逐页手写 <use data-icon> 才有图标。封面/纯排版分节页/单数字·金句 breathing 页/尾页可不放。写法:<use data-icon="<lib>/<name>" x= y= width= height= fill= [stroke-width=]>,name 必须在 inventory 内、文件在 templates/icons/<lib>/质检会硬卡:锁了 inventory 但全 deck 0 图标 → error 退非零(见阶段四)。
  5. 配图:<image href="../images/<file>">,croppable 用 preserveAspectRatio="xMidYMid slice",| no-crop 行用 meet;意图与版式见 image-layout-*。

逐页写到 <project_dir>/svg_output/<NN>_<page>.svg演讲者备注<project_dir>/notes/total.md(每页 24 句结论先行口语)。

阶段四:SVG 质检(强制门)

.venv/Scripts/python.exe <skill_dir>/scripts/svg_quality_checker.py <project_dir>
  • 任何 error(禁用特性 / viewBox 不符 / spec_lock 漂移 / 图标压在文字上、文字基线超出画布、CJK 文字互相叠压(Geometry 检测,几何精确)/ 兄弟卡片错位 212px、偏离 layout_grid 网格、正文越过 content_bottom 侵入页脚区、spec 指派了 page_charts 该页却零图形(图表被退化成文字)(Alignment 检测,几何精确)/ 锁了图标 inventory 却全 deck 0 图标 / 内容 deck 全是文字方块(≥6 页且零 <path>/<polygon>/<polyline>/<image>) / ≥4 页同版式指纹(单调门,含两栏裸文字列表) 等)必须改:回阶段三重写该页再跑,不放过。
  • warning(低分辨率图 / 非 PPT 安全字体等):能顺手改就改,否则知会后放行。例外:Geometry: 开头的文字重叠 warning 不许无视 —— 它给了精确坐标,是"大字压说明 / 同行文字互侵"的高嫌疑点(估宽无法区分擦边与压字,所以只报 warn),阶段五渲图时必须对着该页该坐标专门看,压了就返工。
  • svg_output/(不要在 finalize 后跑 —— finalize 改写 SVG 会掩盖源级违规)。
  • ⚠️ 别用 | head / | tail 截断质检输出:管道会把脚本的非零退出码换成 head 的 0(门形同虚设),head 还会截掉打在最后的 deck 级门结论(如零图标 [ERROR])。原样跑,读完整输出、认它的退出码。
  • 跳过本阶段没有意义:导出边界会自动复跑同一套逐页硬错误检查(见阶段六质检门),error 到那里一样拒绝导出 —— 在这里主动跑并连警告一起读,能更早返工。

阶段五:后处理 + 渲图验收(强制门)—— 全量,不抽查

⚠️ 三步一步步来,别合并成一条命令:

# 5.1 SVG 后处理(图标/配图内嵌 / 文本展平 / 圆角转 path)
.venv/Scripts/python.exe <skill_dir>/scripts/finalize_svg.py <project_dir>
# 5.2 全量渲图(渲 .build/svg_final,同步登记 .build/acceptance.json 验收记录)
.venv/Scripts/python.exe <skill_dir>/scripts/svg_preview.py <project_dir>
# 5.3 read/look_at_image 逐页过目后,标记验收结论
.venv/Scripts/python.exe <skill_dir>/scripts/accept_pages.py <project_dir> --pass-all
#   (有问题的页:--fail <页名> --reason "…";只标部分页:--pass <页名…>;看状态:--status
  • 默认渲整本,不带 --pages。抽查 3 页只能覆盖 3 页,错位/文字溢出/元素重叠恰恰藏在没看的那些页里 —— 逐页手写绝对坐标,每页都可能翻车,所以每页都要过目。(页数多时可分批渲,但目标是 100% 覆盖,不是采样。)
  • read / look_at_image 逐页亲眼过:标题层级、卡片过挤/过空、文字是否溢出卡片/被裁元素是否重叠错位并排元素顶/底是否对齐、与上一页对比左缘/内容顶线是否一致(跨页一致性只有连续翻看才看得出)、图标在不在(位置对不对)、节奏是否单调(连续几页同为卡片墙就该返工换形态)、配图位置。看完才许标 pass —— --pass-all 是"每页都看过且都合格"的宣告,不是跳过看的快捷键。
  • 🚧 差评即阻断 + 返工回路:任一页有排版/溢出/重叠/半成品问题(哪怕只是封面)→ 改那一页 svg_output 的 SVG → 重跑 finalize → svg_preview.py <project_dir> --pages <N> 重渲该页 → 复看 → 再标 pass。机制会强制这个回路:标 pass 和导出 gate 都校验"渲图之后源文件没再改过"(sha1),改了不重渲重看,gate 过不去。不许"看了一页差评、跳去看下一页好评就收尾"——那正是错位交付的来路。
  • 禁止盲改:修错位/补图标不许写脚本批量 regex 插元素、改完不看渲染结果(真实事故来源:质检提示缺图标后 regex 批量盲插,图标全压在文字上交付)。每处修改都要走上面的返工回路落到"复看"。

svg_preview 渲的是 SVG(视觉真相,与导出的 pptx 1:1),比渲最终 pptx 更早更准暴露观感问题。需要校验"SVG→DrawingML 转换是否保真",再开导出的 pptx 在 PowerPoint 里看。

阶段六:导出

# 6.1 拆备注
.venv/Scripts/python.exe <skill_dir>/scripts/total_md_split.py <project_dir>
# 6.2 导出原生 PPTX(默认嵌备注 + Office 兼容 PNG 兜底)
.venv/Scripts/python.exe <skill_dir>/scripts/svg_to_pptx.py <project_dir>
#   产物:exports/<slug>_<ts>.pptx(原生,读 svg_output/)+ .build/backup/latest/svg_output/(源快照,只留最新)
  • 🚧 导出边界质检门(硬,无豁免参数):导出前自动复跑阶段四质检的逐页硬错误(禁用特性 / 坏 XML / 图片文件缺失 / 图标压字·出画布几何错误等),有 error 直接拒绝导出。没有任何 --allow-* 能绕过 —— 这些是真缺陷,回 svg_output 修完再来。
  • 🚧 导出边界验收门(硬):spec_lock 存在时,每页都必须渲过图(svg_preview)、且渲图后源未再改动、且 verdict=pass。分两层:"从没渲过 / 渲后又改 / finalize 前渲的"没有任何 CLI 逃生口(渲图很便宜,没有理由交付一页没人看过的东西);--allow-unreviewed 只豁免"渲过但还没标 pass"这一层,不是跳过验收的捷径。被拒就回阶段五补验收/走返工回路。
  • 🚧 导出边界图标门(硬):spec_lock 锁了 icons.library + 非空 inventorysvg_output/ 全 deck 零 <use data-icon> → 同样 [ERROR] 退非零(检测永远对 svg_output 源,与 -s 无关)。正确做法是回阶段三给内容页补图标重跑;只有 lock 确实过期 / 有意做无图标 deck 才加 --allow-iconless 放行。
  • 别加 -s final:native 导出默认读 svg_output/(转换器自己处理图标占位与 ../images/ 相对路径),-s final 只会引出图片路径错位这类连锁问题;真实事故里模型为绕它把 svg_output 源里的 href 改坏了。
  • 🛑 导出唯一入口 = 官方 svg_to_pptx.py,严禁自写导出器:它默认产出原生可编辑 DrawingML(形状/文本/渐变都能在 PowerPoint 里选中改),是纯 Python、不依赖任何外部渲染器(cairosvg / inkscape / rsvg-convert 一个都不需要)。所以**"某某渲染器没装"永远不是理由**——别 pip install cairosvg 也别手搓"SVG→PNG→整页贴图"的 export_pptx.py。自搓光栅导出器 = 整份变成一叠不可编辑的贴图(每页一张整页 PNG、零原生文本),skill 核心价值直接归零、判废。官方脚本跑不动就读它的报错按流程修 / 反馈,不要另起平行管线。
  • 别用 cp 代替 finalize_svg(它做了多步关键处理); 别加 --only / 强制 -s output
  • 动画可选:-t fade(翻页,默认)/ -a auto(逐元素入场,默认 none,用户要才开)。全表见 animations.md。
  • 改稿:只改 spec_lock.md 的颜色/字体 → update_spec.py <project_dir> 传播到所有 SVG(所有页源都变了 → 重跑阶段五全量重渲重标,顺手把全本再过一遍眼);改版式/内容 → 重写对应页 SVG 再走阶段五返工回路 + 6.2,不要直接 edit 成品 .pptx

完成后:用 update_spec / 重写页迭代;用户确认实质改动后追加一行到 REVISIONS.md

修订日志(REVISIONS.md)

<project_dir>/REVISIONS.md 是迭代 changelog。spec 是宪法(定调一次),REVISIONS 是实施日志(每次卡点累加)

情形 记?
用户确认改版式/主色/字体/mode/visual_style 方向
用户确认换/增/删页/关键图标/数据图表
用户确认改文案要点/核心信息/受众定位
自查发现越界/不一致后的修正 (注明触发的 quality_check 项)
页首次起草 / 字号间距微调 / 模型自己改撤未经确认

格式(倒序,最新在上,插在头注释之后):

- `<YYYY-MM-DD HH:MM>` | <第 N 页 / spec §X> | <一句话改了什么> — <为什么>

反模式

  • 用户没给材料就硬编内容(没材料只给主题 → 先补素材/反问,别凭空发挥)
  • 八条没对齐、没产出 spec_lock 就开始写 SVG
  • 写脚本批量生成 SVG(破坏跨页一致性,禁;逐页手写)
  • 绕开官方管线、自搓 SVG→PPTX 导出器(pip install cairosvg/inkscape + 手写 export_pptx.py 把每页渲成 PNG 整页贴进幻灯片)—— 产物变一叠不可编辑的整页贴图(零原生文本/形状、还发虚、外链配图丢失),skill 全部价值作废。官方 svg_to_pptx.py 默认就是原生可编辑、纯 Python 无需外部渲染器,"渲染器没装"不是造轮子的借口;导出/后处理/质检/验收只走 §16 资源里那几个官方脚本,缺一步就补一步,别另起平行流程
  • 执行时不每页重读 spec_lock(长 deck 必漂色/漂字号)
  • 同 deck 混用多个图标库 / 用 inventory 外的图标名
  • 用了 <style>/class/<mask>/<symbol>+<use>/@font-face/rgba()/HTML 命名实体 等 shared-standards 禁用特性(导出会丢元素或报错)
  • 字体栈尾不是预装字体(PPTX 无运行时回退,会变默认字体)
  • breathing 页堆多卡网格(违节奏,显 AI 味)
  • 模板照搬不重上皮(直接用模板默认渐变/阴影/字号)
  • 质检没过就交付 / 直接 edit 成品 .pptx 改稿
  • 只渲/只看几页就收尾(错位藏在没看的页里);看到差评却不返工(封面 vision 说"半成品/挤左侧"还继续导出交付);没看 PNG 就 accept_pages --pass-all(把验收门当橡皮图章 —— gate 只能强制"渲过、源没改",看没看只有你自己知道,糊弄的结果就是错位 deck 交到用户手上)
  • 质检/渲图后为消警告写脚本批量盲插元素(regex 批量加图标、改坐标,改完不复看渲染 —— 真实事故:25 页 deck 图标全压在文字上交付)
  • | head 截断质检或导出输出(吞非零退出码 + 截掉最后的门结论,门形同虚设)
  • 起名 output.pptx —— 按主题命名

输出

完成后告诉用户:文件路径、页数、用到的 mode + visual_style + 版式列表、是否有未满足的 spec 项。问一句要不要再改。


本 skill 的 SVG→PPTX 引擎、references 设计知识、templates 模板/图标库移植自开源项目 ppt-master(github.com/hugohe3/ppt-master,MIT License),适配 zcbot 的 task_dir / 聊天确认 / imagegen 工作流;浏览器 Confirm UI、live preview server、TTS 配音等桌面交互件未移植。