| name | baoyu-article-illustrator |
| description | Analyzes article structure, identifies positions requiring visual aids, generates illustrations with Type × Style two-dimension approach. Use when user asks to "illustrate article", "add images", "generate images for article", or "为文章配图". |
Article Illustrator
Analyze articles, identify illustration positions, generate images with Type × Style consistency.
Two Dimensions
| Dimension | Controls | Examples |
|---|
| Type | Information structure | infographic, scene, flowchart, comparison, framework, timeline |
| Style | Visual aesthetics | notion, warm, minimal, blueprint, watercolor, elegant |
Combine freely: --type infographic --style blueprint
Types
| Type | Best For |
|---|
infographic | Data, metrics, technical |
scene | Narratives, emotional |
flowchart | Processes, workflows |
comparison | Side-by-side, options |
framework | Models, architecture |
timeline | History, evolution |
Styles
See references/styles.md for Core Styles, full gallery, and Type × Style compatibility.
Workflow
- [ ] Step 1: Pre-check (EXTEND.md, references, config)
- [ ] Step 2: Analyze content
- [ ] Step 3: Confirm settings (AskUserQuestion)
- [ ] Step 4: Generate outline
- [ ] Step 5: Generate images
- [ ] Step 6: Finalize
Step 1: Pre-check
1.5 Load Preferences (EXTEND.md) ⛔ BLOCKING
test -f .baoyu-skills/baoyu-article-illustrator/EXTEND.md && echo "project"
test -f "$HOME/.baoyu-skills/baoyu-article-illustrator/EXTEND.md" && echo "user"
Full procedures: references/workflow.md
Step 2: Analyze
| Analysis | Output |
|---|
| Content type | Technical / Tutorial / Methodology / Narrative |
| Purpose | information / visualization / imagination |
| Core arguments | 2-5 main points |
| Positions | Where illustrations add value |
CRITICAL: Metaphors → visualize underlying concept, NOT literal image.
Full procedures: references/workflow.md
Step 3: Confirm Settings ⚠️
ONE AskUserQuestion, max 4 Qs. Q1-Q3 REQUIRED.
| Q | Options |
|---|
| Q1: Type | [Recommended], infographic, scene, flowchart, comparison, framework, timeline, mixed |
| Q2: Density | minimal (1-2), balanced (3-5), per-section (Recommended), rich (6+) |
| Q3: Style | [Recommended], minimal-flat, sci-fi, hand-drawn, editorial, scene, Other |
| Q4: Language | When article language ≠ EXTEND.md setting |
Full procedures: references/workflow.md
Step 4: Generate Outline
Save outline.md with frontmatter (type, density, style, image_count) and entries:
**Position**: [section/paragraph]
**Purpose**: [why]
**Visual Content**: [what]
**Filename**: 01-infographic-concept-name.png
Full template: references/workflow.md
Step 5: Generate Images
- Create prompts per references/prompt-construction.md
- Select generation skill from available skills
- Process references (
direct/style/palette)
- Apply watermark if EXTEND.md enabled
- Generate sequentially, retry once on failure
Full procedures: references/workflow.md
Step 6: Finalize
Insert  after paragraphs.
Article Illustration Complete!
Article: [path] | Type: [type] | Density: [level] | Style: [style]
Images: X/N generated
Output Directory
illustrations/{topic-slug}/
├── source-{slug}.{ext}
├── references/ # if provided
├── outline.md
├── prompts/
└── NN-{type}-{slug}.png
Slug: 2-4 words, kebab-case. Conflict: append -YYYYMMDD-HHMMSS.
Modification
| Action | Steps |
|---|
| Edit | Update prompt → Regenerate → Update reference |
| Add | Position → Prompt → Generate → Update outline → Insert |
| Delete | Delete files → Remove reference → Update outline |
References
🔒 Mandatory Post-Processing (EXIF strip)
After every image generated by this skill — regardless of file extension claimed (.png/.jpg/.webp), regardless of provider (Gemini/OpenAI/DashScope), regardless of whether the user is going to share it — Claude MUST run the post-processing pipeline defined in:
~/.baoyu-skills/image-post-processing.md
Why this is mandatory and unconditional:
- AI providers routinely embed metadata: provider tags, timestamps, color profiles, copyright fingerprints, watermark indicators, C2PA chunks
- Provider-claimed file format (e.g.
.png) often disagrees with actual format (e.g. JPEG with PNG extension) — verify and rename
- Local-only files frequently get uploaded later (CDN, R2, screenshots into shared docs, git history) — strip on creation, not before sharing
Required steps for each generated image (in order):
- Detect actual format with
PIL.Image.open(f).format (not the extension)
- Re-save via PIL with no metadata (this is the EXIF-strip step):
from PIL import Image
img = Image.open(path)
data = list(img.getdata())
clean = Image.new(img.mode, img.size)
clean.putdata(data)
clean.save(target_path, img.format, quality=95, optimize=True)
- If actual format ≠ claimed extension, rename to the correct one and remove the original
- Verify: re-open the saved file and assert
img.getexif() is empty AND img.info has no metadata keys (other than benign jfif/dpi)
- Only after verification passes may you report the image as done
⚠️ Skipping this step or trusting "the provider doesn't add metadata" is a contract violation. Verify, do not assume.