# 🎓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](./assets/overall.png) ## 🔥 Update - [x] [2025.10.13] Added automatic **logo support** for conferences and institutions, **YAML-based style customization**, a new default theme. - [x] [2025.9.18] Paper2Poster has been accepted to **NeurIPS 2025 Dataset and Benchmark Track**. - [x] [2025.9.3] We now support generate per section content in **parallel** for faster generation, by simply specifying `--max_workers`. - [x] [2025.5.27] We release the [arXiv](https://arxiv.org/abs/2505.21497), [code](https://github.com/Paper2Poster/Paper2Poster) and [`dataset`](https://huggingface.co/datasets/Paper2Poster/Paper2Poster) **PosterAgent** is a top-down, visual-in-the-loop multi-agent system from `paper.pdf` to **editable** `poster.pptx`. ![PosterAgent Overview](./assets/posteragent.png) ## 📋 Table of Contents - [🛠️ Installation](#-installation) - [🚀 Quick Start](#-quick-start) - [🔮 Evaluation](#-evaluation) --- ## 🛠️ Installation Our Paper2Poster supports both local deployment (via [vLLM](https://docs.vllm.ai/en/v0.6.6/getting_started/installation.html)) or API-based access (e.g., GPT-4o). **Python Environment** ```bash pip install -r requirements.txt ``` **Install Libreoffice** ```bash 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** ```bash conda install -c conda-forge poppler ``` **API Key** Create a `.env` file in the project root and add your OpenAI API key: ```bash 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: ```bash GOOGLE_SEARCH_API_KEY= GOOGLE_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](https://docs.vllm.ai/en/v0.6.6/getting_started/installation.html), ensuring the port is correctly specified in the `get_agent_config()` function in [`utils/wei_utils.py`](utils/wei_utils.py). - [High Performance] Generate a poster with `GPT-4o`: ```bash 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`: ```bash 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`: ```bash 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`](utils/wei_utils.py). ### Adding Logos to Posters You can automatically add institutional and conference logos to your posters: ```bash 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: ```bash --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: ```bash python -m PosterAgent.create_dataset ``` In evaluation, papers are stored under a directory called `Paper2Poster-data`. To evaluate a generated poster with **PaperQuiz**: ```bash 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**: ```bash 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): ```bash 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: ```bash python -m Paper2Poster-eval.create_paper_questions \ --paper_folder="Paper2Poster-data/${paper_name}" ``` ## ❤ Acknowledgement We extend our gratitude to [🐫CAMEL](https://github.com/camel-ai/camel), [🦉OWL](https://github.com/camel-ai/owl), [Docling](https://github.com/docling-project/docling), [PPTAgent](https://github.com/icip-cas/PPTAgent) for providing their codebases. ## 📖 Citation Please kindly cite our paper if you find this project helpful. ```bibtex @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}, } ```