lov-illustrate · v2.6.1 · 2026-09-07 · sha256 90f929d1e807db91

lov-illustrate v2.6.1A

Immutable. This exact content is served forever at /api/v1/blob/90f929d1e807db91.

---
name: lov-illustrate
license: MIT
compatibility: 'Requires network-capable search/download tools for retrieved assets
  and an image-generation capability for abstract illustrations. Programmatic HTML
  typography audits require Python 3.9+, Playwright, and Chromium or Google Chrome;
  if unavailable, use equivalent browser font introspection and report the typography
  gate as incomplete.

  '
depends_on:
- lov-branding-consistency
description: 依据文档内容选择真实素材、图表或生成图并校验插入位置。支持明确输入与结果回读。Use to illustrate a document with
  evidence and relevant images.
metadata:
  author: contributors
  version: 2.6.1
  tags:
  - illustration
  - markdown
  - editorial
  - cjk
  - typography
  - provenance
  content_class: microcopy
  card_standard: lovstudio/skill-card/v1
---

# Illustrate - 文档智能配图

为 Markdown 文档智能分析插图位置,并行生成/检索图片,输出带插图的增强版文档。

## Triggers

### Activate when

- 用户要求“给文章配图”“补插图”“生成文章插画”或“illustrate this document”。
- 用户希望为长文规划真实素材、对照图、过程图、数据图表或程序化合成图。

### Do not activate when

- 用户只要求生成一张独立图片,不需要文章级选图、插入与视觉节奏;使用对应图像 Skill。
- 用户只要求给现有图片加 Caption、边框或 Logo;使用 `lov-image-decorator`。
- 用户要求发布公众号文章或修改远端草稿;使用 `lov-publish-wechat-article`。
- 用户只要求审阅正文内容,不需要插图规划或图片文件。

## 参数格式
`<file_path> [--auto] [--style <style>] [--max <n>]`

- `file_path`: 必填,md文件路径
- `--auto`: 跳过确认,直接生成
- `--style`: 图片风格(默认:从 design-guide.md 读取,回退 warm-academic)
- `--max`: 最大插图数量(默认:不限,由AI决定)

## 工作流

### Step 1: 读取文档 + 加载品牌风格

1. 读取目标文档
2. 尝试读取 `${SKILL_WORKSPACE_ROOT}/design/design-guide.md`,提取 AI 生图 prompt 模板和色彩体系
3. 如果存在品牌风格,后续所有 AI 生图 prompt 必须注入品牌色彩和质感关键词
4. 如果计划制作包含可编辑文字的 HTML、SVG、Canvas、Pillow 或其他程序化合成图,
   **必须完整读取 `references/text-rendering-safety.md`**,并在方案中登记文本语言与字体来源

### Step 2: 分析文档结构 + 实体提取

分析:
- 文章结构(标题层级、段落分布)
- 内容主题(每个章节的核心概念)
- 情绪节奏(叙事高潮、转折点)
- 已有图片位置
- **数据密集区域**(表格、多产品/多概念并列对比)
- **可量化信息**(ARR、用户数、增长率等需要图表的数据)

**关键步骤:实体与证据候选提取(必做)**

在规划插图前,先逐段扫描文档,列出所有可联网检索的真实实体:

```
| 实体 | 类型 | 出现位置 | 可检索素材 |
|------|------|---------|-----------|
| Cursor IDE | 产品 | L12 | 产品界面截图、博文封面 |
| Sam Altman | 人物 | L45 | 新闻照片 |
| GPT-4发布会 | 事件 | L78 | 发布会现场照片 |
| arXiv:2602.11988 | 论文 | L199 | 论文图表 |
| github.com/openai/symphony | 开源项目 | L121 | GitHub页面截图、终端UI |
```

**实体类型覆盖**:产品/工具、人物、公司、事件、地点、论文/研究、博客文章、开源项目、终端/CLI 界面

这张表是后续插图方案的候选输入,不是图片配额。只有素材能帮助读者理解论点、验证
现场、看见变化或获得必要视觉休息时才进入方案;正文已经清楚、图片只会机械重复时
可以不配。真实人物与活动素材还要记录授权状态、来源场景和能否公开组合。

### Step 3: 规划插图方案

为每个建议插图位置生成方案(必须标注关联实体和搜索策略):

```
| # | 位置 | 插图主题 | 类型 | 关联实体 | 搜索策略/prompt |
|---|------|---------|------|---------|----------------|
| 1 | L12 | ELIZA对话界面 | 联网检索 | ELIZA | "ELIZA chatbot original screenshot" |
| 2 | L47 | Web演进时间线 | AI生图 | 无(纯抽象) | editorial timeline illustration... |
| 3 | L136 | ARR增长对比 | 数据图表 | Notion/Airtable/Linear | 先调研数据再绘制 |
| ...
```

#### 类型决策树(按优先级)

```
该插图是否涉及真实产品/人物/事件/地点?
├─ 是 → 联网检索(产品截图、历史照片、官方图表、新闻图片)
│       └─ 搜不到合适素材?→ AI生图(概念化表达)
└─ 否 → 该插图是否涉及可量化数据?
         ├─ 是 → 数据图表(先调研获取可溯源数据,再绘制)
         └─ 否 → 是否需要精确、可编辑的文字或结构?
                  ├─ 是 → 程序化合成图(HTML/SVG/Canvas 等)
                  └─ 否 → AI生图(概念插画)
```

**硬性规则(违反则方案不合格):**

1. **价值驱动而非实体配额**:每张图必须至少承担证据、解释、对比、过程或节奏中的
   一项任务;无法说明读者收益时删除,不因文章提到某个实体就强制配图。
2. **真实实体优先真实素材**:产品、事件、论文、项目和公共人物优先使用可溯源截图、
   照片或原图。只有用户提供了合法输入并明确要求风格化、编辑或概念化表达时,才用
   生成式模型处理真实实体,并如实标注 provenance。
3. **来源场景一致**:同一组对照或合成图中的人物、活动与原图必须来自文章所述场景。
   获得授权只解决权利问题,不代表其他场合的素材适合混入当前公共叙事。
4. **原图真源**:比较“原图 / 结果”时,原图必须回到活动相册、相机文件或经核验的
   原始附件,不能把裁切图、风格化结果或聊天缩略图误当原图。
5. **AI 占比自检**:AI 图较多时逐张复核是否真的需要,以及是否会把可验证事实变成
   虚构视觉;不设置机械百分比门槛。
6. **生成方式如实标注**:联网素材合成、程序化排版、数据图表、生成式编辑与纯生成
   是不同 provenance;不得互相冒充。

#### 特殊类型:Hero Image(可选)

Hero 只在它能提供封面之外的新信息、建立强现场或显著提升首屏吸引力时使用。不要
为了模板完整生成“全文摘要图”,也不要让一张高大的概念图把真正的开头和证据推到
首屏之外。已有高质量人物照、结果对照或正文首图能够完成任务时,省略额外 Hero。

### Step 4: 用户确认(除非 --auto)

使用 宿主的聚焦提问工具 展示插图方案表格,让用户:
- 确认/删除/调整每个插图位置和类型
- 选项:「全部确认」「我来调整后继续」

### Step 5: 数据调研(如有数据图表类型)

如果方案中包含「数据图表」类型的插图:
1. 逐项调研每个数据主题,获取**带来源的精确数据点**
2. 汇总数据表格,展示给用户确认数据准确性
3. 确认后再生成图表

**数据图表的prompt必须包含:**
- 每个数据点的精确数值
- 图表底部标注数据来源(Sources: ...)
- 使用品牌色彩体系

### Step 6: 并行生成图片

确认后,使用 Task 工具并行处理每张图片:

**AI生图流程**:
- 优先调用当前宿主已经提供的图像生成工具或 Plugin 能力
- 若宿主只提供本地脚本,由使用者显式传入脚本路径;不得依赖某个客户端专属环境变量
- 输出到 `<doc_dir>/attachments/ill-<n>-<slug>.png`,并保留 prompt 与生成方式收据

Prompt 构建规则:
- 基于文章上下文生成详细英文 prompt
- **注入品牌风格**(从 Step 1 加载的 design-guide 提取关键词)
- 默认风格关键词:warm off-white background (#F9F9F7), terracotta (#CC785C) accents, charcoal (#181818) text, matte paper texture, editorial illustration style
- 避免文字/人脸(AI生图弱点)——数据图表除外
- 宽幅构图(适合文章内嵌)

**联网检索流程**:
- 使用 Task 工具并行搜索
- 优先官方素材、公开图表
- curl 下载到 attachments/ 目录
- 验证下载文件是有效图片(file 命令检查)

**数据图表流程**:
- 使用 Step 5 调研获得的精确数据构建 prompt
- prompt 中列出每个数据点的精确数值
- 图表底部必须标注来源
- 使用 `-q high` 生成更高精度

**程序化合成图流程**:
- 使用 HTML/CSS、SVG、Canvas 或等价确定性工具排版精确文字、图表和资料卡片
- 每个文本 run 必须声明正确 `lang`,并使用与该语言匹配且覆盖全部字符的显式字体栈
- 中日文并列或混排时拆成独立语言 run;禁止把日文字体放在简中 run 的首位,反之亦然
- 在截图或栅格化前执行 `references/text-rendering-safety.md` 的字体覆盖与实际字体门禁
- Chromium 页面可使用 `scripts/audit_html_fonts.py` 生成机器可读字体收据;`ok=false` 时不得交付图片
- 记录合成源、素材来源、请求字体、实际字体、语言和输出图片的对应关系

### Step 6.4: 文字渲染门禁(含文字图片必做)

1. 按语言 run 检查字符覆盖,任何正文字符缺字都必须先修复字体栈,不能依赖未知系统 fallback
2. 对最终截图所用的真实浏览器回读实际 PostScript 字体与 glyph count,不能只检查 CSS 声明
3. 纯简中或纯日文 run 默认只允许一套 CJK 字体;有意混植必须在方案和收据中逐项声明
4. `lang` 只负责语言语义和本地化字形选择,不会自动跳过字体栈首位的错误区域字体
5. 图片栅格化后 fallback 已固化,公众号、Markdown 或下游 CSS 无法修复;门禁必须发生在导出前

### Step 6.5: 图片质量校验

对每张下载/生成的图片,使用 Read 工具查看验证:
- **联网检索图**:确认内容匹配目标产品(非同名但不同的产品、非无关图片)
- **AI生图**:确认视觉主题与 alt 描述一致
- **程序化合成图**:确认字体收据 `ok=true`,并人工查看 CJK 字形、基线、标点和换行
- **所有图片**:记录像素尺寸、宽高比和按文章正文宽度渲染后的预计高度;单张图过高、
  上下留白显著或连续多张占据多个手机屏幕时,必须裁切、重排或删除。
- **过程 / 对照图**:只保留视觉上不同且推动理解的阶段,删除重复帧和过早出现的最终
  状态;统一子图视觉尺寸与间距,把真正变化的区域放大,背景保持中性,不额外套用会
  干扰比较的目标风格。
- **生成式人物图**:检查脸、身体、手指、服装、饰品与物件是否符合源图和真实世界;
  过程只展示真实发生过的调试状态,不为叙事补造畸形或失败帧。
- 不合格的图片重新搜索/生成

### Step 7: 组装输出

在原文档的指定位置插入图片引用:

Markdown 中写入一条标准图片引用,alt 描述读者需要的内容,路径使用实际生成文件;
例如 `!\[描述性 alt\]\(attachments/ill-N-slug.png\)`。

#### Caption 与图内文字

1. Caption 是面向读者的编辑文案,不是图片内容的机械复述。读者一眼可见的信息无需
   再写;没有证据、归属或理解任务时宁可不写 Caption。
2. 图内烧录文字、Decorator Caption 与 Markdown 图注只能保留一种。图片已经自带
   标题或说明时,删除外部重复图注;需要可访问性的信息留在 alt,不再作为第二份文案。
3. 过程图的文字只点出本质变化,例如“基于真实世界修复模型常识性错误”;不要为每
   张子图写长句解释肉眼可见的动作、数量和位置。
4. 来源与引申资料在对应位置低调呈现;多项资料逐项分行或分点,不堆到文章底部。

#### 精确插入定位规则(必须逐条检查)

Step 3 规划的是章节级粗略位置,Step 7 组装时必须精确到段落级。逐张图执行以下检查:

1. **先提后图**:图片必须插在其所配内容**首次被提及之后**,不得出现在内容之前。例:报告截图必须在报告被引用/讨论之后,不能在报告被提及的上一个章节末尾。
2. **不割裂语义单元**:以下结构视为不可分割的语义单元,图片不得插入其内部:
   - 连续引用块(多个 `>` blockquote 属于同一论述)
   - 递进/收束段落对("A是什么...→ 所以A意味着...")
   - 论点+论据("**观点。** 具体展开...")
   - 排比/并列结构("第一...第二...第三...")
3. **收束优先**:如果一个概念有明确的收束句("会说,即会做。""数据不会说谎。"等金句/总结),图片应插在收束句**之后**而非之前。
4. **自检方法**:插入后,朗读图片前后各1-2段。如果读起来感觉"话说到一半被打断",则位置错误,需下移到语义完整处。

文件命名规则:
- 图片:`ill-<序号>-<语义slug>.png`(如 `ill-5-arr-comparison.png`)
- 输出文档:原文件名加 `-illustrated` 后缀(如 `v5-illustrated.md`)

### Step 8: 完成报告

输出简要报告:
- 生成了 N 张插图(X 联网检索 + Y AI生图 + Z 数据图表 + W 程序化合成图)
- 输出文件路径
- 对含文字图片提供字体审计收据路径与实际字体摘要
- 用 Read 工具展示一张代表性图片预览

## 插图位置选择原则

1. **证据优先**:真实现场、聊天、结果和变化过程优先于装饰性概念图。
2. **Hero 可省略**:正文首图或第一组证据已经有吸引力时,不再叠加摘要型 Hero。
3. **移动端视觉预算**:同时看图片数量、宽高比、预计屏高、相邻空白与连续图片长度;
   没有固定“每多少字一张”或“每节至少几张”的配额。
4. **概念转换处**:只有图片能真正帮助换挡时才作为分隔,不用空泛配图切断论证。
5. **数据横比**:多个并列产品或概念优先一张清楚的对比图,而不是逐个配图。
6. **演变过程**:用最少的不同阶段说明变化;子图数量、尺寸和间距服从信息差异,
   不为凑齐网格复制帧。
7. **情绪高潮**:优先真实照片、对话或结果;生成式插图不能替代真实关系与现场。



## Execution boundary

自然语言请求即可触发;无需旧 slash 路径、参数插值或指定助手。明确解析当前请求中的
项目、目标文件、选项与输出位置;用当前宿主实际提供的文件、搜索、CLI 和浏览器能力。
项目依赖版本与外部 API 在执行时核实,不能假设示例是现行配置。随包脚本从 Skill 根解析,
业务文件从目标项目根解析。先读当前状态,保护已有未提交内容与其他任务的暂存区。
分析、预览请求保持只读;修改、提交、推送、部署和发布各依当前请求的明确范围执行。
不绕过保护、自动发送消息、强制结束用户进程或抢前台。失败保留可诊断原始错误。

## Composition

执行前读取 [能力组合](references/skill-composition.md),按明确制品交接相邻能力。

## Runtime context (shared)

运行前读取本包 `skill.yaml` 与 [Profile 合同](references/user-profile.md)。优先级为当前请求、
项目上下文、本 Skill records、共享 preferences、brand/user Profile、安全默认值。
只读取声明字段;没有专用运行时的宿主可使用 `scripts/profile_store.py` 读取共享 Profile。
配置缺失只问影响结果的一个问题。用户明确要求长期保存的值通过该脚本原子写入,
报告实际路径;不保存推断、凭据或其他任务的资料。