Skip to content
Data
Skill

/figmirror

FigMirror mirrors the visual style of a top-conference paper figure (NeurIPS / ICML / ICLR / Nature family) onto the user's own data. Takes dirty data plus a reference figure screenshot (cropped or uncropped), preprocesses the reference crop, runs a Drawer/Reviewer loop, and

From plugin
figmirror
5525 skills5 agents4 commands

Claude Code

$ npx -y skills add VILA-Lab/FigMirror --skill figmirror --agent claude-code

SKILL.md

figmirror.SKILL.md
name: figmirror
description: >
  FigMirror mirrors the visual style of a top-conference paper figure (NeurIPS /
  ICML / ICLR / Nature family) onto the user's own data. Takes dirty data plus a
  reference figure screenshot (cropped or uncropped), preprocesses the reference
  crop, runs a Drawer/Reviewer loop, and outputs a camera-ready PDF plus a
  self-contained matplotlib script with an inline DATA SECTOR.

FigMirror (`figmirror`)

Use this skill when the user wants to:

  • Transfer the visual style of a top-conference paper figure to their own data.
  • Produce a camera-ready matplotlib figure matching a reference screenshot in

style, not in data.

  • Mirror 3D paper-figure references such as surfaces, scatter, trajectories,

bars, layered waterfalls, or plane projections when the reference or data is actually 3D.

  • Receive a self-contained `.py` script with editable inline data plus PNG/PDF

outputs.

Required Inputs

  • A reference figure screenshot (`PNG`/`JPG`). It may include margins, captions,

neighboring panels, or page text; Stage 0 preprocesses it.

  • The user's data in any parseable form: pasted table, CSV, TSV, markdown table, or

dirty terminal text.

  • A working directory for iteration artifacts.

3D Insert Gate

Enable `references/three-d-prompting.md` only when the user asks for a 3D figure, the reference is visibly 3D, or the parsed data requires a 3D encoding such as `x/y/z`, surfaces, trajectories, layered profiles, closed objects, 3D small multiples, 3D bars, or plane projections. Do not use this insert to turn an ordinary 2D task into 3D.

Architecture

  • **Python runner** owns UI lifecycle, cancellation, optional

data-gen, and launching the main `claude` process.

  • **The top-level `claude` process is Orchestrator only.** It owns iteration state,

role dispatch, artifact checks, Reviewer audit-view staging, deterministic review-gate invocation, stop decisions, and final selection.

  • **Drawer** runs as the named `figmirror-drawer` custom subagent through the

`Task` tool with `subagent_type="figmirror-drawer"` and `run_in_background=false`. It writes each iteration's matplotlib script, render, notes, and floor self-check in the staged workdir.

  • **Reviewer** runs as the named `figmirror-reviewer` custom subagent through the

`Task` tool with `subagent_type="figmirror-reviewer"` and `run_in_background=false`. It sees only the staged audit view: the far-view composite, full-resolution reference/draft near views, the Reviewer prompt, the aesthetic library, fixed diagnostics, and optional fixed 3D audit material. It returns strict JSON including `boxes`; `figannot.py review-decision` validates and records the result before any Drawer or finalization decision. The `Task` tool carries a single text prompt and has no attachment channel, so the Orchestrator gives the Reviewer an ordered list of absolute image paths and the Reviewer opens each one with `Read`, once, in that order.

  • **3D flow** uses the standard Orchestrator plus named Drawer/Reviewer

subagents, and optional candidate-scoring path for strict reproduction.

Workflow

1. Read these bundled references from this skill directory:

  • `references/preprocessor.md` for Stage-0 reference crop cleanup.
  • `references/orchestrator-claude.md` for loop wiring and stop conditions.

`references/orchestrator-codex.md` ships alongside it as the diff baseline for the port and must not be followed at runtime.

  • `references/drawer.md` for the Drawer instructions.
  • `references/reviewer.md` for the Reviewer instructions.
  • `references/aesthetic-library.md` for the L2 convention library.
  • `references/three-d-prompting.md` only when the 3D insert gate is enabled.

2. Preserve the uploaded reference as `inputs/reference_raw.png`, then run the reference preprocessor to write `inputs/reference_clean.png`, `inputs/reference_crop_check.png`, and `inputs/reference_crop_report.md`. It is dispatched as a general-purpose subagent — there is no named preprocessor role — per the Stage 0 section of `references/orchestrator-claude.md`. Skip it only when the runner already staged those three files. 3. Echo the parsed data structure before drawing. If the user explicitly asked you to make up data or proceed without confirmation, record that in `data_echo.md` and continue; otherwise ask for confirmation. 4. When the 3D insert gate is enabled, stage `references/three-d-prompting.md` plus `references/three-d/` beside the normal prompts. The router selects exactly one mode file: `three-d/style-transfer.md` for ordinary user-data figures, or `three-d/strict-reproduction.md` for reproduction, comparison, or candidate/control replacement. For strict 3D reproduction runs that need quantitative candidate diagnosis, also stage `scripts/score_3d_candidates.py`; do not use that scorer for ordinary style transfer. The top-level Orchestrator owns final selection and must run the selected mode's rendered-image gates before copying any candidate to the final figure. Always stage `scripts/figannot.py`; it is the deterministic operator for building audit composites and drawing Reviewer boxes. 5. The top-level agent follows `references/orchestrator-claude.md` and dispatches `figmirror-drawer` for each iter. Every Drawer prompt includes the exact trace line `Iter: <N>` with the current non-negative decimal iteration. The Drawer writes `figure_iter<N>.py`, `img_iter<N>.png`, `notes_iter<N>.md`, and `floor_selfcheck_iter<N>.txt`; the Orchestrator verifies those files before any Reviewer handoff. 6. Stage `audit_view_<N>`, run `scripts/figannot.py compose` to create `composite.png` and `review_prompt.txt`, fit the staged near views with `scripts/fit_images.py`, and dispatch `figmirror-reviewer` as described in `references/orchestrator-claude.md`. List `composite.png`, `reference_clean.png`, and `draft_fullres.

Read more
@vila-lab
Ships withfigmirror

An Automated AI Agent Tool for Plotting Your Data in Any Paper's Figure Style.

5525 skills5 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
552
Star history of VILA-Lab/FigMirror on GitHub, a chart by star-history.com

Other skills on figmirror.

openspec-apply-change

openspec-apply-change

Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through…

@vila-lab@vila-labInstall Skill
openspec-explore

openspec-explore

Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements. Use when the…

@vila-lab@vila-labInstall Skill
openspec-propose

openspec-propose

Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to…

@vila-lab@vila-labInstall Skill

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem04d69k
@mem0ai@mem0aiInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

posthog10d41k
@posthog@posthogInstall Skill

Questions about figmirror.

Which coding agents can use figmirror?
figmirror installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.