Figmirror
Restyle your data as a matplotlib figure matching a reference paper's visual style
Test report
- Verdict
- Tested · Works
- Score
- Tested
- Jul 21, 2026
- Environment
- Claude Code 2.x (agent harness)
- Upstream re-checked
- Aug 10, 2026 · 2a8a6d3
Located SKILL.md at .claude/skills/figmirror/SKILL.md; frontmatter parses with name+description. Spot-checked 6 body-referenced files (aesthetic-library.md, iter-loop-spec.md, the three figure-* agents, score_3d_candidates.py) all HTTP 200; aesthetic-library.md is 933 lines matching the "~900" claim. No security smells. Trigger tested with 5 phrasings (3 with reference-image+data should activate, 2 plain-matplotlib no-image should not) — all 5 judged correctly; the description's explicit negative case makes this clean. Output: rendered a BASELINE line chart at matplotlib defaults, then a SKILL chart applying the bundled L2 aesthetic-library values verbatim (serif+STIX, top/right despine at 0.6pt, #e0e0e0 gridlines, frameless tight legend, seaborn-deep palette, single-column figsize, pdf.fonttype=42 — Type-42 embedding verified in the PDF). Concrete, clearly paper-grade improvement over baseline. Caveat: I exercised only the L2 convention layer; the headline L1 vision-mirror loop against a real reference screenshot via the three dispatched subagents was not run (no reference image / vision iteration in my context), though the skill documents a main-thread fallback so it still functions skill-only.
Scored on four weighted criteria — install, triggering, output vs. baseline, docs. How scoring works
- Installs cleanly 5/5
- Triggers reliably 5/5
- Output vs. baseline 6/10
- Docs & honesty 4/5
What Figmirror does
Transfers the visual style of a reference paper figure (NeurIPS/ICML/Nature-style) onto your own data, emitting a self-contained matplotlib script plus PNG and a Type-42 PDF via an iterative Drawer/Reviewer loop. Triggers when you attach a paper-figure screenshot together with your data and ask to "mirror this figure's style", "make a chart that looks like this paper", or "reproduce this figure with my numbers". Does not trigger on plain matplotlib requests with no reference image.
How to install Figmirror
git clone --depth 1 https://github.com/VILA-Lab/FigMirror.git /tmp/figmirror-src
mkdir -p ~/.claude/skills ~/.claude/agents
cp -R /tmp/figmirror-src/.claude/skills/figmirror ~/.claude/skills/figmirror
cp /tmp/figmirror-src/.claude/agents/figure-preprocessor.md /tmp/figmirror-src/.claude/agents/figure-illustrator.md /tmp/figmirror-src/.claude/agents/figure-critic.md ~/.claude/agents/
# Requires python3 + matplotlib to run the generated figure scripts.
# The 3 agents above drive the Drawer/Reviewer loop; SKILL.md has a main-thread fallback if they are absent.
# Recommended installer (also wires Codex + local web UI): curl -fsSL https://raw.githubusercontent.com/VILA-Lab/FigMirror/main/scripts/install.sh | bash -s -- --claude
# Usage: attach a paper-figure screenshot + paste your data, then "mirror this figure's style with my data".
Skills live in ~/.claude/skills/ (global) or .claude/skills/
(per-project). Restart Claude Code after installing.
Commands — how to trigger Figmirror
-
/figmirrorRestyle your data as a matplotlib figure matching a reference paper's visual style
It also activates on plain-language prompts like these:
-
Mirror this paper figure's style with my dataset -
Make my chart look like this NeurIPS figure -
Reproduce this reference plot using my own data
Frequently asked questions
- Is the Figmirror skill free?
- Yes. The skill itself is free from VILA-Lab/FigMirror. SkillProof publishes the install command and an independent test verdict at no cost.
- Does Figmirror work with Claude Code?
- We tested it with Claude Code 2.x (agent harness) on Jul 21, 2026. Verdict: Tested · Works. Located SKILL.md at .claude/skills/figmirror/SKILL.md; frontmatter parses with name+description. Spot-checked 6 body-referenced files (aesthetic-library.md, iter-loop-spec.md, the three figure-* agents, score_3d_candidates.py) all HTTP 200; aesthetic-library.md is 933 lines matching the "~900" claim. No security smells. Trigger tested with 5 phrasings (3 with reference-image+data should activate, 2 plain-matplotlib no-image should not) — all 5 judged correctly; the description's explicit negative case makes this clean. Output: rendered a BASELINE line chart at matplotlib defaults, then a SKILL chart applying the bundled L2 aesthetic-library values verbatim (serif+STIX, top/right despine at 0.6pt, #e0e0e0 gridlines, frameless tight legend, seaborn-deep palette, single-column figsize, pdf.fonttype=42 — Type-42 embedding verified in the PDF). Concrete, clearly paper-grade improvement over baseline. Caveat: I exercised only the L2 convention layer; the headline L1 vision-mirror loop against a real reference screenshot via the three dispatched subagents was not run (no reference image / vision iteration in my context), though the skill documents a main-thread fallback so it still functions skill-only.
- What is the Figmirror SkillProof Score?
- 8.0/10 — installs cleanly 5/5, triggers reliably 5/5, output vs. baseline 6/10, docs & honesty 4/5.
- How do I install Figmirror?
- Copy the install command from this page, run it in your terminal, and restart Claude Code. Skills live in ~/.claude/skills/ (global) or .claude/skills/ inside a project.
- Can I use Figmirror with Cursor, Copilot, Gemini CLI, Codex or other AI tools?
- The SKILL.md format is native to Claude (Claude Code, Desktop, claude.ai). The instructions inside adapt to other assistants: Cursor rules, GitHub Copilot instructions, Windsurf rules, Custom GPTs, AGENTS.md for OpenAI Codex, and GEMINI.md for Google Gemini CLI — our conversion guides cover each, and the free converter on the tools page does the wrapping for you.