Agent Skills › GordenSun/GordenSuperPPTSkills

GordenSun/GordenSuperPPTSkills

GitHub

将PPT截图或图片逆向还原为可编辑.pptx。强制四层流程:复刻背景、绿幕抠取框架与图标、GPT提取文字。严格隔离任务目录,禁止代码重绘,确保输出元素可独立移动编辑。

3 skills 1,376

Install All Skills

npx skills add GordenSun/GordenSuperPPTSkills --all -g -y
More Options

List skills in collection

npx skills add GordenSun/GordenSuperPPTSkills --list

Skills in Collection (3)

将PPT截图或图片逆向还原为可编辑.pptx。强制四层流程:复刻背景、绿幕抠取框架与图标、GPT提取文字。严格隔离任务目录,禁止代码重绘,确保输出元素可独立移动编辑。
把 PPT 图片/截图转可编辑 PPTX 把图片PPT还原为可编辑PPT 抠图标 复刻背景 提取文字 还原排版
GordenImage2PPTX/SKILL.md
npx skills add GordenSun/GordenSuperPPTSkills --skill GordenImage2PPTX -g -y
SKILL.md
Frontmatter
{
    "name": "GordenImage2PPTX",
    "description": "把「图片格式的 PPT 文档 \/ 幻灯片截图 \/ 任意图片页」逆向还原成**可编辑的 .pptx**。强制四层流程: 复刻背景图 + 绿幕抠出整体框架图 + 绿幕抠出元素图标\/装饰 + GPT 视觉提取文字,再合成(文字是真文本框、框架图\/图标是可移动图片;只有用户明确要求框架切分时才切成框架部件)。 Converts slide images back into an editable PPTX via background + skeleton + icons + text layers. 当用户要 \"把 PPT 图片\/截图转可编辑 PPTX、把图片PPT还原为可编辑PPT、抠图标、复刻背景、提取文字、还原排版\"时使用。输入是图片,输出是可编辑 .pptx。"
}

GordenImage2PPTX — 图片 PPT → 可编辑 PPTX

一张一张处理每张图片,强制拆成四层再合成可编辑 .pptx(从下到上)。其中前三个图片层必须由 imagegen 生成或提取,文字层由 GPT 视觉能力提取并写成真文本框:

背景图(复刻) + 整体框架图(绿幕抠图,默认不切分) + 元素图标/装饰(绿幕抠图,切片) + 文字(GPT视觉提取)

🟣 直接转换原则:用户给出图片并要求转可编辑 PPTX 时,不要先扫描当前目录、历史输出或其它项目,去寻找/复用类似源页。直接把用户提供的当前图片作为唯一源图,按 B1-B9 流程提取背景图、框架图、元素图标和文字,建立新的 PPTX 文档。只有用户明确要求复用旧素材、续做某个历史输出、或指定已有源文件时,才读取对应历史文件。

🧱 任务隔离原则(防串文件):每次转换开始前必须创建唯一任务根目录 RUN_ROOT,例如 image2pptx_runs/<时间戳>_<源图slug>/,并把本次所有中间产物、prompt、manifest、layout、预览、QA 和最终 PPTX 都写到该目录下。禁止把新任务直接写到工作区固定的 editable/01out/qa/slide-01/,也禁止从这些固定路径读取素材。若目录已存在,必须换一个新目录,不得复用或覆盖。

layout.json 的图片路径必须在同一个 RUN_ROOT 内解析:单页 layout 优先省略 assets_dir(让 compose_pptx.py 自动用 layout 所在目录),或写成绝对页目录;不得写 "assets_dir": "editable/01" 这类会受当前工作目录影响的相对路径。manifest 的 copied_to 也必须是 RUN_ROOT 内的绝对路径。

🟦 框架图 = 一页里「背景、元素图标/装饰/艺术字、普通文本」之外的所有图像:容器/卡片(含底色填充与标题条)、分隔/连接线、全部图表图形(折线/柱状/阶梯/饼图/坐标网格/趋势线)、缎带、装饰线条与色块——统统归框架图,一次性提取,且形状·大小·位置与原图 1:1 一致(别漏数据折线/装饰)。

🟨 艺术字 = 装饰元素,不是普通文本:凡是带有渐变颜色、书法/笔刷造型、形变、描边/阴影/纹理、徽章式排版或普通字体无法直接写出的文字,都归入 B4 图标/装饰层,以图片元素提取和摆放。例如封面大字“灵芝”。B7 GPT 视觉文本层只处理普通字体可直接还原的文字。

🔴 强制四层,缺一不可(核心铁律)背景图 → 整体框架图 → 元素图标 → 文本。这四步是本技能的本质,任何一页都必须实打实地出"框架图(B3)"和"元素图标图(B4)"并绿幕抠图,默认用整张透明 frame.png 作为框架视觉层合成;只有用户明确要求"框架可移动部件/切分框架/拆成一块块"时,才把框架图按透明区域切成 frame_parts/ 后合成。 禁止的退化做法:① 直接拿原图当背景叠文字(双重文字);② 用 PPT 原生 shapes / 色块 / 线条重画背景、卡片、标题条、图表、时间轴、装饰;③ 从原图裁切局部当作背景、框架或图标素材;④ 省略框架/图标;⑤ 用代码/PIL/SVG/HTML/Canvas 画出图片层。 背景图、框架图、元素图标图都必须来自 imagegen 提取式生成:背景用 imagegen 复刻干净背景;框架图用固定 B3 提示词在纯色抠图底上生成全幅框架层;图标/装饰用 imagegen 在纯色抠图底上生成图标表,图标表里不画网格分割线。chroma_key.py 只负责去底,slice_grid.py 只允许切分 imagegen 生成并已去底的图标表;若用户明确要求框架切分,才允许切分已去底的 frame.png。不得切原始幻灯片截图。 生成证据硬门禁:B2/B3/B4 必须在 imagegen-assets-manifest.json 中记录真实 imagegen 调用证据:backend 必须是 imagegen 类后端,generated_source 必须指向或描述真实生成结果,prompt_file 必须指向本页使用的提示词文件,且 copied_to 必须是交付目录内对应图片。若 manifest 显示 programmaticlocal layer generatorPILSVGHTMLCanvasmatplotlibscreenshot renderernull prompt_file 等非 imagegen 生成迹象,本页转换失败,必须重做,不能交付。

图片层生成硬门禁

本技能中的“图片 → 可编辑 PPTX”不是用 PPT 色块重画页面。可编辑边界是:

  • 文字:写成可编辑文本框。
  • 背景/框架/图标/装饰/图表图形:由 imagegen 生成为图片层;框架图默认以整张透明 frame.png 放入 PPT(可整体移动、替换、缩放),图标放入 PPT 后可移动、可替换、可缩放。只有用户明确要求框架切分时,才把框架图去底后按透明区域切成可移动框架部件。

禁止使用以下方式替代图片层:

  • 在 PPTX 中用原生 shapes、填充色块、线条、箭头、表格、图表组件重画背景/卡片/框架/图标/装饰/图表。
  • 从原始幻灯片截图裁切局部作为背景、框架、车辆、图标或装饰素材。
  • 用 Python/PIL、SVG、HTML、Canvas、matplotlib 或截图渲染生成背景/框架/图标图片。
  • 先用原生 PPT 元素搭页面,再导出为图片层。

允许代码做的事仅限:

  • probe_palette.py 探色。
  • 复制 imagegen 生成的图片到本次 RUN_ROOT/editable/NN/
  • chroma_key.py 给 imagegen 生成的框架图/图标图去底。
  • slice_grid.py --auto/--grid 切分 imagegen 生成的图标表。
  • 可选:仅当用户明确要求框架切分时,使用 slice_grid.py --components 按透明区域切分 imagegen 生成并去底后的 frame.png,再用 frame_parts_to_icons.py 生成 icons[] role:"frame_part"
  • layout.json / deck.json,合成 PPTX 和预览。
  • layout_guard.py 校验或修正 layout.json 的坐标契约:ref_width/ref_height 必须匹配源图实际像素尺寸,source_bboxx/y/w/h 必须一致。
  • visual_compare_qa.py 把源图和最终 PPTX 预览统一尺寸后生成并排图、叠图、差异热图和诊断指标,供 GPT 视觉判断文字/图标是否与原始 PPT 图片对位。
  • 可选地裁切/缩放整张 imagegen 生成图以统一比例;不得裁原图局部冒充素材。

每页必须写 imagegen-assets-manifest.json,记录 B2/B3/B4 的 generated_sourcecopied_tolayerprompt_filebackendkey_color。没有 manifest,或任一图片层缺 generated_source / prompt_file,或任一图片层的 backend 不是 imagegen,本页转换失败,不能交付。

完整流水线、提示词、坐标/字号换算、QA 反馈环见 references/image-to-pptx.md;运行时与图片后端见 references/runtime-notes.md

运行时与图片后端(先读)

  1. 出图(复刻背景、框架图、图标图)必须用 raster 图像生成后端:Codex 用内置 imagegen / imagegen(支持把原图作为输入做"提取式"出图);其它运行时用其原生出图工具。禁止 SVG/HTML/Canvas/代码画图、PPT shapes、裁原图局部冒充。
  2. 抠透明用本技能自带 scripts/chroma_key.py(保色保线/保形)——内部不透明像素颜色 100% 保留(红/藏青/灰/白绝不褪色),默认不腐蚀边缘(细线/辉光不丢);frame-safe / icon-safe 会增强半透明边缘 alpha,并只用二值 gap repair 修补细线断点,避免横竖线不齐、圆弧残缺。框架/图标默认加 --scale 2 先超采样抠图,再在 PPT 里缩回目标尺寸,让横竖线和圆弧更顺。别用激进的 --soft-matte --despill --edge-contract 组合去抠扁平图(会变色+丢线)。
  3. 看图(文字/图标定位)必须用 GPT 自身视觉能力,输出结构化 JSON。不要先跑 tesseract、EasyOCR、系统 OCR 等传统 OCR 引擎。

imagegen 传图 / edit target 硬门禁

Codex 内置 image_gen 生成 B2/B3/B4 时,必须先用 view_image 打开当前页源图,让这张图成为当前对话里可见的 edit target,然后再调用 image_gen。Prompt 必须明确写“以刚刚显示的这张图片作为唯一编辑目标 / edit target,在它的基础上提取或擦除生成目标层”。不要只把源图当作风格参考图,更禁止只在 prompt 里写本地文件路径来冒充传图:路径文本不会自动把图片传给 imagegen,模型会凭描述猜,框架图和图标图会跑偏。

多页任务必须一页一页处理:生成第 1 页 B2/B3/B4 前只显示第 1 页源图;生成第 2 页前重新 view_image 第 2 页源图,并在 prompt 中指向“刚刚显示的这张图是本次编辑目标”。若 imagegen 产物无法证明基于当前 edit target 提取,或明显与源图不一致,本页 B2/B3/B4 判失败,必须重出,不能进入 B5-B9。

每页工作流(逐项打勾)

- [ ] B0 隔离目录:为本次任务创建唯一 `RUN_ROOT`,所有文件只写入/读取该目录;不得复用工作区固定 `editable/01`、`out/`、`qa/`
- [ ] B0a 传图:每页 B2/B3/B4 调 imagegen 前,必须先 `view_image` 当前页源图;prompt 写“以刚刚显示的这张图片作为唯一编辑目标 / edit target,在它的基础上提取或擦除生成目标层”;不得只写本地路径、不得只作为风格参考或凭文字描述猜图
- [ ] B1 探色:probe_palette.py 判断该页是否含绿 → 定本页抠图底色(默认 #00ff00;含绿改 #ff00ff 等)
- [ ] B2 背景:用 imagegen 复刻干净背景(无任何文字/图标/框架/卡片/占位块),禁止用 PPT 色块、程序绘图或裁原图;写 prompt 文件并登记真实 imagegen 调用记录
- [ ] B3 框架图:用 imagegen 在抠图底色上提取框架图,生成图片提示词固定为“生成一张图片,提取这张图片中的框架图,纯色背景,背景色值为XXXXXX,「框架图」= 原图里**除背景/图标/装饰/艺术字/普通文本外的一切**(容器轮廓与**底色填充/标题条/辉光**、分隔/连接线、**全部图表图形:折线/柱状/阶梯/饼图/坐标网格/趋势线**、缎带/装饰)→ 形状·大小·位置与原图 **1:1 一致**,保留原色与填充,别漏数据折线/装饰、别自己额外加空心线框、占位框;不要出现文字、不要出现图标;”;只允许把 XXXXXX 替换为 B1 决定的背景色值(默认 #00ff00;原图有绿色则改 #ff00ff、#8000ff 等原图没有的颜色);写 prompt 文件并登记真实 imagegen 调用记录
- [ ] B4 图标图:先用 GPT 视觉对比**原图 vs B3 frame 预览**,列出「源图全部图标/装饰/艺术字清单」和「已误入 frame 的图标清单」;B4 prompt 只生成 frame 里没有的元素,避免同一图标在 frame 与 icons 双重出现;用 imagegen 把缺失元素排成 N×N 等分方格网(小图标 4×4,大装饰/物品图/艺术字 2×2 或单独大格),多了出多张;方格网不要画分割线,不画实线和虚线,提示词里要明确写出这一点;如果最终生成的图片不小心有了方格分割线也没关系,先抠图,然后裁剪掉分割线就好(因为每个网格有留白);禁止从原图裁图标、程序绘制图标或艺术字;写 prompt 文件并登记真实 imagegen 调用记录
- [ ] B5 抠图与图标切分:scripts/chroma_key.py 给 imagegen 生成的框架图+图标图去底(框架用 `--preset frame-safe`,图标/艺术字用 `--preset icon-safe` 保边)→ 默认保留整张透明 `frame.png`,不做框架切分;图标表用 `slice_grid.py --auto --pad 24 --contact-sheet` 按透明空隙切成单个透明图标 → 查看 `icons_contact_sheet.png`、`frame.png` 灰底自检;任一图标被切断、粘连、缺边、edge_touch 异常,必须重出或重切,不能交付。若用户明确要求框架切分,再运行 `slice_grid.py --components --pad 0 --contact-sheet --prefix fp` 把 `frame.png` 切成 `frame_parts/`
- [ ] B6 定位:默认最终 `layout.json` 使用整张 `frame.png` 作为框架视觉层:写 `"frame":"frame.png"`,不要把框架切成 `frame_parts`。再逐个量出每个普通图标/艺术字在**源图实际像素坐标系**里的 `x/y/w/h` bbox,并换算成比例写入:`x=x_px/ref_width`、`y=y_px/ref_height`、`w=w_px/ref_width`、`h=h_px/ref_height`(manifest 只有素材表尺寸,必须补原图实测坐标;保持宽高比、尺寸贴合原图)→ `layout.json` 默认用 `units:"fraction"`;`view_image`/浏览器/预览图显示的缩略坐标不能直接写入,必须按 `源图宽/显示宽` 与 `源图高/显示高` 分别换回源图像素;禁止只把 x 放大、y 不放大这类混合坐标。首次合成后必须按预览反向校准普通图标尺寸/位置,缩放一律以源图 bbox 中心点为锚点,禁止按切片素材尺寸或视觉感觉直接摆放。若用户明确要求框架切分,才运行 `frame_parts_to_icons.py` 读取 `frame_parts/icons_manifest.json`,按每个框架切片在 `frame.png` 中的 bbox 映射成比例坐标,生成 `icons[] role:"frame_part"` 条目;这个 bbox 回放是拼回原 `frame.png` 布局的保证
- [ ] B7 文字:用 GPT 视觉读取原图所有**普通字体文字**(内容/像素位置/字号/颜色/粗细/对齐) → 先量**源图实际像素 bbox**,再按比例写入 layout:`x/y/w/h` 用 fraction,字号优先用 `size_ratio = 源图实际文字高度像素 / ref_height`(或 `size_pct = size_ratio*100`),如果用户或源 PPT 期望 PowerPoint 号数字号,也可以直接写 `size` 绝对 pt;不要把缩略图上的文字高度当作源图 `size_px`。换算公式是 `pt = size_ratio × (slide_height_in×72) = size_px × (slide_height_in×72) / ref_height`,反推为 `size_px = 目标pt × ref_height / (slide_height_in×72)`。如果坐标来自 2048×1143 这类缩略显示,而源图是 4096×2286,必须先把 `x/y/w/h/source_bbox/size_px` 全部乘以 2 后再写入;例如 7.441in 高、2286px 源图中,20px 只会得到 4.69pt,9pt 应写约 38.4px。艺术字只记录为 B4 图标/装饰定位,不写入普通文本框;首次预览后必须对照源图微调文本框比例、字号比例和行距,确保换行、基线和相对图标位置还原原图。**先定字体粗细/字号/行距,再回校位置**:`bold` 默认 `false`,普通正文不要全加粗,只有各级标题、按钮标题、重点词按原图加粗;多行正文段落优先用约 `line_spacing:1.2`,否则后续改粗细/行距会改变换行和视觉 bbox,让已量好的坐标再次漂移。
- [ ] B7a 坐标与样式契约校验:合成前必须运行 `layout_guard.py 源图 layout.json --strict`。`ref_width/ref_height` 必须等于源图实际像素尺寸;`source_bbox` 必须覆盖源图中真实对象,而不是覆盖 `view_image` 缩略坐标位置。若量测来自同宽高比缩略图,先把 bbox 与 `size_px` 缩放回源图像素,或用 `--fix-ref-to-source --fix-fractions --in-place` 归一化,再重新人工复查关键文本和图标。`layout_guard --strict` 还会拦截疑似半分辨率字号(默认低于 6pt、或 `source_bbox` 行高明显大于 `size_px`)和“正文全加粗”(6 个以上文本框超过 85% bold);真实小字必须显式写 `small_text_ok:true`,真实全粗体页必须写 `allow_all_bold_text:true` 并在 QA 备注说明。`layout_guard` 不用页面覆盖高度判错;任何 `source_bbox` 与 `x/y/w/h` 不一致、字号/粗细警告未处理,都不能进入 B8。
- [ ] B7b 源图 bbox 视觉复核:合成前先运行 `placement_qa.py` 只画源图框并打开 `slide_01_source_boxes.png`,确认每个文本/图标框真实圈住源图对象。`layout_guard` 只能发现坐标字段不一致,不能发现“bbox 一致但量错对象/量到错误行”的问题;发现错框必须先改 `source_bbox`,再让 `x/y/w/h` 由 bbox 换算。
- [ ] B7c 框架锚点回校:B7a/B7b 通过后,必须再看**最终合成预览中的 `frame.png`**,对贴在框架上的文本做二次校准:分区标题条、面板标题、按钮文字、底部总结条、页脚/横幅、步骤标签等,不只按源图 bbox 放置,还要按生成后的 `frame.png` 标题条/按钮/底栏的视觉中心线或内边距回校。若 `frame.png` 相对源图有轻微漂移,文本应跟随最终 frame 锚点移动;`layout_guard` 通过不代表这些文本已经视觉对位。记录每个被调整文本的 `frame_anchor`(如 `left_panel_title_bar`、`bottom_summary_bar`)、`dy_px` 和原因到 QA 笔记或 layout 旁文件。
- [ ] B8 合成:compose_pptx.py 生成 .pptx,并 --preview-dir 出预览图
- [ ] B9 QA:检查 `imagegen-assets-manifest.json` 中 B2/B3/B4 是否都有 imagegen 后端、生成源、prompt 文件、交付复制路径,且没有 programmatic/local/PIL/SVG/HTML/Canvas/matplotlib 等违规来源;检查 `frame.png` 叠背景后完整对位、线条/圆弧/填充干净,检查 `icons_contact_sheet.png` 无缺边;运行 `visual_compare_qa.py 源图 最终预览 --out-dir ...`,打开 `side_by_side.png`、`blend.png`、`diff_heatmap.png`,用 GPT 视觉对比源图与最终预览,逐项核对:图标无缺失、无重复叠影、无被切断、位置/大小贴合、文字可读;再用 placement_qa.py 在源图和预览图上画 bbox → 至少执行一轮 `layout.json` 回校(先修图标中心点/尺寸,再修文字框/字号/行距,最后修贴框文本的 frame_anchor 偏移)→ 对比整页预览;图标明显偏小/偏大、压字、离源位置漂移,或文字换行/位置不贴合,都不得交付

叠放顺序(从下到上):背景 → 整体框架图(frame) → 元素图标(icons) → 文字(texts)。如果用户明确要求框架切分,则顺序为:背景 → 框架部件(icons[]role:"frame_part") → 元素图标(icons) → 文字(texts)。默认不使用 shapes;除非用户明确要求原生形状重建,否则 shapes 不得承载任何视觉内容。

关键命令

# B0 本次任务隔离目录(<task-slug> 用源图名或用户任务名的安全短名)
mkdir -p "$PWD/image2pptx_runs"
export RUN_ROOT="$(mktemp -d "$PWD/image2pptx_runs/$(date +%Y%m%d-%H%M%S)_<task-slug>_XXXXXX")"
mkdir -p "$RUN_ROOT/editable/01/icons" "$RUN_ROOT/editable/01/prompts" "$RUN_ROOT/out/preview"

# B1 探色(含绿则推荐改非绿底色)
python3 scripts/probe_palette.py "$RUN_ROOT/editable/01/slide-01.png"

# B5 去底(框架图 + 图标图都去底,保色保线)→ 默认保留整张 frame.png + 图标切片 → 合到灰底自检
python3 scripts/chroma_key.py --input "$RUN_ROOT/editable/01/frame_raw.png" --out "$RUN_ROOT/editable/01/frame.png" --preset frame-safe --scale 2 --force
python3 scripts/chroma_key.py --input "$RUN_ROOT/editable/01/icons_raw_1.png" --out "$RUN_ROOT/editable/01/icons_t_1.png" --preset icon-safe --scale 2 --force
python3 scripts/slice_grid.py "$RUN_ROOT/editable/01/icons_t_1.png" "$RUN_ROOT/editable/01/icons" --auto --pad 24 --contact-sheet --prefix ic
# 非绿底:--auto-key none --key-color "#ff00ff";只有严格等分且元素居中时才用 --grid 4x4

# 可选:仅当用户明确要求框架切分/框架部件可移动时执行
mkdir -p "$RUN_ROOT/editable/01/frame_parts"
python3 scripts/slice_grid.py "$RUN_ROOT/editable/01/frame.png" "$RUN_ROOT/editable/01/frame_parts" --components --pad 0 --contact-sheet --prefix fp
python3 scripts/frame_parts_to_icons.py "$RUN_ROOT/editable/01/frame_parts/icons_manifest.json" --ref-width <源图宽px> --ref-height <源图高px> --out "$RUN_ROOT/editable/01/frame_parts/frame_parts_layout_icons.json"

# B8 合成 + 预览 + 摆放 QA
python3 scripts/layout_guard.py "$RUN_ROOT/editable/01/slide-01.png" "$RUN_ROOT/editable/01/layout.json" --strict
python3 scripts/placement_qa.py "$RUN_ROOT/editable/01/slide-01.png" "$RUN_ROOT/editable/01/layout.json" --slide-index 1 --out-dir "$RUN_ROOT/editable/01/qa-source-boxes"
python3 scripts/compose_pptx.py "$RUN_ROOT/editable/01/layout.json" "$RUN_ROOT/out/<task-slug>.pptx" --preview-dir "$RUN_ROOT/out/preview"
python3 scripts/placement_qa.py "$RUN_ROOT/editable/01/slide-01.png" "$RUN_ROOT/editable/01/layout.json" --slide-index 1 --preview "$RUN_ROOT/out/preview/slide_01.png" --out-dir "$RUN_ROOT/editable/01/qa-placement"
python3 scripts/visual_compare_qa.py "$RUN_ROOT/editable/01/slide-01.png" "$RUN_ROOT/out/preview/slide_01.png" --out-dir "$RUN_ROOT/editable/01/qa-visual"

要点:

  • 目录隔离:每次转换必须先建唯一 RUN_ROOT,所有 background.pngframe_raw.pngframe.png、可选的 frame_parts/icons_raw_*.pnglayout.jsonimagegen-assets-manifest.json、预览图和最终 PPTX 都在 RUN_ROOT 下;不要读写工作区固定同名目录。
  • imagegen 必须传图且作为 edit target:每页每次生成 B2/B3/B4 之前,先 view_image 当前源图,让源图成为 imagegen 可用的可见编辑目标;prompt 中写“以刚刚显示的这张图片作为唯一编辑目标 / edit target,在它的基础上提取或擦除生成目标层”。不要只写 /path/to/slide.png,本地路径文本不是传图;也不要只把源图当作风格参考。
  • 抠图底色:默认纯绿 #00ff00;B1 报告含绿则改非绿(如品红 #ff00ff),B3/B4 出图底色与 B5 --key-color 同步。
  • 图片层来源background.pngframe_raw.pngicons_raw_*.png 必须是 imagegen 生成图;不得来自 PPT 色块绘制、代码绘图或原图局部裁切。
  • 不做历史源页搜索:除非用户明确要求复用旧文件,否则不要为了转换图片而扫描当前目录或历史 outputs/ 寻找相似源页;直接处理用户给出的当前图片。
  • B3 提示词固定:框架图生成 prompt 固定为“生成一张图片,提取这张图片中的框架图,纯色背景,背景色值为XXXXXX,「框架图」= 原图里除背景/图标/装饰/艺术字/普通文本外的一切(容器轮廓与底色填充/标题条/辉光、分隔/连接线、全部图表图形:折线/柱状/阶梯/饼图/坐标网格/趋势线、缎带/装饰)→ 形状·大小·位置与原图 1:1 一致,保留原色与填充,别漏数据折线/装饰、别自己额外加空心线框、占位框;不要出现文字、不要出现图标;”。只替换 XXXXXX 为 B1 选出的背景色值。
  • 框架图保真与默认整图:框架图 = 除背景/图标/装饰/艺术字/普通文本外的一切(含全部图表图形与装饰),连同卡片底色填充/标题条/辉光/渐变一起提取——抠出的框架合到背景上应≈原图去掉普通文本、图标和艺术字,且与原图 1:1 一致。别漏标题下短线、卡片顶部色条、下划线、数据折线/阶梯/饼图、坐标轴/网格线、缎带装饰。不能额外添加原图没有的占位框、线框。去底后的 frame.png 默认作为整体框架视觉层放入 PPT;只有用户明确要求框架切分时,才按透明连通区域切成 frame_parts/ 并以 icons[] role:"frame_part" 放入 PPT。
  • 图标生成前先去重:B3 之后必须看 frame.png 叠背景的预览,列出已经出现在 frame 的图标/装饰;B4 只生成 frame 中没有的元素。若某元素已经在 frame 里且位置正确,就不要再放进 icons[],否则会出现重叠双影。
  • 图标/艺术字切片保边:一张图里生成多个图标可以保留,但必须留足空隙;切片优先 slice_grid.py --auto --pad 24 --contact-sheet,固定网格只在元素严格居中时用。必须查看 icons_contact_sheet.png:任一图标缺角、缺边、被裁半截、或 manifest 里任一 edge_touch 为 true,说明边框可能被切坏,必须重出图标表(加大格子/留白/拆成多张)或重切,不能交付。
  • 图标缺失硬门禁:最终预览必须和源图并排做视觉核对,源图中每个普通图标/装饰/艺术字必须满足二选一:已在 frame 中正确出现,或已在 icons[] 中正确摆放。不能因为图标层偏移、遮挡或难切就从最终 layout 删除图标后交付。
  • 坐标契约硬门禁ref_width/ref_height 必须写源图实际像素尺寸;source_bbox 也必须是同一源图像素坐标。view_image、浏览器截图、PPT 预览 PNG 常常是缩略图,不是源图坐标系;若在缩略图上量到坐标,必须按 scale_x=源图宽/缩略图宽scale_y=源图高/缩略图高 分别换回源图像素,并同步缩放 size_px。禁止把 2048px 预览坐标和 4096px 源图尺寸混用,尤其禁止 x 已按源图估、y 仍停留在缩略图高度,结果会让文字/图标全部挤到 PPTX 上半部分。layout_guard.py --strict 不负责判断视觉对位,视觉对位必须看最终合成预览与源图。
  • 源图框视觉硬门禁layout_guard 通过只表示 bbox 与 fraction 数学一致,不表示 bbox 量对了对象。合成前必须打开 qa-source-boxes/slide_01_source_boxes.png,逐项确认文本/图标框覆盖源图真实位置;像“关键动作”这种文本框若圈到上方流程区而非底部按钮,即使 guard 通过也必须重测。
  • 框架锚点回校硬门禁source_bbox 对了仍可能错位,因为 B3 的 frame.png 是 imagegen 生成层,标题条、按钮、底栏可能相对源图有轻微纵向/横向漂移。凡是贴在框架上的文本(分区标题、按钮文字、底栏总结、页脚横幅、卡片标题)必须在最终预览里按 frame.png 的视觉锚点再次回校:以标题条/按钮/底栏的中心线、内边距或框内留白为准,必要时整体下移/上移几个到几十个源图像素,并记录 frame_anchordx/dy_px。这一步在 layout_guard --strict 之后执行。
  • 摆放坐标精度:默认用比例坐标。先在源图上量 x/y/w/h 像素 bbox,再按 x/ref_widthy/ref_heightw/ref_widthh/ref_height 写入 layout.json,并设置 units:"fraction"。保留 source_bbox:[x_px,y_px,w_px,h_px] 方便 QA。
  • 图标/艺术字尺寸定位对照原图逐个量出 x/y/w/h 像素 bbox,再换算成比例写进 layout.json(manifest 只有素材表尺寸,没有原图位置;用宽高比定 h、别给方形);摆放后必须跑 placement_qa.py,在源图和预览图上看 bbox 是否压准,不能只看最终 PPT 预览。
  • 图标预览回校硬门禁:首次预览后必须逐个图标检查“预览视觉 bbox vs 源图视觉 bbox”。若偏小/偏大,按中心点锚定调整:new_x = cx - new_w/2new_y = cy - new_h/2;不得只改 w/h 导致图标漂移,也不得按切片素材原始尺寸直接摆。图标与文字重叠时,优先恢复源图相对位置;若源图无重叠而预览重叠,必须改图标或文字 bbox 后重跑 B8/B9。
  • 最终视觉对位硬门禁:必须打开 qa-visual/side_by_side.pngqa-visual/blend.pngqa-visual/diff_heatmap.png,用 GPT 视觉判断合成 PPTX 预览里的文字和图标是否与原始 PPT 图片对应。页面内容只在上半页、下半页或局部区域都可以;判断标准是源图中对应对象的位置/大小/相对关系是否一致,而不是元素覆盖了页面多少高度。
  • 生成证据:每页必须包含 imagegen-assets-manifest.json,记录背景、框架图、图标表的真实 imagegen 生成源路径、后端和 prompt 文件;缺失、prompt_file:null、或显示程序生成来源即不合格。
  • 文字抽取:用 GPT 视觉直接看原图,按 texts[] JSON schema 输出逐段文本和像素位置样式;禁止把外部 OCR 输出当最终文本结果。长文本框 bbox 要覆盖原文字整块,不要用视觉中心点估算。
  • 文字位置回校:最终预览里的文本必须与源图的文本块左/中/右边界、首行基线、换行节奏和相邻图标间距一致。若可编辑字体与源图手写字体宽度不同,优先微调 w/h 比例、size_ratio/size_pctline_spacingalign,不要为了避开错位把图标删除或缩小到不符合源图。文字回校顺序固定为:先定 bold / 字号 / line_spacing,再修 bbox;否则全粗体或行距变化会改变字宽、换行和视觉高度,导致刚校准过的位置再次漂移。
  • 坐标/字号:layout.json 推荐 units:"fraction";字号推荐 size_ratio = 源图实际文字高度像素 / ref_height,compose 时换算为 pt = size_ratio × (页高in×72)。旧字段 size_px/size 仍兼容,但 size_px 必须是源图实际像素,不是 2048px 预览测量值;若需要正常 PowerPoint 号数,直接写 size 绝对 pt 更稳。反推公式:size_px = 目标pt × ref_height / (页高in×72)
  • 文字粗细硬门禁bold 默认 false;不得为了“更像截图”把所有 texts[] 都设成 bold:true。只有标题、按钮标题、重点数字/关键词按原图加粗;普通正文和说明段默认常规字重。layout_guard --strict 会对疑似全粗体正文报错,除非原图确实全粗体并显式写 allow_all_bold_text:true
  • 多页:把每页 slides[] 汇进一个 deck.json 一次合成整本。
  • 交付:最终答复必须给出可点击的最终 .pptx 绝对路径;若另存了便捷副本,也同时给出 RUN_ROOT 内原始输出路径和副本路径。

脚本与依赖

脚本 干嘛
scripts/probe_palette.py 探测某页是否含绿,推荐安全抠图底色
scripts/chroma_key.py 保色保线/保形抠图:绿幕(或指定底色)变透明,不褪色;预设会增强抗锯齿边缘并修补细小 alpha 断点,配合 --scale 2 超采样,避免横竖线和圆弧被抠毛
scripts/slice_grid.py --grid N×N--auto 把透明图标表切成单个图标;可选 --components 按透明连通区域把框架图切成可移动框架部件;产出 manifest
scripts/frame_parts_to_icons.py 可选框架切分辅助:把 frame_parts/icons_manifest.json 的 bbox 映射到源图坐标,生成可直接并入 layout.icons[]role:"frame_part" 条目,保证框架部件按原 frame.png 布局拼回
scripts/layout_guard.py 合成前校验坐标契约:源图实际尺寸、ref_width/ref_heightsource_bboxx/y/w/h 是否一致;可把同宽高比缩略图坐标归一化回源图像素;不做页面覆盖高度启发式判断
scripts/placement_qa.py 把 layout 的图标/文本 bbox 画回源图和预览图,生成摆放 QA 标注图与源/预览叠图
scripts/visual_compare_qa.py 把源图和最终 PPTX 预览统一尺寸后输出并排图、叠图、差异热图和诊断指标,用于 GPT 视觉核对文字/图标是否真正对位
scripts/compose_pptx.py 把 背景+整体框架图(frame)+图标(icons)+文字(texts) 按 layout/deck.json 合成可编辑 .pptx,--preview-dir 出预览;用户要求框架切分时也支持 frame_parts;默认不使用 shapes 承载视觉内容
  • 依赖:python3 + python-pptxPillownumpy(缺就 pip3 install python-pptx pillow numpy)。
  • 输入若是"图片型 PPT",通常由 GordenImagePPTGen 产出;要一键"先出图再转可编辑" → 用 GordenSuperPPTSkill
将主题或内容转化为图片型PPT,每页通过imagegen生成含真实文字的高密度幻灯片图并合成pptx。严禁代码绘图,强制高信息密度与复杂排版,需遵循严格的工作流与数据零编造原则。
做 PPT 生成图片版 PPT AI 出图幻灯片 把内容做成 PPT 图片
GordenImagePPTGen/SKILL.md
npx skills add GordenSun/GordenSuperPPTSkills --skill GordenImagePPTGen -g -y
SKILL.md
Frontmatter
{
    "name": "GordenImagePPTGen",
    "description": "调用 GPT imagegen技能生成「图片格式的 PPT 文档」——每页一张高信息密度、排版复杂、风格统一的幻灯片图(默认科技商务\/高密度信息图, 也支持简洁\/卡通\/水墨\/科技等任意风格),并合成为每页一张全幅图片的 .pptx。Generates image-based slide decks (one rendered image per slide) from a topic or content. 当用户要\"做 PPT \/ 生成图片版 PPT \/ AI 出图幻灯片 \/ 把内容做成 PPT 图片\"时使用。本技能**只产出图片型 PPT**(每页 .png + 合成的 .pptx);若还要可编辑 pptx,接着用 GordenImage2PPTX。"
}

GordenImagePPTGen — 生成图片格式的 PPT

把主题/内容变成「图片型 PPT」:设计 → 出图 → 合成。每页是一张由imagegen生成的图片。必须使用图片生成,不能通过SVG绘制,必须调用图片生成模型。

内容 ─▶ A2 设计大纲(outline.json) ─▶ A3 每页提示词 ─▶ A4 GPT imagegen 出图 ─▶ A5 合成图片型 .pptx

运行时与图片后端(先读)

图片生成的调用方式因运行时而异,动手前先读 references/runtime-notes.md。核心约定:

  1. 图片一律用 raster 图像生成后端(Codex 必须调用内置 imagegen;其它运行时用其原生出图工具)。禁止用 SVG/HTML/Canvas/代码画图冒充。
  2. 禁止在已生成的位图上用代码补字/盖字/改字。文字错了没关系,后续改成可编辑pptx后支持手动修改。
  3. Codex 内置工具出的图默认在 $CODEX_HOME/generated_images/用完务必复制到本任务输出目录,并保留默认目录原图。
  4. 阶段 A4 必须写 imagegen-manifest.json,逐页记录模型生成源图与复制后的 slide 路径;没有 manifest 或任一页缺 generated_source,本技能执行失败。

imagegen 硬门禁

本技能中的“生成图片”只指调用图像生成模型,不指用代码画 PNG。

禁止使用以下方式生成整页幻灯片图:

  • Python/PIL、SVG、HTML、Canvas、matplotlib、PowerPoint shapes、截图渲染。
  • 先生成可编辑 PPTX,再导出为图片。
  • 用代码绘制页面骨架、图表、图标、文字并保存为 PNG。

允许代码做的事仅限:

  • outline.jsonprompts/NN-*.mdimagegen-manifest.jsondeck.json
  • $CODEX_HOME/generated_images/<thread-id>/...png 复制已生成图片到 slides/
  • 裁切/缩放整张已生成图片以统一比例(不得补字或重画局部内容)。
  • 合成图片型 PPTX、生成预览、做 QA 检查。

如果 imagegen 不可用,必须停止并说明阻塞原因,不能用代码绘图兜底。

全局铁律

  1. 🔴 绝不出占位符图:本技能产出的是含全部真实文字(verbatim)的成品幻灯片图,不是空模板。出图提示词的【页面文字】必须写满真实文字;outline.jsonvisual_generation_prompt(只描述画面)禁止单独出图,必须与全部文字合并后再出(详见 image-prompt-guide 文首铁律)。出现 lorem/占位框/无字卡片即判失败、改提示词重出。
  2. 数据零编造:完全使用用户提供的数据/数值/专名。数据少就把内容做厚(真实的结构化拆解)+ 大字号/中心聚焦排版,绝不编造或填充虚假内容。
  3. 语言跟随用户:问答用用户语言;幻灯片内文字用内容语言(默认中文)。
  4. 少用绿色:尽量避免大面积纯绿(下游 GordenImage2PPTX 默认绿幕抠图会冲突)。
  5. 页脚干净:不加页码/logo/水印(除非用户要求)。

默认风格与复杂度

默认 = 信息密度极高、排版复杂、模块化网格、每页一个不重复的高阶框架(房子型/莫比乌斯环/Bento 便当盒/同心雷达/多层架构/鱼骨/漏斗/3D 阶梯等)。简单 = 不合格。完整提示词体系、复杂度强制清单、风格库、图表形式目录、verbatim 规则见 references/image-prompt-guide.md

  • 内容优先(最易踩坑):「排版太简单」几乎都是每页内容太薄先备厚内容、再出图:每页 ≥4 个并列模块、每模块 标题+2~3 要点+1 个特大号指标,外加导语(关键词高亮)+底部横幅(≈20+ 信息点/页)。见 image-prompt-guide §0。
  • 每页不重样 + 统一配色:每页选一个不同的复杂框架;全篇统一一套配色(有参考图就提取其配色)。见 §1.7、§4。
  • 豪华 ≠ 浮夸:清晰永远第一,避免过度辉光/3D 戏剧化导致花哨难读;"清晰科技"是稳妥默认(浅底+细网格+扁平模块+克制强调+高密度)。见 §1.7、§5。
  • 排版参考图库 参考图/:出图前挑结构相近的参考图,把布局骨架写进提示词(也可作 reference 传入后端),可学排版与风格气质,但不照搬其文字/品牌(§1.6)。
  • 比例:跟随用户。默认 16:9;用户要 3:2(或后端原生 3:2 且接受)就直接出 3:2,全套统一、不裁切。见 runtime-notes §5。

工作流(逐项打勾)

- [ ] A1 确认:风格 / 受众 / 页数 / 语言(除非用户说"直接生成/不用确认")
- [ ] A2 大纲(outline.json):解构内容 → 每页指派不重复的复杂框架、统一配色、写厚 detailed_content(见 image-prompt-guide §7 / §1.7)
- [ ] A3 每页提示词:把 outline 落地成 self-contained 提示词(含【全部真实文字 verbatim】),存 prompts/NN-*.md
- [ ] A4 出图:解析后端 → 逐页调用 imagegen 出图(每页含全部真实文字,绝不占位符)→ 复制到输出目录 → 写 imagegen-manifest.json
- [ ] A5 合成:compose_pptx.py 把每页图片做成全幅图片型 .pptx

要点:

  • 页数:用户指定就用;没指定按内容量自定(一般 11–20 页,封面+结尾必有)。
  • A3 提示词自包含:颜色(hex)、版式、全部文字、图表形式、字体风格全写死,便于可复现、单页重出。
  • A4:先确认所有 prompts/NN-*.md 就位再开跑;每页必须有一次真实 imagegen 调用;失败/错字只重试该页;复制源图时保留 $CODEX_HOME/generated_images/... 原图。
  • imagegen-manifest.json:必须逐页记录 slideprompt_filegenerated_sourcecopied_tobackend。这是阶段 1 的验收证据。
  • A5:生成 deck.json(每个 slide 只有 background 指向该页 PNG),跑:
python3 scripts/compose_pptx.py deck.json out/<topic>-image-deck.pptx

输出目录结构

<topic-slug>/
├── outline.json            # A2 设计大纲(逐页结构化)
├── imagegen-manifest.json  # A4 每页 imagegen 生成证据
├── prompts/NN-*.md         # A3 每页出图提示词(可复现)
├── slides/NN-*.png         # A4 生成的每页图片
├── deck.json               # A5 合成清单(每页 background)
└── out/<topic>-image-deck.pptx

脚本与依赖

脚本 干嘛
scripts/compose_pptx.py 把每页图片按 deck.json 合成全幅图片型 .pptx(--preview-dir 可出预览)
  • 依赖:python3 + python-pptxPillow(缺就 pip3 install python-pptx pillow)。
  • 下一步要可编辑 pptx → 用 GordenImage2PPTX;要一键全流程 → 用 GordenSuperPPTSkill
端到端编排PPT生成与还原。串联图片型PPT生成及逆向转可编辑PPTX,交付全套中间产物与成品。适用于用户仅需主题且需兼顾美观与可编辑性的场景。
用户未指定具体功能仅提供主题或内容 用户明确要求生成既美观又可编辑的完整PPT成品
GordenSuperPPTSkill/SKILL.md
npx skills add GordenSun/GordenSuperPPTSkills --skill GordenSuperPPTSkill -g -y
SKILL.md
Frontmatter
{
    "name": "GordenSuperPPTSkill",
    "description": "一键全流程 PPT:先用 GordenImagePPTGen 生成「图片格式的 PPT」,再用 GordenImage2PPTX 把它逆向还原成「可编辑 .pptx」。 打包并依次编排这两个子技能,最终同时交付 图片型 PPT + 可编辑 pptx + 全部中间产物。Orchestrates image-PPT generation and image→editable-PPTX conversion end to end. 当用户只给主题\/内容、要一份\"既好看又能编辑\"的完整 PPT 成品, 或没点名具体功能时使用。"
}

GordenSuperPPTSkill — 端到端 PPT 全流程编排

把两个子技能串起来跑:

内容 ─▶【阶段1 GordenImagePPTGen】图片型 PPT(每页 .png + 图片版 .pptx)
       ─▶【阶段2 GordenImage2PPTX】对每页图片做 背景图+骨架图+元素图标+文本 还原 ─▶ 可编辑 .pptx

本技能本身不重复造轮子——它依次完整执行两个子技能。两个子技能需与本技能同处(同一仓库/同一 skills 目录):

端到端运行手册见 references/pipeline.md

阶段 1 图片生成硬门禁

阶段 1 的“生成图片”只允许解释为:实际调用 Codex 内置 imagegen 图像模型生成每一页幻灯片成品图

禁止用以下方式替代阶段 1 出图:

  • Python/PIL、SVG、HTML、Canvas、matplotlib、PowerPoint shapes、截图渲染。
  • 用代码绘制整页幻灯片图,再把它当作“图片型 PPT”。
  • 先用可编辑 PPTX / 原生 shapes 做页面,再导出为 PNG 充当阶段 1 结果。
  • 用代码在已生成图片上补字、盖字、改字。

Codex 运行时必须满足:

  • 每页都调用一次或多次 imagegen,最终选定一张模型生成图。
  • 生成源图必须来自 $CODEX_HOME/generated_images/<thread-id>/...png
  • 只能把源图复制到本任务 slides/NN-*.png;不要删除默认生成目录中的原图。
  • 必须写入 imagegen-manifest.json,逐页记录 generated_sourcecopied_to

如果 imagegen 不可用,必须停止并说明阻塞原因,不能使用代码绘图兜底。

何时用哪个

用户意图 用哪个技能
「做一份 PPT / 生成图片版 PPT / AI 出图幻灯片」 只用 GordenImagePPTGen
「把这些 PPT 图片/截图转成可编辑 PPTX / 抠图标 / 提取文字」 只用 GordenImage2PPTX
没点名,只给主题/内容要一份能用的成品;或要"既能看又能编辑" 本技能(A→B 串联)
  • 用户明确点名某一功能 → 直接用对应子技能,不必走 Super。
  • 没点名时默认走 Super:先完整出图,再逐页还原为可编辑,最后一次性交付全部产物。

编排流程(逐项打勾)

== 阶段 1:GordenImagePPTGen(完整跑功能 A)==
- [ ] 读 ../GordenImagePPTGen/SKILL.md,按 A1–A5 执行
- [ ] 每页实际调用 imagegen 生成成品图
- [ ] 产出:outline.json、prompts/NN-*.md、imagegen-manifest.json、slides/NN-*.png、图片型 .pptx
- [ ] 铁律:每页图必须含【全部真实文字 verbatim】,绝不出占位符/无字模板图
- [ ] 门禁:没有 imagegen-manifest.json 或任一页缺 generated_source,则阶段 1 失败,不能进入阶段 2

== 阶段 2:GordenImage2PPTX(对阶段1每张图完整跑功能 B)==
- [ ] 读 ../GordenImage2PPTX/SKILL.md,对每页图片按 B1–B9 执行
- [ ] 强制四层:背景图 → 骨架图(绿幕抠图) → 元素图标(绿幕抠图) → 文本(OCR),缺一不可
- [ ] 背景图、骨架图、元素图标图必须由 imagegen 提取式生成
- [ ] 禁止用 PPT 色块、原生 shapes、代码绘图、裁原图局部替代背景/骨架/图标图片层
- [ ] 产出:每页 imagegen-assets-manifest.json + background/frame/icons/layout.json + 合成的可编辑 .pptx

== 交付 ==
- [ ] 一次性交付:① 所有 PPT 图片 ② 每页背景图 ③ 每页骨架图 ④ 每页图标/装饰 ⑤ 每页文本数据(layout.json) ⑥ 图片型 .pptx ⑦ 可编辑 .pptx

关键约束(两阶段都要守)

  1. 🔴 阶段1必须调用 imagegen 出图,绝不用代码绘图替代,且绝不出占位符图;阶段2背景/骨架/图标图片层也必须调用 imagegen 生成,绝不跳过骨架图与元素图标(四层强制)。这两条是上一版退化的根因,务必守住。
  2. 比例统一:A 和 B 全程同一比例(默认 16:9;用户要 3:2 就全套 3:2)。
  3. 配色统一、每页框架不重复(阶段1);抠图保色保线、图标尺寸对照原图(阶段2)。
  4. 数据零编造;语言跟随用户;页脚干净;少用纯绿(绿幕抠图会冲突)。

输出目录结构(建议)

<topic-slug>/
├── outline.json / imagegen-manifest.json / prompts/ / slides/   # 阶段1
├── out/<topic>-image-deck.pptx              # 阶段1 图片型成品
└── editable/                                # 阶段2
    ├── NN/{background.png, frame.png, icons/*.png, layout.json}
    ├── deck.json
    ├── preview/slide_*.png
    └── <topic>-editable.pptx                # 阶段2 可编辑成品

子技能各自自带脚本与 references;本技能只负责编排与交付。若两个子技能不在同处,请先安装它们,或直接分别调用。

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-07-10 06:24
浙ICP备14020137号-1 $Гость$