The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the PaperBanana listing page.
|
PaperBananaAutomated Academic Illustration for AI Scientists |
Disclaimer: This is an unofficial, community-driven open-source implementation of the paper "PaperBanana: Automating Academic Illustration for AI Scientists" by Dawei Zhu, Rui Meng, Yale Song, Xiyu Wei, Sujian Li, Tomas Pfister, and Jinsung Yoon (arXiv:2601.23265). This project is not affiliated with or endorsed by the original authors or Google Research. The implementation is based on the publicly available paper and may differ from the original system.
An agentic framework for generating publication-quality academic diagrams and statistical plots from text descriptions. Supports OpenAI (GPT-5.2 + GPT-Image-1.5), Azure OpenAI / Foundry, Google Gemini, and Atlas Cloud providers.
paperbanana plot-batch runs many statistical plots from one manifest (CSV/JSON per item)paperbanana[pdf] / PyMuPDF), with per-page selectionpaperbanana studio) for diagrams, plots, evaluation, batch, and run browser/generate-diagram, /generate-plot, and /evaluate-diagram
Atlas Cloud is a full-modal AI inference platform that gives developers a single AI API to access video generation, image generation, and LLM APIs. Instead of managing multiple vendor integrations, you connect once and get unified access to 300+ curated models across all modalities.
Check out Atlas Cloud's new coding plan promotion for more budget-friendly API access: https://www.atlascloud.ai/console/coding-plan
Try it in your browser: the Colab quickstart notebook walks through install → API key → diagram generation end-to-end, no local setup required.
Or install from source for development:
Build the image from a clone of the repo and pass your API key at runtime:
To generate a diagram, mount your input and an outputs folder into /work:
Or use the setup wizard for Gemini:
With input optimization and auto-refine:
Output is saved to outputs/run_<timestamp>/final_output.png along with all intermediate iterations and metadata.
Install the optional Gradio dependency, then start the app:
Open the URL shown in the terminal (default http://127.0.0.1:7860/). The Studio exposes the same workflows as the CLI: methodology diagrams, statistical plots, comparative evaluation, continuing a prior run, batch manifests (methodology or plot batch via the Batch tab), and a simple browser for run_* / batch_* output folders. Use --host, --port, --config, and --output-dir as needed.
PaperBanana implements a multi-agent pipeline with up to 7 specialized agents:
Phase 0 -- Input Optimization (optional, --optimize):
Phase 1 -- Linear Planning:
Phase 2 -- Iterative Refinement:
--auto)PaperBanana supports multiple VLM and image generation providers:
| Component | Provider | Model | Notes |
|---|---|---|---|
| VLM (planning, critique) | OpenAI | gpt-5.2 | Default |
| Image Generation | OpenAI | gpt-image-1.5 | Default |
| VLM | Atlas Cloud | deepseek-ai/DeepSeek-V3-0324 | OpenAI-compatible chat endpoint |
| Image Generation | Atlas Cloud | openai/gpt-image-2/text-to-image | Async prediction API |
| VLM | Google Gemini | gemini-2.5-flash | Low cost |
| Image Generation | Google Gemini | gemini-3-pro-image-preview | $0.134/image (1K) |
| VLM / Image | OpenRouter | Any supported model | Flexible routing |
Azure OpenAI / Foundry endpoints are auto-detected — set OPENAI_BASE_URL to your endpoint.
Gemini-compatible gateways are also supported — set GOOGLE_BASE_URL when needed.
Atlas Cloud uses ATLASCLOUD_BASE_URL=https://api.atlascloud.ai/v1 for chat and ATLASCLOUD_IMAGE_BASE_URL=https://api.atlascloud.ai/api/v1 for image generation.
Atlas Cloud official site: https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=paperbanana
Recommended Atlas LLM models for ATLASCLOUD_VLM_MODEL:
deepseek-ai/DeepSeek-V3-0324 (default)openai/gpt-4oopenai/gpt-4.1google/gemini-2.5-flashanthropic/claude-sonnet-4.5-20250929These are stable, generally available models verified against the Atlas Cloud API. The full, always-current model pool (300+ models) is documented on Atlas Cloud's own docs — see https://www.atlascloud.ai/models — and any model id listed there can be passed via ATLASCLOUD_VLM_MODEL.
Recommended Atlas image models for ATLASCLOUD_IMAGE_MODEL:
openai/gpt-image-2/text-to-imageopenai/gpt-image-2/editbaidu/ERNIE-Image-Turbo/text-to-imageblack-forest-labs/flux-devblack-forest-labs/flux-schnellqwen/qwen-imagepaperbanana generate -- Methodology Diagrams| Flag | Short | Description |
|---|---|---|
--input | -i | Path to methodology text file or PDF (required for new runs) |
--caption | -c | Figure caption / communicative intent (required for new runs) |
--image | Reference/sketch image (hand-drawn sketch, whiteboard photo, prior figure) that guides the Planner. Repeatable for multiple images | |
--output | -o | Output image path (default: auto-generated in outputs/) |
--iterations | -n | Number of Visualizer-Critic refinement rounds (default: 3) |
--num-candidates | -k | Generate N candidate images in parallel, 1-8 (default: 1). Planning runs once; refinement fans out per candidate with seed offsets. Outputs land in candidates/cand_<i>/; the run-root final_output is candidate 1. Cost estimates and --budget account for the fan-out |
--auto | Loop until critic is satisfied (with --max-iterations safety cap) | |
--max-iterations | Safety cap for --auto mode (default: 30) | |
--optimize | Preprocess inputs with parallel context enrichment and caption sharpening | |
--continue | Continue from the latest run in outputs/ | |
--continue-run | Continue from a specific run ID | |
--feedback | User feedback for the critic when continuing a run | |
--pdf-pages | PDF input only: 1-based pages (e.g. 1-5, 2,4,6-8; default: all) | |
--vlm-provider | VLM provider name (default: openai) | |
--vlm-model | VLM model name (default: gpt-5.2) | |
--image-provider | Image gen provider (default: openai_imagen) | |
--image-model | Image gen model (default: gpt-image-1.5) | |
--format | -f | Output format: png, jpeg, or webp (default: png) |
--config | Path to YAML config file (see configs/config.yaml) | |
--verbose | -v | Show detailed agent progress and timing |
--progress-json | Emit JSON progress events to stdout during generation |
paperbanana plot -- Statistical Plots| Flag | Short | Description |
|---|---|---|
--data | -d | Path to data file, CSV or JSON (required) |
--intent | Communicative intent for the plot (required) | |
--output | -o | Output image path |
--iterations | -n | Refinement iterations (default: 3) |
--vlm-provider | VLM provider name | |
--vlm-model | VLM model name |
Plots are rendered via VLM-generated matplotlib code — no image-generation provider or credentials are required.
paperbanana venues -- Custom Venue Style Packs--venue selects a venue style pack: a directory with methodology_style_guide.md, plot_style_guide.md, and an optional venue.yaml. Built-in packs (neurips, icml, acl, ieee) ship with PaperBanana; you can add your own under ~/.config/paperbanana/venues/ (override with --venue-dir or PAPERBANANA_VENUE_DIR) without touching the repo:
venue.yaml (all fields optional):
On a name clash, built-in packs win — user packs cannot shadow built-in venues. Unknown venue names fail fast with the list of available packs from both sources.
paperbanana batch -- Batch GenerationGenerate multiple methodology diagrams from a single manifest file (YAML or JSON). Each item runs the full pipeline; outputs are written under outputs/batch_<id>/run_<id>/ and a batch_report.json summarizes all runs.
Manifest format (YAML or JSON with an items list):
Paths in the manifest are resolved relative to the manifest file's directory.
Composite figures: Add an optional composite section to automatically stitch all generated panels into a single labeled figure after the batch completes:
The composite image is saved alongside the individual panels in the batch output directory. See examples/composite_batch_manifest.yaml for a complete example.
Generate a human-readable report from an existing batch run (Markdown or HTML):
Diagram batch reports include batch_kind: methodology; plot batches use batch_kind: statistical_plot. Human-readable reports (paperbanana batch-report) show the batch kind when present.
Sweep manifests let you store the full sweep plan as YAML/JSON instead of eight comma-separated CLI flags. Mutually exclusive with the axis flags; see examples/sweep_manifest.yaml.
Sweep reports produced by paperbanana sweep can be rendered the same way:
Rendered sweep reports include a summary, a top-5 ranked table, the full variants table (with per-variant provider/model, iterations, critic-suggestion count, proxy score, and output path), and the quality_proxy_score note. Dry-run reports render a simplified "Planned Variants" section.
| Flag | Short | Description |
|---|---|---|
--manifest | -m | Path to manifest file (required) |
--output-dir | -o | Parent directory for batch run (default: outputs) |
--config | Path to config YAML | |
--iterations | -n | Refinement iterations per item |
--optimize | Preprocess inputs for each item | |
--auto | Loop until critic satisfied per item | |
--format | -f | Output image format (png, jpeg, webp) |
--auto-download-data | Auto-download the PaperBananaBench reference set (~254 MB) if not cached |
paperbanana plot-batch -- Batch Statistical PlotsGenerate multiple plots from a manifest (YAML or JSON). Each item specifies a data file (CSV or JSON) and an intent string, mirroring paperbanana plot. Outputs live under outputs/batch_<id>/run_<id>/ with the same batch_report.json and paperbanana batch-report workflow as diagram batches.
Manifest format (items list):
Paths are resolved relative to the manifest file’s directory.
| Flag | Short | Description |
|---|---|---|
--manifest | -m | Path to manifest (required) |
--output-dir | -o | Parent directory for batch_* (default: outputs) |
--config | Path to config YAML | |
--vlm-provider | VLM provider (default: gemini) | |
--vlm-model | VLM model override | |
--image-provider | Image gen provider | |
--image-model | Image gen model | |
--iterations | -n | Refinement iterations per item |
--auto | Loop until critic satisfied per item | |
--max-iterations | Safety cap for --auto | |
--optimize | Input optimization per item | |
--format | -f | png, jpeg, or webp |
--save-prompts / --no-save-prompts | Persist prompts (default: on, same as plot) | |
--venue | Venue style pack: built-in (neurips, icml, acl, ieee), a user pack, or custom | |
--aspect-ratio | -ar | Default aspect ratio when not set in the manifest |
--verbose | -v | Verbose logging |
paperbanana orchestrate -- Full-Paper Figure PackageGenerate a publication-focused figure bundle from a full paper source, with optional data-driven plots. The command:
.txt, .md, or .pdf)figure_package.json, figures/, figures.tex, and captions.mdUse --dry-run to only plan and inspect orchestration_plan.json without API calls.
Use --resume-orchestrate <id-or-path> to continue an interrupted orchestration from checkpoint state.
| Flag | Description |
|---|---|
--paper / -p | Paper source path (.txt, .md, or .pdf) |
--resume-orchestrate | Resume an existing orchestration by ID or directory |
--retry-failed | When resuming, include previously failed tasks |
--max-retries | Extra retries per task after first failure |
--data-dir | Optional directory containing CSV/JSON files for plot planning |
--output-dir / -o | Parent output directory (creates orchestrate_*) |
--max-method-figures | Max methodology figures to plan/generate |
--max-plot-figures | Max plot figures to plan/generate |
--pdf-pages | PDF-only page selection (e.g. 1-5, 2,4,6-8) |
--optimize | Enable input optimization for generated items |
--iterations / -n | Refinement iterations per generated item |
--auto + --max-iterations | Critic-driven auto-refine mode with safety cap |
--concurrency | Parallel figure generation workers |
--format / -f | Output format (png, jpeg, webp) |
--dry-run | Plan package only; no generation calls |
paperbanana composite -- Compose Multi-Panel FiguresStitch multiple images into a single labeled figure with (a), (b), (c) sub-panel labels:
| Flag | Short | Description |
|---|---|---|
IMAGES | Positional: paths to images to compose | |
--layout | -l | Grid layout: RxC (e.g. 1x3, 2x2) or auto (default: auto) |
--labels | Comma-separated labels, or none to disable (default: auto (a),(b),...) | |
--spacing | -s | Pixel spacing between panels (default: 20) |
--label-position | top or bottom (default: bottom) | |
--label-font-size | Font size for labels (default: 32) | |
--output | -o | Output path (default: composite_output.png) |
This command works on any existing images — no API calls needed. It is also triggered automatically when a batch manifest includes a composite section (see paperbanana batch above).
paperbanana evaluate -- Quality AssessmentComparative evaluation of a generated diagram against a human reference using VLM-as-a-Judge:
| Flag | Short | Description |
|---|---|---|
--generated | -g | Path to generated image (required) |
--reference | -r | Path to human reference image (required) |
--context | Path to source context text file or PDF (required) | |
--caption | -c | Figure caption (required) |
--pdf-pages | PDF context only: 1-based page selection (default: all) |
Scores on 4 dimensions (hierarchical aggregation per the paper):
paperbanana polish -- Refine an Existing FigureBring your own figure: a VLM audits it against the venue style guide and proposes up to 10 concrete, actionable improvements, then an image-edit capable provider applies them to the original figure (guided edit). Suggestions are printed to the console so you can see exactly what changed.
| Flag | Short | Description |
|---|---|---|
--input | -i | Path to the existing figure image (required) |
--output | -o | Output path (default: outputs/polish_<timestamp>/final_output.png) |
--venue | Venue style guide: neurips (default), icml, acl, ieee, custom | |
--iterations | -n | Polish rounds; each round suggests and applies improvements on the previous result (default: 1) |
--aspect-ratio | -ar | Target aspect ratio (default: preserve the input figure's ratio) |
--num-candidates | -k | Apply each round's suggestions N times in parallel (1-8) |
--budget | Budget cap in USD; polishing stops gracefully when exceeded | |
--seed | Random seed for reproducible edits |
Requires an image provider that supports guided image edits (Google Gemini image models). If the figure already conforms to the style guide, polish exits without making changes.
paperbanana studio -- Local web UIRequires pip install 'paperbanana[studio]' (Gradio).
| Flag | Description |
|---|---|
--host | Bind address (default 127.0.0.1) |
--port | Port (default 7860) |
--share | Create a temporary public Gradio link (do not use with sensitive data) |
--config | Path to YAML config |
--output-dir / -o | Default output directory for runs |
--root-path | URL subpath when behind a reverse proxy |
paperbanana setup -- First-Time ConfigurationInteractive wizard that first asks whether to use the official Gemini API. If you choose official API, it follows the default AI Studio key flow; if not, it asks for a custom Gemini-compatible URL and API key.
paperbanana data -- Reference DatasetThe dataset is served from a project-hosted GitHub release mirror
(bench-data-v1)
and its SHA256 checksum is verified before extraction. Credit to the
PaperBananaBench authors —
the mirror tracks their 2026-03-22 revision. The set is cached under
~/.cache/paperbanana/ (override with PAPERBANANA_CACHE_DIR); generation
commands can also fetch it on first use via --auto-download-data.
Progress callbacks: generate() and continue_run() accept an optional progress_callback argument. The pipeline invokes it with PipelineProgressEvent objects (stage, message, seconds, iteration, extra) at each step (optimizer, retriever, planner, stylist, visualizer, critic), so you can show progress in UIs or log timing without patching agents.
To continue a previous run:
See examples/generate_diagram.py and examples/generate_plot.py for complete working examples.
PaperBanana includes an MCP server for use with Claude Code, Cursor, or any MCP-compatible client. Add the following config to use it via uvx without a local clone:
Eleven MCP tools are exposed: generate_diagram, generate_plot, continue_run (resume a prior run_* with optional feedback), continue_diagram, continue_plot, evaluate_diagram, evaluate_plot, orchestrate_figures (full-paper figure packages), batch_diagrams, batch_plots, and download_references.
The repo also ships with 3 Claude Code skills:
/generate-diagram <file> [caption] - generate a methodology diagram from a text file/generate-plot <data-file> [intent] - generate a statistical plot from CSV/JSON data/evaluate-diagram <generated> <reference> - evaluate a diagram against a human referenceSee mcp_server/README.md for full setup details (Claude Code, Cursor, local development).
Keep your paper's methodology figure in sync with the text — automatically. PaperBanana ships a GitHub Action that pairs with Overleaf's built-in GitHub sync: push your .tex changes, the action extracts the methodology section, generates the figure, and commits back the image plus a ready-to-\input LaTeX snippet. Pull in Overleaf and it's in your file tree.
See integrations/github-action/README.md for the full workflow, all inputs, and cost-control options.
Default settings are in configs/config.yaml. Override via CLI flags or a custom YAML:
Key settings:
Environment variables (.env):
This is an unofficial implementation. If you use this work, please cite the original paper:
Original paper: https://arxiv.org/abs/2601.23265
This project is an independent open-source reimplementation based on the publicly available paper. It is not affiliated with, endorsed by, or connected to the original authors, Google Research, or Peking University in any way. The implementation may differ from the original system described in the paper. Use at your own discretion.
MIT