FigMirror skill
A Claude Code and Codex skill that plots your data in the style of a figure from a scientific paper
- 552 ★ on the repository
- Last commit
Extended access
Why this level
- The installer runs as curl piped into bash and writes the skill and agents into Claude Code and Codex settings
- The agents generate and run Python scripts on your data in the working folder
- The web interface starts a local server on 127.0.0.1
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add skills/figmirrorDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- The installer runs as curl piped into bash and writes the skill and agents into Claude Code and Codex settings
- The agents generate and run Python scripts on your data in the working folder
- The web interface starts a local server on 127.0.0.1
This is third-party code. Review the repository files before installing.
What it does
FigMirror carries the look of a figure from a scientific paper over to your data. You attach a screenshot of the model figure (margins, captions and neighboring panels are fine) and paste data in any form: a table, CSV, TSV, Markdown or raw terminal text. The output is a self-contained matplotlib script with the data inside, plus a PNG and a PDF ready for publication. The work runs as a loop of two roles. An orchestrator in Claude Code or Codex hands the drawing to the `figmirror-drawer` agent and the checking to the `figmirror-reviewer` agent. The reviewer looks at an overview and at full-resolution crops of the model and the draft and returns remarks with bounding boxes on the image. The orchestrator turns them into an annotated image for the next pass. The number of iterations is hard-capped, and a list of things that must not change accumulates from pass to pass and keeps the style from drifting. Three-dimensional figures get separate prompts on camera, scale and lighting. They switch on only when the model or the data is truly 3D. If you have no suitable model, you can pick one in the Hugging Face gallery. For those who prefer a browser, a local web interface offers upload, iteration history and refinement of the result.
Who it is for. For researchers and graduate students who prepare figures for papers and want them to look like the publications of a given journal or conference.
Good fit when
- You want a figure styled like those in NeurIPS, ICML, ICLR or Nature papers, and you already have a screenshot of the model
- The data is raw, for example terminal output, and you need a finished figure with a camera-ready PDF
- You need an editable matplotlib script with the data inside so you can tweak colors and labels by hand later
- You need a three-dimensional figure: a surface, trajectories, a layered waterfall or plane projections
- You have no model at hand and want to pick one from a gallery of 139 figures across 25 chart families
Not a fit when
- You need advice on which chart type suits your conclusion: FigMirror copies the style of a model and does not choose the type
- You need an architecture or framework diagram: the skill plots data
- The machine has neither Claude Code nor Codex: the skill runs through their agents
- There is a lot of data and it needs preprocessing in a separate pipeline: the skill parses pasted tables
Example request
Use FigMirror to mirror this figure's style with my data: here is a screenshot of a figure from a paper and a table of results for three modelsLimitations
- Claude Code or Codex, uv and Python are required. The helper scripts run through uv; on machines with a small root disk set `UV_CACHE_DIR` to another partition before the first run.
- The model figure is passed as a screenshot, so result quality depends on how sharp the picture is.
- The author's roadmap still lists reproducible benchmark artifacts and documentation for more OpenAI-compatible and local backends.
- Each pass spends tokens of two agents, so long loops on complex figures cost noticeably more than a single request.
How to disable. Delete the `figmirror` folder and the `figmirror-drawer` and `figmirror-reviewer` agent files from the Claude Code (.claude) or Codex skills and agents directories. If you ran the web interface, stop the server process and delete the .artifacts/figmirror-workspace folder.
FAQ
How do I install FigMirror in Claude Code?
Tell Claude Code "Install FigMirror for me: https://github.com/VILA-Lab/FigMirror" and the agent does the setup. By hand, use curl -fsSL https://raw.githubusercontent.com/VILA-Lab/FigMirror/main/scripts/install.sh | bash -s -- --claude. The installer puts in the `figmirror` skill and two agents, a drawer and a reviewer.
How do I start the FigMirror web interface?
Clone the repository, run bash scripts/install.sh and start uv run python scripts/figcopy_serve.py --workspace .artifacts/figmirror-workspace --backend codex. For Claude Code switch the backend to claude. The interface opens at http://127.0.0.1:8765/ and offers upload of the model, iteration history and refinement.
What does FigMirror produce?
A matplotlib script with a data block inside, a PNG and a PDF for publication. You can edit the script by hand to change colors, labels and series order without rerunning the whole loop.
What if I have no model figure to imitate?
Open the Hugging Face gallery: it holds 139 paper figures across 25 chart families. Pick a suitable one, save it as a screenshot and attach it to your request.
How does FigMirror keep the style from drifting between iterations?
After each pass the reviewer returns a list of things to preserve, and the list accumulates. When the agents disagree or the drawer is unsure, an aesthetic library with style rules steps in, and the number of iterations is hard-capped.
Discussion
No questions or reviews yet.
Related
SkillsSciPilot Figure
scipilot-figure-skill
A scientific visualization advisor skill: it profiles the data and picks a chart for the argument first, then renders it to journal-grade quality
A data visualization skill for agents: turns data into polished interactive HTML charts and full reports with one visual language
Eight skills for math modeling contests that carry a task from the problem to a paper with figures and checked references
MCP server that connects Claude Code and Codex to an open R or Python session in RStudio and Positron, where your data lives
A three-stage workflow for math modeling tasks: analysis and model choice, Python or MATLAB computation, and paper assembly in Word or LaTeX
An agent skill that turns an arxiv paper into a minimal Python implementation, with code anchored to sections and equations and gaps flagged honestly
Comparison with similar tools
Entries that share the main search query, and how they differ.
| Entry | Official | Repository stars | Main difference |
|---|---|---|---|
| FigMirror (this entry) | no | 552 | |
| SciPilot Figure | no | 2,733 | an advisory skill that picks the chart type for the conclusion and draws it to journal requirements |
| Academic Figure Prompt | no | 2,785 | builds detailed prompts for image generators from a paper's text |
README in short
The README opens with a project timeline and results from the arXiv preprint, then shows pairs of model and output, a quick start and a description of the loop. It also carries a contributing list, a roadmap and a link to the PlotTwin-Bench evaluation set.
README badge
Original 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.