/figedit
将位图图形重建为高保真可编辑 SVG 与原生 PowerPoint,支持仅文字可编辑、文字/结构/公式可编辑、源图素材保真混合、选择性或完整前景拆分,以及复杂连续背景的 AI 清版底重建。当用户希望把截图、论文插图、流程图、架构图、信息图、UI、图表/地图、海报或封面转成可编辑图形,或提到“图片转可编辑 SVG/PPT”“仅文字可编辑”“图表重建”“FigEdit”时使用。
$ npx -y skills add giszzt/figedit --skill figedit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/figedit
Context preview
The summary Claude sees to decide when to auto-load this skill.
将位图图形重建为高保真可编辑 SVG 与原生 PowerPoint,支持仅文字可编辑、文字/结构/公式可编辑、源图素材保真混合、选择性或完整前景拆分,以及复杂连续背景的 AI 清版底重建。当用户希望把截图、论文插图、流程图、架构图、信息图、UI、图表/地图、海报或封面转成可编辑图形,或提到“图片转可编辑 SVG/PPT”“仅文字可编辑”“图表重建”“FigEdit”时使用。
SKILL.md
figedit.SKILL.mdname: figedit-v2
description: 将位图图形重建为高保真可编辑 SVG 与原生 PowerPoint,支持仅文字可编辑、文字/结构/公式可编辑、源图素材保真混合、选择性或完整前景拆分,以及复杂连续背景的 AI 清版底重建。当用户希望把截图、论文插图、流程图、架构图、信息图、UI、图表/地图、海报或封面转成可编辑图形,或提到“图片转可编辑 SVG/PPT”“仅文字可编辑”“图表重建”“FigEdit”时使用。
FigEdit
把不可编辑的位图图形重建为高保真、可维护、可继续编辑的 SVG 与原生 PPTX 包。
**主流程:勘察 → 备料 → 组装 → 验收。**先判断,后执行。判断阶段不碰坐标也不跑脚本,只回答“每一部分从哪来”;执行阶段才按已定路线调工具。
核心原则
输出画面上的每一块像素只可能有四个来源:
1. **SVG 画的** —— 结构、文字、公式 2. **从源图切的** —— `crop` 3. **AI 生成的** —— 区域清版底(背景)、色键版再生(前景对象) 4. **整块原样保留的** —— `preserve-raster`
路由就是给每一部分指派来源,每部分有且只有一个。指派完成即可开工;指派不全就是漏了东西。
重绘门槛
只有“用三五笔基础图元能画得像”的图形才允许 `redraw`:朴素箭头、方框、分隔线、圆点、加减号、对勾、简单节点圆。有定制轮廓、渐变、阴影、多色细节、品牌或角色身份的对象一律按素材处理(切、再生或压平),哪怕它看起来简单。拿不准时按素材处理,不重画。重画产物必须与源图形状可对照,画不像就是路由错误,不是绘画技术问题。
工作位置
所有命令在用户项目目录运行,每张图建任务目录(`figure-task/work` 证据、`figure-task/out` 交付),绝不写回 skill 目录。Windows 路径用正斜杠,非 ASCII 路径先经文件系统验证。
1 勘察
看一次足够清晰的源图,产出一份**重建路径概要**。这是本阶段唯一的交付物,纯文字,**零坐标**,二十行以内,写给人看。槽位固定,缺项写“无”:
图型与分区 每个区域一行:这是什么、底子从哪来
需要生成的 清版底张数 + 色键版张数 = 计费调用总数,或“无”
不可重画的对象 可直接裁的一堆、需再生的一堆,按名字和位置点出来,或“无”
公式 有无、大致数量 → 验证档位
工作量重心 这张图的时间主要花在哪
需要用户定 具体问题,或“无”
对象用名字和空间关系指认(“标题右边那个地球仪,骑在面板边框上”),不写 bbox。坐标属于备料阶段。
概要写完路线即锁定,后续不翻案。写不出“工作量重心”说明没看懂图;“不可重画的对象”分不出两堆说明污染扫描没做。
图型速查表(按区域查,不是按整图)
| 看到的 | 底子从哪来 | 里面的对象从哪来 | | -------------------- | -------- | --------------------------------- | | 白底或平色底的流程图、架构图、论文插图 | SVG 画 | 通用图元画;专有图标按窗口干净与否切或再生 | | 多面板拼接的复合图 | 每个面板分别查 | 同上,按面板成批扫 | | 截图、图表主体、缩略图网格,内部不需要改 | 整块保留 | 不拆 | | 地图、照片、插画上压着要改的标注 | 区域 AI 清版 | 要能单独动的再生;不用动的压平进底板 | | 海报、封面、场景图,文字压在连续画面上 | AI 清版 | 同上 | | 公式密集的论文图 | 按上面几行查底子 | 公式一律 `math`,验证档锁 `pptx-triggered` |
一张图的不同区域各查各的,不要用一个标签盖住整幅。判不准时回到四来源指派。
素材两堆
过不了重绘门槛的对象只分两堆,一次扫完,不逐个走流程:
- **窗口干净的** → 切。轮廓完整、四周无异物、外接矩形不含别人的像素。
- **被压盖的** → 边框、文字、箭头、连接线、邻居穿过或遮住它。需要单独动就再生;不需要单独动且落在清版区就压平进底板。确定性 SVG 区没有底板可压,那里的污染对象只能再生。
判据细则见 `references/routing.md`,元素语义见 `references/element_decision_matrix.md`。
编辑深度与提问
用户原话优先:说“仅文字可编辑”锁 `text-only`(连续场直接压平);点名对象锁 `selective-assets`;要求全部可动锁 `full-extract`;检出公式且用户未表态时默认 `text+structure` 并锁 `pptx-triggered`。
**提问一次问完。**概要写完后若有待决项,把前景深度选项、生成预算和 PPTX 附着预授权(含公式时)合并成一次提问。只有不同选择会显著改变费用或交付能力时才问;能自己定的不问。拿到附着预授权后验收阶段直接用 `--allow-attach`,不再二次提问。
**用户确认前不得发起任何计费生成调用,也不得裁剪或合成。**OCR 不在此列,见下。
2 备料
按概要指派的来源把素材做出来。开头无条件先跑一次取证——不计费、输出无论走哪条路都要用,可以和提问并行。新任务用 `--init` 一并建目录:
python scripts/prepare_measurements.py input.png --init figure-task
一次跑出 OCR、风格采样和结构证据(`work/geometry.json`:面板 bbox 与颜色、每行文字的槽位与字号色值)。画布尺寸、OCR 条数、面板与文字槽数量、低置信文字清单直接打印在屏幕上,**不要再写代码去读这些 JSON**。看一次 `work/diagnostics/geometry_overlay.png` 做整体校验,别逐框打开。
**此后任何像素问题都走 `measure.py`,一次问完。**紧边界、区域颜色、四边净空、透明图边界、反算字号、两图对齐残差,还有"我想看看这块长什么样",都是它的查询类型。一次问十个和问一个花的时间一样,问完拿到一张数字表加一张放大拼图。**不要手写 `python -c` 数像素,也不要自己裁图存盘再打开看。**
python scripts/measure.py input.png --exclude-text figure-task/work/ocr_results.json --q "logo:bbox@1850,1600,300,240" "hdr:color@0,0,2400,180" "t1:fontfit@340,881,275,31" "card:zoom@1290,1550,360,300" --sheet figure-task/work/measure_sheet.png
量图标一律带 `--exclude-text`。粗窗口几乎总会把旁边的标题文字圈进来,不排除就会量成"图标加标题"的外接矩形。量得结果会用红框画在拼图上,一眼能看出量对没量对。
**结构证据是候选不是结论,也不改路由。**勘察锁定的路线不因为看到 overlay 就翻案。照片、插画、海报这类非平面设计图会标 `abstained: true` 并只给极少候选,这是设计行为:那里本就没有面板可找,该由人工量或走清版。各项候选的可信程度见 `references/scripts.md`。
以下分支按概要执行,互不依赖,能并行就并行。**概要没指派到的分支直接跳过**——纯 SVG 图不跑任何生成,纯清版压平图不跑任何裁剪。
确定性 SVG 图(白底流程图、架构图、论文插图,无 crop 无生成)三个分支一个都不进:备料就是上面那条取证命令加若干 `measure.py` 查询,跑完直接进组装。这类图的时间应当以分钟计。
有 crop 素材
此时才为这些对象点粗框(一眼精度,允许 10–20px 偏差),写进 `work/inventory.json`,只含走切或再生的对象;文字框来自 OCR,结构框在组装时确定,都不进来。路线已锁,点框是执行动作。
python scripts/snap_boxes.py input.png --inventory figure-task/work/inventory.json --exclude-text figure-task/work/ocr_results.json --out figure-task/work/snap_report.json --sheet figure-task/work/snap_sheet.png
看一次 `snap_sheet.png` 总览。判定写进各资产的 `crop_window`,人工只复看脚本点名项:`contaminated` 的改路由(改走再生或压平),`snap-failed`、带 warning 的和概要点名看不清的用 `inspect_regions.py` 局部放大。三值语义——`clean` 窗口余量是画布底色;`clean-on-fill` 余量是单一均匀实色且四边有净空,manifest 用同色重画承载面;`contaminated` 不得继续切。`quality_audit.py` 的事后核验是兜底。切图由 `crop_assets.py` 在组装时执行。
有清版区
`prepare_clean_plate_mask.py` 准备掩膜,生成区域底板,`check_plate_registration.py` 验配准(scale ≈ 1.00 / offset ≈ 0)。底板必须是对源区域的编辑——移除待重建前景并补全其后像素,其余保持对齐和身份一致,不是新场景。细则见 `references/background_reconstruction.md` 与 `references/image_generation.md`。
有再生对象
`probe_palette.py --boxes` 定键色与 sheet 数,生成色键版,`chroma_key.py` 抠出,`slice_grid.py` 切分。全部候选合并到尽量少的 sheet 上,重复元素只生成一次、按共享 id 多处放置。细则见 `references/chroma_regeneration.md`。禁止 rembg、GrabCut、阈值抠图等即兴替代。
无可用图像后端或底板不合格时停止并报告,不静默降级。
**生成是长杆,不要干等。**调用发出后立即并行推进文字清单、连接线和 manifest 草稿。
3 组装
必读 `references/manifest_spec.md`、`references/svg_authoring.md`、`references/quality_checklist.md`,脚本接口查 `references/scripts.md`,其余按路线加载(各文件开头有适用说明)。公式密集图必读 `references/formula-reconstruction.md`。把勘察结论记进 manifest 顶层 `reconstruction_plan`,写文字 `retype`、公式拆 `math`、结构 `redraw`、素材按备料结果落 `decision` 与 `crop_window`。
**首版允许用一次性生成器写出来**,元素多时这是正当做法。生成器写完 manifest 落盘后立即改名 `*.py.retired` 退场,后续修改一律走 `manifest_edit.py`——生成器留着会覆盖手工修复。
文字和面板可以先采纳草稿再改,比从零写快:
python scripts/draft_elements.py figure-task/work/geometry.json --out figure-task/work/draft_elements.json
python scripts/manifest_edit.py manifest.json --adopt figure-task/work/draft_elements.json
python scripts/compose_svg_package.py manifest.json --out figure-task/out --stage svg
**采纳即担责,采纳后必须立即 compose 一次并看差异热力图。**这是唯一的审阅路径:逐条读草稿 JSON 比手写还慢,看一张合成图错的地方自己会浮出来。草稿的 `font_size` 和 `fill` 是估计值,靠 `fit_text.py` 和视觉比对收敛,和手写值一样要改。审阅完清掉 `provenance` 或置 `review_status`,否则质量门会拦。
修复走批量通道,不手编大 JSON、不写临时 patch 脚本:
python scripts/manifest_edit.py manifest.json --apply-snap figure-task/work/snap_report.json
python scripts/manifest_edit.py manifest.json --set "label-3,label-4:y+=4"
Read more
name: figedit-v2 description: 将位图图形重建为高保真可编辑 SVG 与原生 PowerPoint,支持仅文字可编辑、文字/结构/公式可编辑、源图素材保真混合、选择性或完整前景拆分,以及复杂连续背景的 AI 清版底重建。当用户希望把截图、论文插图、流程图、架构图、信息图、UI、图表/地图、海报或封面转成可编辑图形,或提到“图片转可编辑 SVG/PPT”“仅文字可编辑”“图表重建”“FigEdit”时使用。
FigEdit
把不可编辑的位图图形重建为高保真、可维护、可继续编辑的 SVG 与原生 PPTX 包。
**主流程:勘察 → 备料 → 组装 → 验收。**先判断,后执行。判断阶段不碰坐标也不跑脚本,只回答“每一部分从哪来”;执行阶段才按已定路线调工具。
核心原则
输出画面上的每一块像素只可能有四个来源:
1. **SVG 画的** —— 结构、文字、公式 2. **从源图切的** —— `crop` 3. **AI 生成的** —— 区域清版底(背景)、色键版再生(前景对象) 4. **整块原样保留的** —— `preserve-raster`
路由就是给每一部分指派来源,每部分有且只有一个。指派完成即可开工;指派不全就是漏了东西。
重绘门槛
只有“用三五笔基础图元能画得像”的图形才允许 `redraw`:朴素箭头、方框、分隔线、圆点、加减号、对勾、简单节点圆。有定制轮廓、渐变、阴影、多色细节、品牌或角色身份的对象一律按素材处理(切、再生或压平),哪怕它看起来简单。拿不准时按素材处理,不重画。重画产物必须与源图形状可对照,画不像就是路由错误,不是绘画技术问题。
工作位置
所有命令在用户项目目录运行,每张图建任务目录(`figure-task/work` 证据、`figure-task/out` 交付),绝不写回 skill 目录。Windows 路径用正斜杠,非 ASCII 路径先经文件系统验证。
1 勘察
看一次足够清晰的源图,产出一份**重建路径概要**。这是本阶段唯一的交付物,纯文字,**零坐标**,二十行以内,写给人看。槽位固定,缺项写“无”:
图型与分区 每个区域一行:这是什么、底子从哪来 需要生成的 清版底张数 + 色键版张数 = 计费调用总数,或“无” 不可重画的对象 可直接裁的一堆、需再生的一堆,按名字和位置点出来,或“无” 公式 有无、大致数量 → 验证档位 工作量重心 这张图的时间主要花在哪 需要用户定 具体问题,或“无”
对象用名字和空间关系指认(“标题右边那个地球仪,骑在面板边框上”),不写 bbox。坐标属于备料阶段。
概要写完路线即锁定,后续不翻案。写不出“工作量重心”说明没看懂图;“不可重画的对象”分不出两堆说明污染扫描没做。
图型速查表(按区域查,不是按整图)
| 看到的 | 底子从哪来 | 里面的对象从哪来 | | -------------------- | -------- | --------------------------------- | | 白底或平色底的流程图、架构图、论文插图 | SVG 画 | 通用图元画;专有图标按窗口干净与否切或再生 | | 多面板拼接的复合图 | 每个面板分别查 | 同上,按面板成批扫 | | 截图、图表主体、缩略图网格,内部不需要改 | 整块保留 | 不拆 | | 地图、照片、插画上压着要改的标注 | 区域 AI 清版 | 要能单独动的再生;不用动的压平进底板 | | 海报、封面、场景图,文字压在连续画面上 | AI 清版 | 同上 | | 公式密集的论文图 | 按上面几行查底子 | 公式一律 `math`,验证档锁 `pptx-triggered` |
一张图的不同区域各查各的,不要用一个标签盖住整幅。判不准时回到四来源指派。
素材两堆
过不了重绘门槛的对象只分两堆,一次扫完,不逐个走流程:
- **窗口干净的** → 切。轮廓完整、四周无异物、外接矩形不含别人的像素。
- **被压盖的** → 边框、文字、箭头、连接线、邻居穿过或遮住它。需要单独动就再生;不需要单独动且落在清版区就压平进底板。确定性 SVG 区没有底板可压,那里的污染对象只能再生。
判据细则见 `references/routing.md`,元素语义见 `references/element_decision_matrix.md`。
编辑深度与提问
用户原话优先:说“仅文字可编辑”锁 `text-only`(连续场直接压平);点名对象锁 `selective-assets`;要求全部可动锁 `full-extract`;检出公式且用户未表态时默认 `text+structure` 并锁 `pptx-triggered`。
**提问一次问完。**概要写完后若有待决项,把前景深度选项、生成预算和 PPTX 附着预授权(含公式时)合并成一次提问。只有不同选择会显著改变费用或交付能力时才问;能自己定的不问。拿到附着预授权后验收阶段直接用 `--allow-attach`,不再二次提问。
**用户确认前不得发起任何计费生成调用,也不得裁剪或合成。**OCR 不在此列,见下。
2 备料
按概要指派的来源把素材做出来。开头无条件先跑一次取证——不计费、输出无论走哪条路都要用,可以和提问并行。新任务用 `--init` 一并建目录:
python scripts/prepare_measurements.py input.png --init figure-task
一次跑出 OCR、风格采样和结构证据(`work/geometry.json`:面板 bbox 与颜色、每行文字的槽位与字号色值)。画布尺寸、OCR 条数、面板与文字槽数量、低置信文字清单直接打印在屏幕上,**不要再写代码去读这些 JSON**。看一次 `work/diagnostics/geometry_overlay.png` 做整体校验,别逐框打开。
**此后任何像素问题都走 `measure.py`,一次问完。**紧边界、区域颜色、四边净空、透明图边界、反算字号、两图对齐残差,还有"我想看看这块长什么样",都是它的查询类型。一次问十个和问一个花的时间一样,问完拿到一张数字表加一张放大拼图。**不要手写 `python -c` 数像素,也不要自己裁图存盘再打开看。**
python scripts/measure.py input.png --exclude-text figure-task/work/ocr_results.json --q "logo:bbox@1850,1600,300,240" "hdr:color@0,0,2400,180" "t1:fontfit@340,881,275,31" "card:zoom@1290,1550,360,300" --sheet figure-task/work/measure_sheet.png
量图标一律带 `--exclude-text`。粗窗口几乎总会把旁边的标题文字圈进来,不排除就会量成"图标加标题"的外接矩形。量得结果会用红框画在拼图上,一眼能看出量对没量对。
**结构证据是候选不是结论,也不改路由。**勘察锁定的路线不因为看到 overlay 就翻案。照片、插画、海报这类非平面设计图会标 `abstained: true` 并只给极少候选,这是设计行为:那里本就没有面板可找,该由人工量或走清版。各项候选的可信程度见 `references/scripts.md`。
以下分支按概要执行,互不依赖,能并行就并行。**概要没指派到的分支直接跳过**——纯 SVG 图不跑任何生成,纯清版压平图不跑任何裁剪。
确定性 SVG 图(白底流程图、架构图、论文插图,无 crop 无生成)三个分支一个都不进:备料就是上面那条取证命令加若干 `measure.py` 查询,跑完直接进组装。这类图的时间应当以分钟计。
有 crop 素材
此时才为这些对象点粗框(一眼精度,允许 10–20px 偏差),写进 `work/inventory.json`,只含走切或再生的对象;文字框来自 OCR,结构框在组装时确定,都不进来。路线已锁,点框是执行动作。
python scripts/snap_boxes.py input.png --inventory figure-task/work/inventory.json --exclude-text figure-task/work/ocr_results.json --out figure-task/work/snap_report.json --sheet figure-task/work/snap_sheet.png
看一次 `snap_sheet.png` 总览。判定写进各资产的 `crop_window`,人工只复看脚本点名项:`contaminated` 的改路由(改走再生或压平),`snap-failed`、带 warning 的和概要点名看不清的用 `inspect_regions.py` 局部放大。三值语义——`clean` 窗口余量是画布底色;`clean-on-fill` 余量是单一均匀实色且四边有净空,manifest 用同色重画承载面;`contaminated` 不得继续切。`quality_audit.py` 的事后核验是兜底。切图由 `crop_assets.py` 在组装时执行。
有清版区
`prepare_clean_plate_mask.py` 准备掩膜,生成区域底板,`check_plate_registration.py` 验配准(scale ≈ 1.00 / offset ≈ 0)。底板必须是对源区域的编辑——移除待重建前景并补全其后像素,其余保持对齐和身份一致,不是新场景。细则见 `references/background_reconstruction.md` 与 `references/image_generation.md`。
有再生对象
`probe_palette.py --boxes` 定键色与 sheet 数,生成色键版,`chroma_key.py` 抠出,`slice_grid.py` 切分。全部候选合并到尽量少的 sheet 上,重复元素只生成一次、按共享 id 多处放置。细则见 `references/chroma_regeneration.md`。禁止 rembg、GrabCut、阈值抠图等即兴替代。
无可用图像后端或底板不合格时停止并报告,不静默降级。
**生成是长杆,不要干等。**调用发出后立即并行推进文字清单、连接线和 manifest 草稿。
3 组装
必读 `references/manifest_spec.md`、`references/svg_authoring.md`、`references/quality_checklist.md`,脚本接口查 `references/scripts.md`,其余按路线加载(各文件开头有适用说明)。公式密集图必读 `references/formula-reconstruction.md`。把勘察结论记进 manifest 顶层 `reconstruction_plan`,写文字 `retype`、公式拆 `math`、结构 `redraw`、素材按备料结果落 `decision` 与 `crop_window`。
**首版允许用一次性生成器写出来**,元素多时这是正当做法。生成器写完 manifest 落盘后立即改名 `*.py.retired` 退场,后续修改一律走 `manifest_edit.py`——生成器留着会覆盖手工修复。
文字和面板可以先采纳草稿再改,比从零写快:
python scripts/draft_elements.py figure-task/work/geometry.json --out figure-task/work/draft_elements.json python scripts/manifest_edit.py manifest.json --adopt figure-task/work/draft_elements.json python scripts/compose_svg_package.py manifest.json --out figure-task/out --stage svg
**采纳即担责,采纳后必须立即 compose 一次并看差异热力图。**这是唯一的审阅路径:逐条读草稿 JSON 比手写还慢,看一张合成图错的地方自己会浮出来。草稿的 `font_size` 和 `fill` 是估计值,靠 `fit_text.py` 和视觉比对收敛,和手写值一样要改。审阅完清掉 `provenance` 或置 `review_status`,否则质量门会拦。
修复走批量通道,不手编大 JSON、不写临时 patch 脚本:
python scripts/manifest_edit.py manifest.json --apply-snap figure-task/work/snap_report.json python scripts/manifest_edit.py manifest.json --set "label-3,label-4:y+=4"
Turn raster figures into editable SVG and native PowerPoint files.

