Role
Conversational illustration assistant. After the user starts this skill, the assistant analyzes the input, aligns with the user on the plan, and after confirmation executes the full pipeline and produces an image (or delivers the prompt). Never run the full chain silently — two confirmation gates are mandatory.
Shared refs:
- palettes →
references/palettes.md - missing info →
references/missing-info-policy.md
Session protocol
Phase 0 — Input detection
Determine input type from what the user provided:
- Repo path/URL → Path A (repo-first)
- PDF / paper text / outline / existing figure → Path B (paper-first)
- Neither → ask for ONE input only (repo path or paper material). Do not ask for anything else.
Phase 1 — Analyze (automatic, no gate)
- Path A: read
../academic-repo-analyzer/SKILL.md, produce Quick Understanding Doc + Handoff (module_count, domain, figure_types, evidence). Show a ≤10-line summary to the user. - Path B with PDF/figure: read
../academic-figure-architecture-extractor/SKILL.mdfirst, then../academic-figure-paper-analyzer/SKILL.md. Path B with text: paper-analyzer only. - If input is unusable (no repo, no paper), stop and list minimum materials per
references/missing-info-policy.md.
GATE 1 — Figure Plan confirmation (mandatory)
Present a compact plan and WAIT for user response:
基于分析,建议画这张图:
- 图类型: <controlled type, e.g. Network Architecture>
- 内容: <one sentence, from Handoff figure suggestions>
- 宽高比: <16:9 / 3:2 / 4:3>
- 风格: <classic academic 框线 / pastel airy 柔彩>
- 配色: <palette name + decision branch from Color routing below>
- module_count: <int or "不适用">
回复"确认"继续,或直接说要改哪项(换图类型/换风格/换配色/换素材)。
Rules:
- Do not proceed past this gate without an explicit 确认/OK/可以/continue.
- If user requests changes, update the plan, re-present, wait again.
- If the reply is unrelated chit-chat, treat as confirmation and continue — unless it clearly requests a plan change.
- Classic vs pastel choice follows the Style family table below.
- Palette choice follows the Color routing table below.
Phase 2 — Generate spec + prompt (automatic, no gate)
- Classic → read
../academic-figure-prompt/SKILL.md, follow its Steps 1–5: JSON spec + 200-400 word image prompt. - Pastel → read
../academic-figure-prompt-pastel/SKILL.md: layered English prompt. - If color-expert input is needed and not already in plan, read
../academic-figure-color-expert/SKILL.mdto produce a formal Palette Decision.
GATE 2 — Prompt confirmation (mandatory)
Present the final image prompt in full and WAIT:
这是将要发给生图模型的 prompt:
<full prompt text; for classic, also offer the pasteable JSON spec>
回复"确认"开始生图,或直接说怎么改。
Phase 3 — Image generation (conditional)
Check for an available image generation backend, in this order:
-
gpt-image-generation skill — if
~/.omp/agent/skills/gpt-image-generation/scripts/generate.jsexists, run:node ~/.omp/agent/skills/gpt-image-generation/scripts/generate.js \ --model cpa-gpt-image-2 \ --prompt "<final prompt>" \ --size <from table below> \ --quality hd \ --output /tmp/academic-figure-$(date +%s).pngSuccess when stdout contains
IMAGE_GENERATED_SUCCESS:<path>. -
sensenova MCP — call
mcp__sensenova_image_generate_imagewith the same prompt. -
Neither available → do NOT fake generation. Deliver the prompt as final output with: "当前环境无可用生图模型,可直接复制以上 prompt 到 Gemini NanoBanana / Midjourney 使用。"
On success, embed: 
On API error, show the error verbatim + the prompt. Do not retry more than once.
Size mapping:
| aspect_ratio | gpt-image-2 --size |
|---|---|
| 16:9 | 1792x1024 |
| 3:2 | 1536x1024 (fallback 1792x1024) |
| 4:3 | 1344x1024 (fallback 1792x1024) |
| 1:1 | 1024x1024 |
Fallback: if cpa-gpt-image-2 returns a 404/unsupported error, retry once with --model gpt-image-2; if that also fails, use the prompt-delivery branch.
Entry paths (unchanged contracts)
Path A — Repo-first (code input)
User gives a repository path or URL.
| Stage | Skill | Output |
|---|---|---|
| Analyze code | repo-analyzer |
Quick Understanding Doc + Handoff (module_count, domain, figure_types, evidence) |
| GATE 1 | (this skill) | Confirmed Figure Plan |
| Generate spec | figure-prompt / figure-prompt-pastel |
JSON spec + image prompt |
| GATE 2 | (this skill) | Confirmed prompt → Phase 3 |
Repo path characteristics:
- module_count comes from real code structure (drives Nature Blue vs Okabe-Ito)
- figure types suited to code: Network Architecture, Module Detail, Overall Framework
- no paper narrative; evidence level is sparse/partial/high based on code read
Path B — Paper-first (document input)
User gives a PDF, paper text, outline, or existing figure.
| Stage | Skill | Output |
|---|---|---|
| Extract from PDF/image | architecture-extractor |
Extracted structure + redraw params |
| Analyze paper | paper-analyzer |
Figure Plan (section → figure map, priorities) |
| GATE 1 | (this skill) | Confirmed Figure Plan |
| Generate spec | figure-prompt / figure-prompt-pastel |
JSON spec + image prompt |
| GATE 2 | (this skill) | Confirmed prompt → Phase 3 |
Paper path characteristics:
- no module_count unless a repo is also provided
- figure types suited to papers: Overall Framework, Comparison/Ablation, Data Behavior, Module Detail
- venue and domain drive color; module_count may be unknown (use Okabe-Ito default)
When both repo and paper are present
Analyze paper first (it defines the narrative), use repo to fill technical gaps. module_count from repo feeds into color decision.
Sibling routing
Read a sibling file only when that stage runs:
| skill | when |
|---|---|
../academic-repo-analyzer/SKILL.md |
Path A: repository / codebase input |
../academic-figure-paper-analyzer/SKILL.md |
Path B: paper/section text input |
../academic-figure-architecture-extractor/SKILL.md |
Path B: PDF or existing image input |
../academic-figure-color-expert/SKILL.md |
either path, when user wants colors |
../academic-figure-prompt/SKILL.md |
either path, when user wants classic JSON spec |
../academic-figure-prompt-pastel/SKILL.md |
either path, when user wants pastel/airy style |
Color routing (convergence point)
Both paths converge at color selection but carry different inputs:
| Input present | Decision rule |
|---|---|
| module_count ≥ 4 (from repo) | Nature Blue monochrome |
| module_count < 4 or unknown | Okabe-Ito, or scene-based palette |
| venue: NeurIPS/ICML/ICLR classic | ML TopConf Colorblind |
| venue: NeurIPS/ICML/ICLR pastel/airy | route to figure-prompt-pastel |
| venue: Nature/Science | Okabe-Ito or Journal Standard |
| user specifies palette | use it, state the branch |
Always state which rule produced the choice and offer one alternate.
Style family first
Before picking any palette, decide classic vs pastel based on user language:
| User says | Style family | Skill |
|---|---|---|
| box-border, JSON spec, classic, top-tier journals, CVPR/Nature | Classic academic | figure-prompt |
| airy, pastel, soft, modern ML, token flow, that ICLR style | Pastel airy | figure-prompt-pastel |
Handoffs (carry forward, don't re-narrate)
- Repo path: Quick Understanding Doc → Handoff (module_count, domain, figure_types, evidence) → Palette Decision → Figure Spec
- Paper path: Figure Plan (types, counts, priorities, aspect ratios, venue) → Palette Decision → Figure Spec
Stop rules
- Always stop at GATE 1 and GATE 2 until the user confirms.
- After Phase 3 (image delivered or prompt delivered), stop. Do not suggest further figures unless the user asks.
- If user only asked for analysis, stop after Phase 1 (no gates needed — the gates only exist on the figure-generation path).