Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when converting fixed-ratio AI-generated HTML slides (or HTML fragments) into highly-editable, high-fidelity PPTX deliverables.
.claude/skills/kiakun-collab-html-to-pptx/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | -42% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -26% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 85% | 0% |
把 AI 生成的固定比例 HTML 页面转成 PPTX,三个硬目标:超高还原度(浏览器渲染 ≈ PPTX 渲染,QA 双门禁)、超高可编辑度(文字=原生文本框、形状=原生 autoshape、图片=独立对象,仅不可表达元素才烘焙)、干净整洁(无冗余 wrapper、同 bounds 合并、语义分组、z-order 正确)。
一条命令跑完整流水线(提取 → 变换 → 烘焙 → 构建 → COM 渲染 → QA → 自动返修):
powershellpython scripts/run_pipeline.py --html <file|dir> --out-dir out
--steps extract,transform,build(产出 out/deck.pptx,跳过渲染/QA)。out/deck.pptx、out/qa-report.json、out/comparison.png、out/pipeline-report.json。px × 9525 = EMU。DPR=2 只影响截图位图,DOM 几何一律 CSS px。getBoundingClientRect / Range.getClientRects,不解析 flex/grid/绝对定位。bakedReason)。--paginate fixed,默认),或一目录一文件一页(natural_key 排序)。file://)或已内联;跨域字体会静默降级,提取前已 document.fonts.ready。backdrop-filter、clip-path、mask、mix-blend-mode≠normal、多层/inset 阴影、conic-gradient、canvas/video、复杂 SVG。默认简单 SVG 也烘焙,--svg-as-shapes 试原生 freeform(风险自担)。bakedReason 进最终报告,供可编辑度审计。textLayoutBudget)。overallStatus: "PARTIAL",defects 全量列出。build_layout_spec.py 枚举 Windows 注册表拿到 PowerPoint 实际识别的字体名(如 腾讯体 W7),并对拼写/空格差异自动校正(写成 腾讯体W7 会被纠正为 腾讯体 W7)。凭"看起来像名字"直接写会导致 PowerPoint 静默 fallback。fontMap[].confidence<1 或 warnings 有字体条目时,说明有 fallback 风险,须核对。15 大字背景改纯色)。这类删减在会话里明确,不由脚本臆测。warnings 会列出超出 1280×720 的元素(底部页脚、多列最后一行、卡片长文本、标签右边界最易越界)。layout-spec 改参数重建,而不是泛泛"不太像"。fontMap/warnings);无残留错误字体名与多余伪粗。Slide.Export 输出 2560×1440 PNG,进程收尾有 psutil 兜底。playwright install chromium);python-pptx、pywin32、numpy/scipy、Pillow。../ppt-rebuild-workflow/scripts;HTML2PPTX_QA_TOOLKIT 可覆盖。scripts/extract_html.py:Playwright 提取几何/样式/文字/截图 → extraction/*.json + reference/*.png。scripts/build_layout_spec.py:角色分类/扁平化整洁/可表达性评分 → layout-spec.json。scripts/build_pptx.py:layout-spec → .pptx(原生对象 + 烘焙占位)。scripts/render_pptx_com.py:PowerPoint COM 导出 render/*.png(@2x)。scripts/qa_gate.py:双门禁 + 返修策略 → qa-report.json。scripts/run_pipeline.py:一键驱动 + 返修循环 → pipeline-report.json。字段契约与 CLI/退出码见 pipeline-contracts.md。
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 4,713 | 4,046 | -14% | 1 | 1 | 0% | 212 | 1,868 | +781% | 0 | 0 | — |
case-12 | pass→pass | 15,399 | 7,843 | -49% | 1 | 1 | 0% | 2,532 | 3,023 | +19% | 0 | 0 | — |
case-02 | fail→pass | 21,699 | 6,281 | -71% | 1 | 1 | 0% | 4,926 | 2,839 | -42% | 0 | 0 | — |
case-03 | fail→fail | 26,655 | 4,926 | -82% | 1 | 1 | 0% | 6,000 | 1,981 | -67% | 0 | 0 | — |
case-04 | pass→pass | 5,495 | 2,861 | -48% | 1 | 1 | 0% | 1,075 | 2,206 | +105% | 0 | 0 | — |
case-05 | fail→pass | 12,526 | 3,602 | -71% | 1 | 1 | 0% | 2,178 | 2,284 | +5% | 0 | 0 | — |
case-11 | fail→pass | 14,883 | 1,880 | -87% | 1 | 1 | 0% | 2,610 | 1,922 | -26% | 0 | 0 | — |
case-06 | pass→pass | 10,329 | 4,024 | -61% | 1 | 1 | 0% | 1,692 | 2,383 | +41% | 0 | 0 | — |
case-07 | fail→pass | 12,471 | 7,167 | -43% | 1 | 1 | 0% | 2,055 | 2,789 | +36% | 0 | 0 | — |
case-08 | pass→pass | 20,481 | 1,660 | -92% | 1 | 1 | 0% | 3,597 | 1,892 | -47% | 0 | 0 | — |
case-09 | fail→pass | 16,162 | 1,942 | -88% | 1 | 1 | 0% | 1,072 | 1,981 | +85% | 0 | 0 | — |
case-10 | fail→pass | 7,822 | 1,776 | -77% | 1 | 1 | 0% | 1,211 | 1,934 | +60% | 0 | 0 | — |
case-13 | pass→pass | 10,055 | 6,321 | -37% | 1 | 1 | 0% | 1,720 | 2,772 | +61% | 0 | 0 | — |
case-14 | pass→pass | 11,847 | 10,309 | -13% | 1 | 1 | 0% | 2,115 | 3,512 | +66% | 0 | 0 | — |
case-15 | pass→pass | 16,827 | 1,709 | -90% | 1 | 1 | 0% | 3,078 | 1,873 | -39% | 0 | 0 | — |
case-16 | fail→pass | 14,221 | 1,951 | -86% | 1 | 1 | 0% | 2,636 | 1,982 | -25% | 0 | 0 | — |
case-17 | fail→pass | 10,201 | 1,904 | -81% | 1 | 1 | 0% | 2,121 | 1,972 | -7% | 0 | 0 | — |
case-18 | pass→pass | 9,706 | 3,017 | -69% | 1 | 1 | 0% | 1,750 | 2,133 | +22% | 0 | 0 | — |
case-19 | fail→pass | 9,046 | 1,904 | -79% | 1 | 1 | 0% | 1,493 | 1,897 | +27% | 0 | 0 | — |
case-20 | pass→pass | 7,169 | 7,902 | +10% | 1 | 1 | 0% | 1,504 | 3,313 | +120% | 0 | 0 | — |
case-21 | pass→pass | 7,298 | 4,620 | -37% | 1 | 1 | 0% | 1,505 | 2,558 | +70% | 0 | 0 | — |
case-22 | pass→pass | 8,473 | 6,910 | -18% | 1 | 1 | 0% | 1,716 | 2,988 | +74% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +41 percentage points is the difference between those two pass rates over the 19 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.