--- name: paper-illustration description: > Generate publication-quality academic paper illustrations from scientific content. 6 figure types: architecture diagrams, data plots, conceptual illustrations, process flows, comparison charts, result visualizations. Outputs AI-generated images (via basic-image-gen) or reproducible code (matplotlib/mermaid/TikZ). Academic style compliance (NeurIPS/ICML/ACL/IEEE). USE WHEN: User wants to create academic figures, paper illustrations, or scientific diagrams from vault notes or raw content. Trigger phrases: 论文插图、学术配图、paper figure、scientific illustration、 架构图、实验结果图、ablation figure、generate figures for paper、 数据可视化、流程图、对比图、概念图。 DON'T USE WHEN: - User wants decorative blog illustrations → use baoyu-article-illustrator. - User wants social media cover images → use baoyu-cover-image. - User wants infographics for Xiaohongshu → use baoyu-xhs-images. - User wants general AI image generation → use basic-image-gen directly. - User says "封面"、"配图"、"社媒" without academic context → not this skill. --- # Paper-Illustration: Academic Figure Generation Skill ## Purpose Generate publication-quality figures from scientific content with reproducible code output. Every data-driven figure must be reproducible from code; every conceptual figure must be visually precise. Core principle: **Code-first, AI-image fallback** — data figures (plots, charts) always go through matplotlib/seaborn code generation (text accuracy guaranteed); conceptual figures go through `basic-image-gen` (AI excels at creative visuals). ## Routing Rules (Use when / Don't use when) Use this skill when: - User wants **academic-quality** figures for papers, presentations, or technical reports - User says "论文插图"、"paper figure"、"实验结果图"、"ablation study plot" - Content involves data visualization, system architecture, or scientific processes - User needs **reproducible** figure code (matplotlib, mermaid, TikZ) Do NOT use this skill when: - User wants **decorative** blog/social illustrations → `baoyu-article-illustrator` - User wants **cover images** for articles → `baoyu-cover-image` - User wants **infographics** for social media → `baoyu-xhs-images` or `baoyu-infographic` - User wants **general AI images** without academic context → `basic-image-gen` - Content has no scientific/technical structure to visualize Edge cases: - "帮我画个系统架构图" with paper context → **this skill** (academic architecture diagram) - "帮我画个系统架构图" for blog post → **not this skill** (use baoyu-article-illustrator) - "生成实验对比图" → **this skill** (data-driven, needs reproducible code) - "做个信息图" → **not this skill** (use baoyu-infographic) ## Input Requirements Required: - `source`: Vault note path OR raw text content describing the figure subject - `figure_type`: One of 6 types (auto-detected if omitted, see Decision Tree below) Optional: - `venue`: Academic venue style — `neurips` (default) | `icml` | `acl` | `ieee` | `nature` - `output_format`: `code` (default for data types) | `image` (default for conceptual) | `both` - `slug`: Asset slug for vault storage (derived from source note if omitted) - `caption`: Figure caption (generated if omitted) - `data`: Inline data dict/CSV for data-driven figures - `colorblind_mode`: `true` | `false` (default: `true` — always colorblind-safe) - `subfigures`: Number of subfigures (for multi-panel layouts) - `dpi`: Output resolution (default: 300, minimum: 150) - `language`: Label language — `en` (default) | `zh-CN` ## Figure Type Decision Tree ``` Source content analysis │ ├─ Contains numeric data / experimental results? │ ├─ Comparing methods/models? ─────────────── comparison-chart │ ├─ Showing trends / distributions? ────────── data-plot │ └─ Showing ablation / metrics table? ──────── result-visualization │ ├─ Describes a system / model architecture? │ └─ Has components + connections? ──────────── architecture-diagram │ ├─ Describes a sequential process / pipeline? │ └─ Has ordered steps + decisions? ─────────── process-flow │ └─ Describes an abstract concept / metaphor? └─ Needs creative visual representation? ──── conceptual ``` ## Figure Type → Backend Routing ``` figure_type Primary Backend Fallback ───────────────────── ───────────────────── ──────────────── architecture-diagram Mermaid → basic-image-gen TikZ data-plot matplotlib code —(code only) conceptual basic-image-gen SVG description process-flow Mermaid flowchart TikZ comparison-chart matplotlib code —(code only) result-visualization matplotlib/seaborn code —(code only) ``` **Key constraint**: Data-driven types (data-plot, comparison-chart, result-visualization) NEVER use AI image generation. Text on axes, labels, and legends must be pixel-perfect — only code can guarantee this. ## Mandatory Workflow (6 Steps — No Skipping) ### Step 1: Retrieve & Classify Read source content and classify figure type. Load `references/illustration-taxonomy.md` for classification guidance. ```bash # If source is a vault note path cd "${VAULT_PATH:-/home/kang/apps/content-forge/content-forge}" obsidian read path="" ``` Actions: - Read all source material (vault notes, inline data, referenced papers) - Auto-detect `figure_type` using the Decision Tree above (if not provided) - Extract key elements: entities, relationships, data points, labels - Confirm figure_type with user if ambiguous Output: ``` ## Figure Classification - Source: [vault path or "inline content"] - Detected type: [figure_type] - Key elements: [list of entities/data points] - Confidence: [high/medium/low] - [?] Ambiguous — suggest [type_a] or [type_b], awaiting user choice (if low confidence) ``` ### Step 2: Plan the Figure (Blueprint) Generate a structured Figure Blueprint describing the visual composition. Blueprint format: ```yaml figure_blueprint: type: title: "" caption: "" dimensions: width: height: aspect_ratio: "" layout: grid: "" # for subfigures elements: - id: "element_1" type: "" content: "" position: "" data_mapping: # for data-driven types only x_axis: "" y_axis: "" series: ["", ""] error_bars: true/false text_elements: labels: ["", ""] annotations: [""] ``` Constraints: - Every text element must be explicitly listed (no implicit labels) - Data mappings must reference actual data from Step 1 - Caption must be self-contained (understandable without reading the paper) ### Step 3: Apply Academic Style Load `references/academic-styles.md` and apply venue-specific styling to the Blueprint. Style augmentation adds: - Color palette (hex values, colorblind-safe) - Font family and sizes (axis labels, titles, legends) - Line widths and marker styles - Figure size constraints (single-column vs double-column) - Caption format (numbered, style-specific) Output: Enhanced Blueprint with all visual parameters specified as concrete values (no "use default" — every parameter must be a number or hex code). ### Step 4: Generate Figure Route to the appropriate backend based on figure_type. #### 4a. Code-based generation (data-plot, comparison-chart, result-visualization) Generate complete, runnable Python code: ```python import matplotlib.pyplot as plt import matplotlib import numpy as np # import seaborn as sns # if needed # --- Style Configuration (from Step 3) --- matplotlib.rcParams.update({ 'font.family': '', 'font.size': , 'axes.labelsize': , 'axes.titlesize': , 'legend.fontsize': , 'figure.dpi': , }) # --- Data --- # # --- Plot --- fig, ax = plt.subplots(figsize=(, )) # # --- Labels & Legend --- ax.set_xlabel('') ax.set_ylabel('') ax.legend(loc='best', frameon=True) # --- Output --- plt.tight_layout() plt.savefig('_fig.png', dpi=, bbox_inches='tight') plt.savefig('_fig.pdf', bbox_inches='tight') # vector format plt.show() ``` **Code output rules**: - Print code to terminal (NEVER write .py files to vault) - All data must be inline (no external file references) - Must include both raster (PNG) and vector (PDF) save commands - Must include `tight_layout()` and explicit DPI - Must include all imports at the top #### 4b. Mermaid-based generation (architecture-diagram, process-flow) Generate Mermaid code, then optionally render via `basic-image-gen` for high-quality output: ```mermaid graph TD A[Component A] --> B[Component B] B --> C{Decision} C -->|Yes| D[Output 1] C -->|No| E[Output 2] ``` For AI-enhanced rendering: - Convert Mermaid to a detailed text description - Use `basic-image-gen` with academic-style prompt (from Step 3) - Prompt template: see `references/illustration-taxonomy.md` #### 4c. AI image generation (conceptual) Use `basic-image-gen` with a carefully engineered prompt: - Include all text elements from Blueprint (labels, annotations) - Specify exact colors from venue palette - Request "clean, minimalist, scientific illustration style" - Specify "white background, no decorative elements, no shadows, no 3D effects" ### Step 5: Critic Evaluation Load `references/critic-checklist.md` and evaluate the generated figure. 5 dimensions, 20 items — every item scored PASS/FAIL: - **Clarity** (5 items): caption, labels, hierarchy, overlap, whitespace - **Accuracy** (4 items): data fidelity, encoding, axes, error bars - **Style** (5 items): palette, colorblind, grayscale, fonts, size - **Reproducibility** (3 items): code completeness, imports, output config - **Caption** (3 items): content description, key findings, subfigure refs Evaluation output: ``` ## Critic Evaluation — Round N/3 | Dimension | Score | Issues | |-----------------|-------|--------| | Clarity | 4/5 | [!] Legend overlaps data points | | Accuracy | 4/4 | — | | Style | 5/5 | — | | Reproducibility | 3/3 | — | | Caption | 2/3 | [!] Missing key finding in caption | Overall: REVISE (16/20, threshold: 18/20) Revision actions: 1. Move legend to upper-left corner 2. Add "Method A outperforms by 12%" to caption ``` **Iteration rules**: - Threshold: 18/20 to PASS - Maximum 3 revision rounds - Each revision must address ALL flagged issues - If round 3 still fails: output with `[!] Quality warning` and list remaining issues ### Step 6: Archive to Vault Store final assets and update vault metadata. ```bash cd "${VAULT_PATH:-/home/kang/apps/content-forge/content-forge}" # Create asset directory (if source is vault note) # mkdir -p "05-assets//" # For code-based figures: user runs the code, saves output to 05-assets// # For AI-generated figures: basic-image-gen saves to 05-assets// # Update source note's frontmatter (if vault note) obsidian property:set path="" name="assets" \ value='["05-assets//.png"]' ``` Output summary: ``` ## Figure Generation Complete [✓] Type: [✓] Backend: [✓] Critic: PASS (score/20) — round N [✓] Assets: 05-assets//.{png,pdf} [✓] Code: Caption: "Figure N. " ``` ## NEVER Rules (8 Items — Zero Tolerance) 1. **NEVER** use AI image generation for data-driven figures (data-plot, comparison-chart, result-visualization). Text on axes, labels, and legends is unreliable in AI-generated images. Always use matplotlib/seaborn code. 2. **NEVER** use more than 7 distinct colors in a single figure. Beyond 7, use patterns (hatching, markers, line styles) to differentiate series. Color is a scarce resource. 3. **NEVER** rely solely on red-green distinction. Always include a secondary encoding (shape, pattern, label) for colorblind accessibility. Test with simulated deuteranopia. 4. **NEVER** output a figure without a caption. Every figure must have a self-contained caption that describes what is shown and highlights key findings. 5. **NEVER** generate matplotlib code without `plt.tight_layout()` and explicit DPI setting. Clipped labels and low-resolution output are publication-rejection-worthy bugs. 6. **NEVER** use decorative elements: drop shadows, 3D effects, gradients, bevels, or ornamental borders. Academic figures must be clean, flat, and information-dense. 7. **NEVER** skip the Critic evaluation step (Step 5). Even if the figure "looks fine", run the 20-item checklist. Visual intuition misses subtle issues. 8. **NEVER** write code files (.py, .mmd) to the vault. Code output goes to terminal. Only image assets (.png, .pdf, .svg) go to `05-assets/`. Vault is for content, not code. ## Output Constraints - All code output is printed to terminal, not saved as files - Image assets go to `05-assets//` with vault-relative paths - Default language for labels: English (override with `language: zh-CN`) - Default colorblind mode: ON (override with `colorblind_mode: false`) - Default DPI: 300 (minimum 150, recommended 300-600 for print) - Caption language matches `language` parameter - Vector format (PDF) always generated alongside raster (PNG) for code-based figures ## Failure Handling - Missing source content: `[?] Missing input: source` — stop and ask - Ambiguous figure_type: `[?] Cannot determine figure type` — present options, ask user - `basic-image-gen` unavailable: `[✗] Image generation failed` — fall back to Mermaid/TikZ code - Data insufficient for plot: `[?] Insufficient data` — request specific data points - Critic fails after 3 rounds: `[!] Quality warning: ` — output with disclaimer - `obsidian` CLI failure: `[✗] failed: ` — stop subsequent steps ## Reference Files - `references/illustration-taxonomy.md` — 6 figure types: structure, routing, prompt templates, decision tree - `references/academic-styles.md` — Venue-specific styles: NeurIPS/ICML/ACL/IEEE/Nature with hex colors, fonts, sizes - `references/critic-checklist.md` — 5 dimensions x 20 items: Clarity, Accuracy, Style, Reproducibility, Caption