paperbanana

Gere diagramas de metodologia para o seu artigo de pesquisa

Documentação

PaperBanana Logo

PaperBanana

Ilustração Acadêmica Automatizada para Cientistas de IA

CI PyPI Downloads Demo Open in Colab
Python 3.10+ arXiv License: MIT
Pydantic v2 Typer Gemini Free Tier

llmsresearch%2Fpaperbanana | Trendshift llmsresearch%2Fpaperbanana | Trendshift


Aviso: Esta é uma implementação de código aberto não oficial, conduzida pela comunidade do artigo "PaperBanana: Automating Academic Illustration for AI Scientists" de Dawei Zhu, Rui Meng, Yale Song, Xiyu Wei, Sujian Li, Tomas Pfister e Jinsung Yoon (arXiv:2601.23265). Este projeto não é afiliado ou endossado pelos autores originais ou pela Google Research. A implementação é baseada no artigo publicamente disponível e pode diferir do sistema original.

Um framework agêntico para gerar diagramas acadêmicos de qualidade de publicação e gráficos estatísticos a partir de descrições de texto. Suporta OpenAI (GPT-5.2 + GPT-Image-1.5), Azure OpenAI / Foundry, Google Gemini e provedores Atlas Cloud.

  • Pipeline multiagente em duas fases com refinamento iterativo
  • Múltiplos provedores de VLM e geração de imagens (OpenAI, Azure, Gemini, Atlas Cloud)
  • Camada de otimização de entrada para melhor qualidade de geração
  • Modo de refinamento automático e continuação de execução com feedback do usuário
  • CLI, API Python e servidor MCP para integração com IDE
  • Geração em lote a partir de um arquivo de manifesto (YAML/JSON) para múltiplos diagramas em uma única execução
  • Gráficos em lote — paperbanana plot-batch executa muitos gráficos estatísticos a partir de um manifesto (CSV/JSON por item)
  • Entradas em PDF para contexto de metodologia (opcional paperbanana[pdf] / PyMuPDF), com seleção por página
  • PaperBanana Studio — interface web local em Gradio (paperbanana studio) para diagramas, gráficos, avaliação, lote e navegador de execuções
  • Habilidades Claude Code para /generate-diagram, /generate-plot e /evaluate-diagram

PaperBanana takes paper as input and provide diagram as output

Aprendendo conceitos de LLM? Também publicamos 211 cartões visuais gratuitos sobre atenção, RAG, agentes e inferência. Leia-os online.

Atlas Cloud

Atlas Cloud Logo

Atlas Cloud é uma plataforma de inferência de IA multimodal que dá aos desenvolvedores uma única API de IA para acessar APIs de geração de vídeo, geração de imagens e LLM. Em vez de gerenciar múltiplas integrações de fornecedores, você conecta uma vez e obtém acesso unificado a mais de 300 modelos selecionados em todas as modalidades.

Confira a nova promoção do plano de codificação da Atlas Cloud para acesso mais econômico à API: https://www.atlascloud.ai/console/coding-plan


Início Rápido

Experimente no seu navegador: o notebook de início rápido do Colab percorre instalação → chave de API → geração de diagrama de ponta a ponta, sem necessidade de configuração local.

Pré-requisitos

Passo 1: Instalar

pip install paperbanana

Ou instale a partir do código-fonte para desenvolvimento:

git clone https://github.com/llmsresearch/paperbanana.git
cd paperbanana
pip install -e ".[dev,openai,google]"

Docker

Construa a imagem a partir de um clone do repositório e passe sua chave de API em tempo de execução:

docker build -t paperbanana .
docker run --rm -e GOOGLE_API_KEY paperbanana generate --help

Para gerar um diagrama, monte sua entrada e uma pasta de saídas em /work:

docker run --rm -e GOOGLE_API_KEY \
  -v "$(pwd)/method.txt:/work/method.txt:ro" \
  -v "$(pwd)/outputs:/work/outputs" \
  paperbanana generate --input method.txt --caption "Overview of our framework"

Passo 2: Obtenha Sua Chave de API

cp .env.example .env
# Edit .env and add your API key:
#   OPENAI_API_KEY=your-key-here
#   GOOGLE_API_KEY=your-key-here
#
# For Azure OpenAI / Foundry:
#   OPENAI_BASE_URL=https://<resource>.openai.azure.com/openai/v1
#
# Optional Gemini overrides:
#   GOOGLE_BASE_URL=https://your-gemini-proxy.example.com
#   GOOGLE_VLM_MODEL=gemini-2.5-flash
#   GOOGLE_IMAGE_MODEL=gemini-3-pro-image-preview

Ou use o assistente de configuração para Gemini:

paperbanana setup

Passo 3: Gere um Diagrama

paperbanana generate \
  --input examples/sample_inputs/transformer_method.txt \
  --caption "Overview of our encoder-decoder architecture with sparse routing"

Com otimização de entrada e refinamento automático:

paperbanana generate \
  --input my_method.txt \
  --caption "Overview of our encoder-decoder framework" \
  --optimize --auto

A saída é salva em outputs/run_<timestamp>/final_output.png junto com todas as iterações intermediárias e metadados.

PaperBanana Studio (interface web local)

Instale a dependência opcional do Gradio e inicie o aplicativo:

pip install 'paperbanana[studio]'
paperbanana studio

Abra a URL mostrada no terminal (padrão http://127.0.0.1:7860/). O Studio expõe os mesmos fluxos de trabalho da CLI: diagramas de metodologia, gráficos estatísticos, avaliação comparativa, continuação de uma execução anterior, manifestos em lote (metodologia ou lote de gráficos via aba Lote) e um navegador simples para pastas de saída run_* / batch_*. Use --host, --port, --config e --output-dir conforme necessário.


Como Funciona

O PaperBanana implementa um pipeline multiagente com até 7 agentes especializados:

Fase 0 -- Otimização de Entrada (opcional, --optimize):

  1. Otimizador de Entrada executa duas chamadas VLM em paralelo:
    • Enriquecedor de Contexto estrutura o texto bruto da metodologia em formato pronto para diagrama (componentes, fluxos, agrupamentos, E/S)
    • Afiador de Legenda transforma legendas vagas em especificações visuais precisas

Fase 1 -- Planejamento Linear:

  1. Recuperador seleciona os exemplos de referência mais relevantes de um conjunto curado de 13 diagramas de metodologia abrangendo domínios de agente/raciocínio, visão/percepção, generativo/aprendizado e ciência/aplicações
  2. Planejador gera uma descrição textual detalhada do diagrama alvo via aprendizado em contexto a partir dos exemplos recuperados
  3. Estilista refina a descrição para estética visual usando diretrizes de estilo NeurIPS (paleta de cores, layout, tipografia)

Fase 2 -- Refinamento Iterativo:

  1. Visualizador renderiza a descrição em uma imagem
  2. Crítico avalia a imagem gerada em relação ao contexto de origem e fornece uma descrição revisada abordando quaisquer problemas
  3. Os passos 4-5 se repetem por um número fixo de iterações (padrão 3), ou até que o crítico esteja satisfeito (--auto)

Provedores

O PaperBanana suporta múltiplos provedores de VLM e geração de imagens:

ComponenteProvedorModeloNotas
VLM (planejamento, crítica)OpenAIgpt-5.2Padrão
Geração de ImagensOpenAIgpt-image-1.5Padrão
VLMAtlas Clouddeepseek-ai/DeepSeek-V3-0324Endpoint de chat compatível com OpenAI
Geração de ImagensAtlas Cloudopenai/gpt-image-2/text-to-imageAPI de previsão assíncrona
VLMGoogle Geminigemini-2.5-flashBaixo custo
Geração de ImagensGoogle Geminigemini-3-pro-image-preview$0,134/imagem (1K)
VLM / ImagemOpenRouterQualquer modelo suportadoRoteamento flexível

Endpoints Azure OpenAI / Foundry são detectados automaticamente — defina OPENAI_BASE_URL para seu endpoint. Gateways compatíveis com Gemini também são suportados — defina GOOGLE_BASE_URL quando necessário. A Atlas Cloud usa ATLASCLOUD_BASE_URL=https://api.atlascloud.ai/v1 para chat e ATLASCLOUD_IMAGE_BASE_URL=https://api.atlascloud.ai/api/v1 para geração de imagens.

Site oficial da Atlas Cloud: https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=paperbanana

Modelos LLM Atlas recomendados para ATLASCLOUD_VLM_MODEL:

  • deepseek-ai/DeepSeek-V3-0324 (padrão)
  • openai/gpt-4o
  • openai/gpt-4.1
  • google/gemini-2.5-flash
  • anthropic/claude-sonnet-4.5-20250929

Estes são modelos estáveis, geralmente disponíveis, verificados contra a API da Atlas Cloud. O pool completo de modelos, sempre atualizado (300+ modelos), está documentado na própria documentação da Atlas Cloud — veja https://www.atlascloud.ai/models — e qualquer id de modelo listado lá pode ser passado via ATLASCLOUD_VLM_MODEL.

Modelos de imagem Atlas recomendados para ATLASCLOUD_IMAGE_MODEL:

  • openai/gpt-image-2/text-to-image
  • openai/gpt-image-2/edit
  • baidu/ERNIE-Image-Turbo/text-to-image
  • black-forest-labs/flux-dev
  • black-forest-labs/flux-schnell
  • qwen/qwen-image

Referência da CLI

paperbanana generate -- Diagramas de Metodologia

# Basic generation
paperbanana generate \
  --input method.txt \
  --caption "Overview of our framework"

# With input optimization and auto-refine
paperbanana generate \
  --input method.txt \
  --caption "Overview of our framework" \
  --optimize --auto

# Continue the latest run with user feedback
paperbanana generate --continue \
  --feedback "Make arrows thicker and colors more distinct"

# Continue a specific run
paperbanana generate --continue-run run_20260218_125448_e7b876 \
  --iterations 3

# PDF as input (install PyMuPDF: pip install 'paperbanana[pdf]')
paperbanana generate \
  --input paper.pdf \
  --caption "Overview of our method" \
  --pdf-pages "3-8"

# Guide generation with a reference/sketch image (repeatable)
paperbanana generate \
  --input method.txt \
  --caption "Overview of our framework" \
  --image sketch.png --image prior_figure.png
FlagCurtoDescrição
--input-iCaminho para arquivo de texto de metodologia ou PDF (obrigatório para novas execuções)
--caption-cLegenda da figura / intenção comunicativa (obrigatório para novas execuções)
--imageImagem de referência/esboço (esboço à mão, foto de quadro branco, figura anterior) que guia o Planejador. Repetível para múltiplas imagens
--output-oCaminho da imagem de saída (padrão: gerado automaticamente em outputs/)
--iterations-nNúmero de rodadas de refinamento Visualizador-Crítico (padrão: 3)
--num-candidates-kGera N imagens candidatas em paralelo, 1-8 (padrão: 1). O planejamento executa uma vez; o refinamento se expande por candidato com deslocamentos de semente. As saídas ficam em candidates/cand_<i>/; a raiz da execução final_output é o candidato 1. As estimativas de custo e --budget consideram a expansão
--autoLoop até o crítico estar satisfeito (com limite de segurança --max-iterations)
--max-iterationsLimite de segurança para o modo --auto (padrão: 30)
--optimizePré-processa entradas com enriquecimento de contexto paralelo e afiação de legenda
--continueContinua da execução mais recente em outputs/
--continue-runContinua de um ID de execução específico
--feedbackFeedback do usuário para o crítico ao continuar uma execução
--pdf-pagesApenas entrada em PDF: páginas baseadas em 1 (ex.: 1-5, 2,4,6-8; padrão: todas)
--vlm-providerNome do provedor VLM (padrão: openai)
--vlm-modelNome do modelo VLM (padrão: gpt-5.2)
--image-providerProvedor de geração de imagens (padrão: openai_imagen)
--image-modelModelo de geração de imagens (padrão: gpt-image-1.5)
--format-fFormato de saída: png, jpeg ou webp (padrão: png)
--configCaminho para arquivo de configuração YAML (veja configs/config.yaml)
--verbose-vMostra progresso detalhado do agente e tempos
--progress-jsonEmite eventos de progresso JSON para stdout durante a geração

paperbanana plot -- Gráficos Estatísticos

paperbanana plot \
  --data results.csv \
  --intent "Bar chart comparing model accuracy across benchmarks"
FlagCurtoDescrição
--data-dCaminho para arquivo de dados, CSV ou JSON (obrigatório)
--intentIntenção comunicativa para o gráfico (obrigatório)
--output-oCaminho da imagem de saída
--iterations-nIterações de refinamento (padrão: 3)
--vlm-providerNome do provedor VLM
--vlm-modelNome do modelo VLM

Os gráficos são renderizados via código matplotlib gerado por VLM — nenhum provedor de geração de imagens ou credenciais são necessários.

paperbanana venues -- Pacotes de Estilo de Local Personalizados

--venue seleciona um pacote de estilo de local: um diretório com methodology_style_guide.md, plot_style_guide.md e um venue.yaml opcional. Pacotes integrados (neurips, icml, acl, ieee) acompanham o PaperBanana; você pode adicionar os seus próprios em ~/.config/paperbanana/venues/ (substitua com --venue-dir ou PAPERBANANA_VENUE_DIR) sem tocar no repositório:

# 1. Scaffold a pack (seeds both guides from the NeurIPS templates)
paperbanana venues init mylab

# 2. Edit the style guides — or generate them from a corpus of example figures:
#    paperbanana guidelines synthesize --reference-set ./examples \
#      --output ~/.config/paperbanana/venues/mylab/methodology_style_guide.md

# 3. Use it anywhere --venue is accepted
paperbanana generate --input method.txt --caption "Overview" --venue mylab

# See everything that's available (built-in + user, with source)
paperbanana venues list

venue.yaml (todos os campos opcionais):

display_name: "My Lab Style"  # shown by `paperbanana venues list`
aspect_ratio: "16:9"          # default --aspect-ratio for this venue's runs
fonts:                        # preferred fonts, appended to the style guides
  - "Helvetica"

Em caso de conflito de nomes, os pacotes integrados vencem — pacotes de usuário não podem sobrepor locais integrados. Nomes de locais desconhecidos falham rapidamente com a lista de pacotes disponíveis de ambas as fontes.

paperbanana batch -- Geração em Lote

Gere múltiplos diagramas de metodologia a partir de um único arquivo de manifesto (YAML ou JSON). Cada item executa o pipeline completo; as saídas são gravadas em outputs/batch_<id>/run_<id>/ e um batch_report.json resume todas as execuções.

paperbanana batch --manifest examples/batch_manifest.yaml --optimize

Formato do manifesto (YAML ou JSON com uma lista items):

items:
  - input: path/to/method1.txt
    caption: "Overview of our encoder-decoder"
    id: fig1
  - input: method2.txt
    caption: "Training pipeline"
    id: fig2
  - input: paper.pdf
    caption: "System overview"
    id: fig3
    pdf_pages: "4-9" # optional; PDF inputs only

Os caminhos no manifesto são resolvidos em relação ao diretório do arquivo de manifesto. Figuras compostas: Adicione uma seção opcional composite para combinar automaticamente todos os painéis gerados em uma única figura rotulada após a conclusão do lote:

composite:
  layout: "1x3"          # rows x cols, or "auto"
  labels: auto            # (a), (b), (c)... or explicit list, or null
  spacing: 20             # pixels between panels
  label_position: bottom  # top or bottom
  output: "composite.png"

items:
  - input: method_encoder.txt
    caption: "Encoder architecture"
    id: panel_a
  # ...

A imagem composta é salva junto aos painéis individuais no diretório de saída do lote. Consulte examples/composite_batch_manifest.yaml para um exemplo completo.

Gere um relatório legível por humanos a partir de uma execução de lote existente (Markdown ou HTML):

paperbanana batch-report --batch-dir outputs/batch_20250109_123456_abc --format markdown
# or by batch ID (under default output dir)
paperbanana batch-report --batch-id batch_20250109_123456_abc --format html --output report.html

Relatórios de lote de diagramas incluem batch_kind: methodology; lotes de gráficos usam batch_kind: statistical_plot. Relatórios legíveis por humanos (paperbanana batch-report) mostram o tipo de lote quando presente.

Manifestos de varredura permitem armazenar o plano completo de varredura como YAML/JSON em vez de oito flags de CLI separadas por vírgula. Mutuamente exclusivos com as flags de eixo; consulte examples/sweep_manifest.yaml.

paperbanana sweep --manifest examples/sweep_manifest.yaml

Relatórios de varredura produzidos por paperbanana sweep podem ser renderizados da mesma forma:

paperbanana sweep-report --sweep-dir outputs/sweep_20250109_123456_abc --format html
# or by sweep ID
paperbanana sweep-report --sweep-id sweep_20250109_123456_abc --format markdown

Relatórios de varredura renderizados incluem um resumo, uma tabela classificada top-5, a tabela completa de variantes (com provedor/modelo por variante, iterações, contagem de sugestões do crítico, pontuação proxy e caminho de saída) e a nota quality_proxy_score. Relatórios de execução simulada renderizam uma seção simplificada "Variantes Planejadas".

FlagCurtoDescrição
--manifest-mCaminho para o arquivo de manifesto (obrigatório)
--output-dir-oDiretório pai para a execução do lote (padrão: outputs)
--configCaminho para o YAML de configuração
--iterations-nIterações de refinamento por item
--optimizePré-processar entradas para cada item
--autoRepetir até o crítico ficar satisfeito por item
--format-fFormato de imagem de saída (png, jpeg, webp)
--auto-download-dataBaixar automaticamente o conjunto de referência PaperBananaBench (~254 MB) se não estiver em cache

paperbanana plot-batch -- Gráficos Estatísticos em Lote

Gere múltiplos gráficos a partir de um manifesto (YAML ou JSON). Cada item especifica um arquivo de dados (CSV ou JSON) e uma string de intenção, espelhando paperbanana plot. As saídas ficam em outputs/batch_<id>/run_<id>/ com o mesmo fluxo de trabalho batch_report.json e paperbanana batch-report dos lotes de diagramas.

paperbanana plot-batch --manifest examples/plot_batch_manifest.yaml --optimize

Formato do manifesto (lista items):

items:
  - data: path/to/results.csv
    intent: "Bar chart comparing accuracy across models"
    id: fig_acc
  - data: other.json
    intent: "Scatter plot with trend line"
    aspect_ratio: "16:9"   # optional per item; CLI --aspect-ratio is the default when omitted

Os caminhos são resolvidos em relação ao diretório do arquivo de manifesto.

FlagCurtoDescrição
--manifest-mCaminho para o manifesto (obrigatório)
--output-dir-oDiretório pai para batch_* (padrão: outputs)
--configCaminho para o YAML de configuração
--vlm-providerProvedor VLM (padrão: gemini)
--vlm-modelSubstituição do modelo VLM
--image-providerProvedor de geração de imagem
--image-modelModelo de geração de imagem
--iterations-nIterações de refinamento por item
--autoRepetir até o crítico ficar satisfeito por item
--max-iterationsLimite de segurança para --auto
--optimizeOtimização de entrada por item
--format-fpng, jpeg ou webp
--save-prompts / --no-save-promptsPersistir prompts (padrão: ativado, igual a plot)
--venuePacote de estilo de evento: integrado (neurips, icml, acl, ieee), um pacote de usuário ou custom
--aspect-ratio-arProporção de aspecto padrão quando não definida no manifesto
--verbose-vRegistro detalhado

paperbanana orchestrate -- Pacote de Figuras de Artigo Completo

Gere um pacote de figuras focado em publicação a partir de uma fonte de artigo completo, com gráficos opcionais orientados a dados. O comando:

  • analisa o artigo (.txt, .md ou .pdf)
  • planeja múltiplas figuras de metodologia a partir da estrutura de seções
  • opcionalmente descobre arquivos CSV/JSON para planejar gráficos estatísticos
  • executa a geração de todos os itens planejados
  • escreve uma pasta de pacote contendo figure_package.json, figures/, figures.tex e captions.md
paperbanana orchestrate \
  --paper paper.pdf \
  --data-dir ./results \
  --max-method-figures 4 \
  --max-plot-figures 3 \
  --optimize

Use --dry-run para apenas planejar e inspecionar orchestration_plan.json sem chamadas de API. Use --resume-orchestrate <id-or-path> para continuar uma orquestração interrompida a partir do estado de checkpoint.

FlagDescrição
--paper / -pCaminho da fonte do artigo (.txt, .md ou .pdf)
--resume-orchestrateRetomar uma orquestração existente por ID ou diretório
--retry-failedAo retomar, incluir tarefas que falharam anteriormente
--max-retriesTentativas extras por tarefa após a primeira falha
--data-dirDiretório opcional contendo arquivos CSV/JSON para planejamento de gráficos
--output-dir / -oDiretório de saída pai (cria orchestrate_*)
--max-method-figuresMáximo de figuras de metodologia para planejar/gerar
--max-plot-figuresMáximo de figuras de gráficos para planejar/gerar
--pdf-pagesSeleção de páginas somente PDF (ex.: 1-5, 2,4,6-8)
--optimizeHabilitar otimização de entrada para itens gerados
--iterations / -nIterações de refinamento por item gerado
--auto + --max-iterationsModo de refinamento automático orientado por crítico com limite de segurança
--concurrencyTrabalhadores paralelos de geração de figuras
--format / -fFormato de saída (png, jpeg, webp)
--dry-runApenas planejar pacote; sem chamadas de geração

paperbanana composite -- Compor Figuras Multi-Painel

Combine múltiplas imagens em uma única figura rotulada com rótulos de sub-painel (a), (b), (c):

paperbanana composite \
  panel_a.png panel_b.png panel_c.png \
  --layout 1x3 \
  --output figure2.png
FlagCurtoDescrição
IMAGESPosicional: caminhos para as imagens a compor
--layout-lLayout de grade: RxC (ex.: 1x3, 2x2) ou auto (padrão: automático)
--labelsRótulos separados por vírgula, ou none para desativar (padrão: automático (a),(b),...)
--spacing-sEspaçamento em pixels entre painéis (padrão: 20)
--label-positiontop ou bottom (padrão: inferior)
--label-font-sizeTamanho da fonte para rótulos (padrão: 32)
--output-oCaminho de saída (padrão: composite_output.png)

Este comando funciona em qualquer imagem existente — nenhuma chamada de API necessária. Também é acionado automaticamente quando um manifesto de lote inclui uma seção composite (veja paperbanana batch acima).

paperbanana evaluate -- Avaliação de Qualidade

Avaliação comparativa de um diagrama gerado contra uma referência humana usando VLM-como-Juiz:

paperbanana evaluate \
  --generated diagram.png \
  --reference human_diagram.png \
  --context method.txt \
  --caption "Overview of our framework"
FlagCurtoDescrição
--generated-gCaminho para a imagem gerada (obrigatório)
--reference-rCaminho para a imagem de referência humana (obrigatório)
--contextCaminho para o arquivo de texto de contexto de origem ou PDF (obrigatório)
--caption-cLegenda da figura (obrigatório)
--pdf-pagesSomente contexto PDF: seleção de páginas baseada em 1 (padrão: todas)

Pontuações em 4 dimensões (agregação hierárquica conforme o artigo):

  • Primárias: Fidelidade, Legibilidade
  • Secundárias: Concisão, Estética

paperbanana polish -- Refinar uma Figura Existente

Traga sua própria figura: um VLM a audita contra o guia de estilo do evento e propõe até 10 melhorias concretas e acionáveis, então um provedor capaz de edição de imagem as aplica à figura original (edição guiada). As sugestões são impressas no console para que você veja exatamente o que mudou.

paperbanana polish --input figure.png
paperbanana polish --input figure.png --venue icml --iterations 2 --output polished.png
FlagCurtoDescrição
--input-iCaminho para a imagem da figura existente (obrigatório)
--output-oCaminho de saída (padrão: outputs/polish_<timestamp>/final_output.png)
--venueGuia de estilo do evento: neurips (padrão), icml, acl, ieee, custom
--iterations-nRodadas de polimento; cada rodada sugere e aplica melhorias no resultado anterior (padrão: 1)
--aspect-ratio-arProporção de aspecto alvo (padrão: preservar a proporção da figura de entrada)
--num-candidates-kAplicar as sugestões de cada rodada N vezes em paralelo (1-8)
--budgetLimite de orçamento em USD; o polimento para graciosamente quando excedido
--seedSemente aleatória para edições reproduzíveis

Requer um provedor de imagem que suporte edições de imagem guiadas (modelos de imagem Google Gemini). Se a figura já estiver em conformidade com o guia de estilo, o polimento sai sem fazer alterações.

paperbanana studio -- Interface web local

Requer pip install 'paperbanana[studio]' (Gradio).

paperbanana studio
paperbanana studio --port 8080 --output-dir ./my_outputs
FlagDescrição
--hostEndereço de vinculação (padrão 127.0.0.1)
--portPorta (padrão 7860)
--shareCriar um link público temporário do Gradio (não use com dados sensíveis)
--configCaminho para o YAML de configuração
--output-dir / -oDiretório de saída padrão para execuções
--root-pathSubcaminho de URL quando atrás de um proxy reverso

paperbanana setup -- Configuração Inicial

paperbanana setup

Assistente interativo que primeiro pergunta se deseja usar a API oficial do Gemini. Se você escolher a API oficial, ele segue o fluxo padrão de chave do AI Studio; se não, ele pede uma URL personalizada compatível com Gemini e uma chave de API.

paperbanana data -- Conjunto de Dados de Referência

# Download the PaperBananaBench reference set (~254 MB, one command)
paperbanana data download

# Import plot references too (or both)
paperbanana data download --task plot
paperbanana data download --task both

# Inspect / clear the cache
paperbanana data info
paperbanana data clear

O conjunto de dados é servido a partir de um espelho de release do GitHub hospedado pelo projeto (bench-data-v1) e sua soma de verificação SHA256 é verificada antes da extração. Crédito aos autores do PaperBananaBench — o espelho acompanha a revisão de 2026-03-22 deles. O conjunto é armazenado em cache em ~/.cache/paperbanana/ (substituível com PAPERBANANA_CACHE_DIR); comandos de geração também podem buscá-lo no primeiro uso via --auto-download-data.


API Python

import asyncio
from paperbanana import PaperBananaPipeline, GenerationInput, DiagramType
from paperbanana.core.config import Settings

settings = Settings(
    vlm_provider="openai",
    vlm_model="gpt-5.2",
    image_provider="openai_imagen",
    image_model="gpt-image-1.5",
    optimize_inputs=True,   # Enable input optimization
    auto_refine=True,       # Loop until critic is satisfied
)

pipeline = PaperBananaPipeline(settings=settings)

result = asyncio.run(pipeline.generate(
    GenerationInput(
        source_context="Our framework consists of...",
        communicative_intent="Overview of the proposed method.",
        diagram_type=DiagramType.METHODOLOGY,
    )
))

print(f"Output: {result.image_path}")

Callbacks de progresso: generate() e continue_run() aceitam um argumento opcional progress_callback. O pipeline o invoca com objetos PipelineProgressEvent (estágio, mensagem, segundos, iteração, extra) em cada etapa (otimizador, recuperador, planejador, estilista, visualizador, crítico), para que você possa mostrar progresso em UIs ou registrar tempos sem corrigir agentes.

Para continuar uma execução anterior:

from paperbanana.core.resume import load_resume_state

state = load_resume_state("outputs", "run_20260218_125448_e7b876")
result = asyncio.run(pipeline.continue_run(
    resume_state=state,
    additional_iterations=3,
    user_feedback="Make the encoder block more prominent",
))

Consulte examples/generate_diagram.py e examples/generate_plot.py para exemplos completos e funcionais.


Servidor MCP

O PaperBanana inclui um servidor MCP para uso com Claude Code, Cursor ou qualquer cliente compatível com MCP. Adicione a seguinte configuração para usá-lo via uvx sem um clone local:

{
  "mcpServers": {
    "paperbanana": {
      "command": "uvx",
      "args": ["--from", "paperbanana[mcp]", "paperbanana-mcp"],
      "env": { "GOOGLE_API_KEY": "your-google-api-key" }
    }
  }
}

Onze ferramentas MCP são expostas: generate_diagram, generate_plot, continue_run (retomar um run_* anterior com feedback opcional), continue_diagram, continue_plot, evaluate_diagram, evaluate_plot, orchestrate_figures (pacotes de figuras de artigo completo), batch_diagrams, batch_plots e download_references.

O repositório também inclui 3 habilidades do Claude Code:

  • /generate-diagram <file> [caption] - gerar um diagrama de metodologia a partir de um arquivo de texto
  • /generate-plot <data-file> [intent] - gerar um gráfico estatístico a partir de dados CSV/JSON
  • /evaluate-diagram <generated> <reference> - avaliar um diagrama contra uma referência humana

Consulte mcp_server/README.md para detalhes completos de configuração (Claude Code, Cursor, desenvolvimento local).


Integração Overleaf (GitHub Action)

Mantenha a figura de metodologia do seu artigo em sincronia com o texto — automaticamente. O PaperBanana inclui uma GitHub Action que se integra à sincronização GitHub integrada do Overleaf: envie suas alterações .tex, a action extrai a seção de metodologia, gera a figura e envia de volta a imagem mais um trecho LaTeX pronto para \input. Puxe no Overleaf e ele estará na sua árvore de arquivos.

- uses: actions/checkout@v4
- uses: llmsresearch/paperbanana/integrations/github-action@main
  with:
    tex-file: sections/method.tex
    caption: "Overview of our proposed framework"
  env:
    OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

Consulte integrations/github-action/README.md para ver o fluxo de trabalho completo, todas as entradas e opções de controle de custos.


Configuração

As configurações padrão estão em configs/config.yaml. Substitua-as por meio de flags de CLI ou de um YAML personalizado:

paperbanana generate \
  --input method.txt \
  --caption "Overview" \
  --config my_config.yaml

Configurações principais:

vlm:
  provider: openai           # openai, atlas, gemini, or openrouter
  model: gpt-5.2

image:
  provider: openai_imagen    # openai_imagen, atlas_imagen, google_imagen, or openrouter_imagen
  model: gpt-image-1.5

pipeline:
  num_retrieval_examples: 10
  refinement_iterations: 3
  # auto_refine: true        # Loop until critic is satisfied
  # max_iterations: 30       # Safety cap for auto_refine mode
  # optimize_inputs: true    # Preprocess inputs for better generation
  output_resolution: "2k"

reference:
  path: data/reference_sets

output:
  dir: outputs
  save_iterations: true
  save_metadata: true

Variáveis de ambiente (.env):

# OpenAI (default)
OPENAI_API_KEY=your-key
OPENAI_BASE_URL=https://api.openai.com/v1    # or Azure endpoint
OPENAI_VLM_MODEL=gpt-5.2                      # override model
OPENAI_IMAGE_MODEL=gpt-image-1.5              # override model

# Atlas Cloud
ATLASCLOUD_API_KEY=your-key
ATLASCLOUD_BASE_URL=https://api.atlascloud.ai/v1
ATLASCLOUD_VLM_MODEL=deepseek-ai/DeepSeek-V3-0324
ATLASCLOUD_IMAGE_BASE_URL=https://api.atlascloud.ai/api/v1
ATLASCLOUD_IMAGE_MODEL=openai/gpt-image-2/text-to-image

# Google Gemini (alternative, free)
GOOGLE_API_KEY=your-key
GOOGLE_BASE_URL=                            # optional custom Gemini-compatible endpoint
GOOGLE_VLM_MODEL=gemini-2.5-flash          # override Gemini VLM model
GOOGLE_IMAGE_MODEL=gemini-3-pro-image-preview  # override Gemini image model

Estrutura do Projeto

paperbanana/
├── paperbanana/
│   ├── core/          # Pipeline orchestration, types, config, resume, utilities
│   ├── agents/        # Optimizer, Retriever, Planner, Stylist, Visualizer, Critic
│   ├── providers/     # VLM and image gen provider implementations
│   │   ├── vlm/       # OpenAI, Atlas Cloud, Gemini, OpenRouter VLM providers
│   │   └── image_gen/ # OpenAI, Atlas Cloud, Gemini, OpenRouter image gen providers
│   ├── reference/     # Reference set management (13 curated examples)
│   ├── guidelines/    # Style guidelines loader
│   └── evaluation/    # VLM-as-Judge evaluation system
├── configs/           # YAML configuration files
├── prompts/           # Prompt templates for all agents + evaluation
│   ├── diagram/       # context_enricher, caption_sharpener, retriever, planner, stylist, visualizer, critic
│   ├── plot/          # plot-specific prompt variants
│   └── evaluation/    # faithfulness, conciseness, readability, aesthetics
├── data/
│   ├── reference_sets/  # 13 verified methodology diagrams
│   └── guidelines/      # NeurIPS-style aesthetic guidelines
├── examples/          # Working example scripts + sample inputs
├── scripts/           # Data curation and build scripts
├── tests/             # Test suite
├── mcp_server/        # MCP server for IDE integration
└── .claude/skills/    # Claude Code skills (generate-diagram, generate-plot, evaluate-diagram)

Desenvolvimento

# Install with dev dependencies
pip install -e ".[dev,openai,google]"

# Run tests
pytest tests/ -v

# Lint
ruff check paperbanana/ mcp_server/ tests/ scripts/

# Format
ruff format paperbanana/ mcp_server/ tests/ scripts/

Citação

Esta é uma implementação não oficial. Se você usar este trabalho, cite o artigo original:

@article{zhu2026paperbanana,
  title={PaperBanana: Automating Academic Illustration for AI Scientists},
  author={Zhu, Dawei and Meng, Rui and Song, Yale and Wei, Xiyu
          and Li, Sujian and Pfister, Tomas and Yoon, Jinsung},
  journal={arXiv preprint arXiv:2601.23265},
  year={2026}
}

Artigo original: https://arxiv.org/abs/2601.23265

Aviso Legal

Este projeto é uma reimplementação independente de código aberto baseada no artigo disponível publicamente. Não é afiliado, endossado ou conectado aos autores originais, ao Google Research ou à Universidade de Pequim de forma alguma. A implementação pode diferir do sistema original descrito no artigo. Use por sua conta e risco.

Licença

MIT