ZaynZhu
Clean version without large assets
7c08dc3

๐ŸŽ“Paper2Poster: Multimodal Poster Automation from Scientific Papers

ไปŽๅญฆๆœฏ่ฎบๆ–‡่‡ชๅŠจ็”ŸๆˆๅญฆๆœฏๆตทๆŠฅ

X (formerly Twitter) URL

We address How to create a poster from a paper and How to evaluate poster.

Overview

๐Ÿ”ฅ Update

  • [2025.10.13] Added automatic logo support for conferences and institutions, YAML-based style customization, a new default theme.
  • [2025.9.18] Paper2Poster has been accepted to NeurIPS 2025 Dataset and Benchmark Track.
  • [2025.9.3] We now support generate per section content in parallel for faster generation, by simply specifying --max_workers.
  • [2025.5.27] We release the arXiv, code and dataset

PosterAgent is a top-down, visual-in-the-loop multi-agent system from paper.pdf to editable poster.pptx.

PosterAgent Overview

๐Ÿ“‹ Table of Contents


๐Ÿ› ๏ธ Installation

Our Paper2Poster supports both local deployment (via vLLM) or API-based access (e.g., GPT-4o).

Python Environment

pip install -r requirements.txt

Install Libreoffice

sudo apt install libreoffice

or, if you do not have sudo access, download soffice executable directly: https://www.libreoffice.org/download/download-libreoffice/, and add the executable directory to your $PATH.

Install poppler

conda install -c conda-forge poppler

API Key

Create a .env file in the project root and add your OpenAI API key:

OPENAI_API_KEY=<your_openai_api_key>

Optional: Google Search API (for logo search)

To use Google Custom Search for more reliable logo search, add these to your .env file:

GOOGLE_SEARCH_API_KEY=<your_google_search_api_key>
GOOGLE_SEARCH_ENGINE_ID=<your_search_engine_id>

๐Ÿš€ Quick Start

Create a folder named {paper_name} under {dataset_dir}, and place your paper inside it as a PDF file named paper.pdf.

๐Ÿ“ {dataset_dir}/
โ””โ”€โ”€ ๐Ÿ“ {paper_name}/
    โ””โ”€โ”€ ๐Ÿ“„ paper.pdf

To use open-source models, you need to first deploy them using vLLM, ensuring the port is correctly specified in the get_agent_config() function in utils/wei_utils.py.

  • [High Performance] Generate a poster with GPT-4o:
python -m PosterAgent.new_pipeline \
    --poster_path="${dataset_dir}/${paper_name}/paper.pdf" \
    --model_name_t="4o" \  # LLM
    --model_name_v="4o" \  # VLM
    --poster_width_inches=48 \
    --poster_height_inches=36
  • [Economic] Generate a poster with Qwen-2.5-7B-Instruct and GPT-4o:
python -m PosterAgent.new_pipeline \
    --poster_path="${dataset_dir}/${paper_name}/paper.pdf" \
    --model_name_t="vllm_qwen" \  # LLM
    --model_name_v="4o" \         # VLM
    --poster_width_inches=48 \
    --poster_height_inches=36 \
    --no_blank_detection          # An option to disable blank detection
  • [Local] Generate a poster with Qwen-2.5-7B-Instruct:
python -m PosterAgent.new_pipeline \
    --poster_path="${dataset_dir}/${paper_name}/paper.pdf" \
    --model_name_t="vllm_qwen" \           # LLM
    --model_name_v="vllm_qwen_vl" \        # VLM
    --poster_width_inches=48 \
    --poster_height_inches=36

PosterAgent supports flexible combination of LLM / VLM, feel free to try other options, or customize your own settings in get_agent_config() in utils/wei_utils.py.

Adding Logos to Posters

You can automatically add institutional and conference logos to your posters:

python -m PosterAgent.new_pipeline \
    --poster_path="${dataset_dir}/${paper_name}/paper.pdf" \
    --model_name_t="4o" \
    --model_name_v="4o" \
    --poster_width_inches=48 \
    --poster_height_inches=36 \
    --conference_venue="NeurIPS"  # Automatically searches for conference logo

Logo Search Strategy:

  1. Local search: First checks the provided logo store (logo_store/institutes/ and logo_store/conferences/)
  2. Web search: If not found locally, performs online search
    • By default, uses DuckDuckGo (no API key required)
    • For more reliable results, use --use_google_search (requires GOOGLE_SEARCH_API_KEY and GOOGLE_SEARCH_ENGINE_ID in .env)

You can also specify custom logo paths to skip auto-detection:

--institution_logo_path="path/to/institution_logo.png" \
--conference_logo_path="path/to/conference_logo.png"

YAML Style Customization

Customize poster appearance via YAML configuration files:

  • Global defaults: config/poster.yaml (applies to all posters)
  • Per-poster override: Place poster.yaml next to your paper.pdf for custom styling

๐Ÿ”ฎ Evaluation

Download Paper2Poster evaluation dataset via:

python -m PosterAgent.create_dataset

In evaluation, papers are stored under a directory called Paper2Poster-data.

To evaluate a generated poster with PaperQuiz:

python -m Paper2Poster-eval.eval_poster_pipeline \
    --paper_name="${paper_name}" \
    --poster_method="${model_t}_${model_v}_generated_posters" \
    --metric=qa # PaperQuiz

To evaluate a generated poster with VLM-as-Judge:

python -m Paper2Poster-eval.eval_poster_pipeline \
    --paper_name="${paper_name}" \
    --poster_method="${model_t}_${model_v}_generated_posters" \
    --metric=judge # VLM-as-Judge

To evaluate a generated poster with other statistical metrics (such as visual similarity, PPL, etc):

python -m Paper2Poster-eval.eval_poster_pipeline \
    --paper_name="${paper_name}" \
    --poster_method="${model_t}_${model_v}_generated_posters" \
    --metric=stats # statistical measures

If you want to create a PaperQuiz for your own paper:

python -m Paper2Poster-eval.create_paper_questions \
    --paper_folder="Paper2Poster-data/${paper_name}"

โค Acknowledgement

We extend our gratitude to ๐ŸซCAMEL, ๐Ÿฆ‰OWL, Docling, PPTAgent for providing their codebases.

๐Ÿ“– Citation

Please kindly cite our paper if you find this project helpful.

@misc{paper2poster,
      title={Paper2Poster: Towards Multimodal Poster Automation from Scientific Papers}, 
      author={Wei Pang and Kevin Qinghong Lin and Xiangru Jian and Xi He and Philip Torr},
      year={2025},
      eprint={2505.21497},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2505.21497}, 
}