
<a href="https://hadlay-zhang.github.io">Zhilin Zhang</a><sup>1,2 ★</sup>
<a href="https://wyattz23.github.io">Xiang Zhang</a><sup>3 ★</sup>
<a href="https://upup-wei.github.io/">Jiaqi Wei</a><sup>4</sup>
<a href="https://Y-Research-SBU.github.io/PosterGen">Yiwei Xu</a><sup>5</sup>
<a href="https://chenyuyou.me/">Chenyu You</a><sup>1</sup>
<sup>1</sup> Stony Brook University
<sup>2</sup> New York University
<sup>3</sup> University of British Columbia
<sup>4</sup> Zhejiang University
<sup>5</sup> University of California, Los Angeles
<sup>★</sup> Equal Contribution
In this work, we propose a multi-agent LLMs framework that is guided by design principles.
Our multi-agent LLMs adopt a workflow of specialist agents that mirrors a professional design process:
- Parser Agent – extracts and structures all content from the source paper.
- Curator Agent – designs a narrative-based storyboard.
- Layout Agent – transforms the storyboard into a spatially balanced, three-column layout.
- Styling Agents – apply a harmonious color palette and a hierarchical typographic system to ensure aesthetic coherence.
This methodology is designed to generate a well-designed poster that minimizes the need for manual fine-tuning.

git clone -b main https://github.com/Y-Research-SBU/PosterGen.git
cd PosterGen
uv sync
# Create and activate conda environment
conda create -n poster python=3.11 -y
conda activate poster
git clone -b main https://github.com/Y-Research-SBU/PosterGen.git
cd PosterGen
pip install -r requirements.txt
Windows:
1. Download and install LibreOffice from official website
2. Add LibreOffice to your system PATH:
- Default installation: Add C:\Program Files\LibreOffice\program to PATH
- Or custom installation: Add <your_install_path>\LibreOffice\program to PATH
macOS:
brew install --cask libreoffice
Ubuntu/Linux:
sudo apt install libreoffice
# Or using snap:
sudo snap install libreoffice
Create a .env file in the project root with your API keys:
OPENAI_API_KEY="your_openai_key"
ANTHROPIC_API_KEY="your_anthropic_key"
ZHIPU_API_KEY="your_zhipu_key"
To use a compatible API service or a custom deployment, set the base URL in your .env file:
OPENAI_BASE_URL="https://your-api-endpoint.com/v1"
ANTHROPIC_BASE_URL="https://your-anthropic-endpoint.com"
GOOGLE_BASE_URL="https://your-google-endpoint.com"
ZHIPU_BASE_URL="https://your-zhipu-endpoint.com"
Before running the multi-agent pipeline, organize your files in the data/ folder:
data/
└── <your_paper_name>/
├── paper.pdf # Your research paper (required)
├── aff.png # Affiliation logo for color extraction (required)
└── logo.png # Conference logo for poster (required)
Examples (check data/ folder):
data/
└── Neural_Encoding_and_Decoding_at_Scale/
├── paper.pdf
├── aff.png
└── logo.png
└── ...
Generate your poster with a single command:
For UV setup:
uv run python -m src.workflow.pipeline \
--poster_width 54 --poster_height 36 \
--paper_path ./data/Your_Paper_Name/paper.pdf \
--text_model gpt-4.1-2025-04-14 \
--vision_model gpt-4.1-2025-04-14 \
--logo ./data/Your_Paper_Name/logo.png \
--aff_logo ./data/Your_Paper_Name/aff.png
For Conda setup:
python -m src.workflow.pipeline \
--poster_width 54 --poster_height 36 \
--paper_path ./data/Your_Paper_Name/paper.pdf \
--text_model gpt-4.1-2025-04-14 \
--vision_model gpt-4.1-2025-04-14 \
--logo ./data/Your_Paper_Name/logo.png \
--aff_logo ./data/Your_Paper_Name/aff.png
Parameters:
- --poster_width/height: Poster dimensions in inches, with aspect ratio (w/h): lower bound 1.4 (ISO A paper size), upper bound 2 (human vision limit)
- --paper_path: Path to your PDF paper
- --text_model: LLM for text processing (options: "gpt-4.1-2025-04-14" (default), "gpt-4o-2024-08-06", "gpt-4.1-mini-2025-04-14", "claude-sonnet-4-20250514")
- --vision_model: Vision model for analysis (same options as text_model)
- --logo: Conference logo
- --aff_logo: Affiliation logo (used for color scheme extraction)
Developed by: React + TypeScript + Vite
Upload your PDF paper and logos through drag-and-drop, configure models and dimensions, then generate and download your poster files.
Prerequisites:
- Node.js installed
- Main PosterGen dependencies installed (from project root)
- API keys configured in .env file
# Install main project dependencies (if not done already, refer to Environment Setup above)
# Start backend
cd webui && python start_backend.py
# Start frontend (in new terminal, from project root)
cd webui && sh ./start_frontend.sh
# Open http://localhost:3000 in your browser


After successful generation, you'll find your results in the output/ folder:
output/
└── <paper_name>/
├── <paper_name>.png # final poster image
├── <paper_name>.pptx # editable PowerPoint file
├── timing_cost_log.json # runtime & api cost log
├── assets/ # extracted content from paper via Marker
│ ├── figures.json # figure metadata with aspect ratios
│ ├── tables.json # table metadata with aspect ratios
│ ├── figure-*.png # individual figures from paper
│ ├── table-*.png # individual tables from paper
│ └── fig_tab_caption_mapping.json # caption mappings
└── content/ # multi-agent artifacts
├── raw.md # raw text extraction
├── structured_sections.json # organized sections
├── classified_visuals.json # categorized visuals
├── narrative_content.json # paper summary
├── story_board.json # content organization
├── initial_layout_data.json # initial layout
├── column_analysis.json # column usage stats
├── optimized_story_board.json # balanced content
├── balancer_decisions.json # optimization details
├── final_column_analysis.json # final usage metrics
├── optimized_layout.json # balanced layout
├── final_design_layout.json # element coordinates
├── color_scheme.json # color palette
├── section_title_design.json # title styling
├── keywords.json # highlighted terms
├── styled_layout.json # formatted text
└── styling_interfaces.json # typography settings
Our system uses 6 specialized AI agents working together:
The system supports customization through config/poster_config.yaml. You can adjust:
Custom Fonts:
If you would like to use other fonts, you can add the font files under fonts/, modify the get_font_file_path() mapping in src/layout/text_height_measurement.py, and adjust the 'typography' in config/poster_config.yaml.
Our system generates professional academic posters with high visual quality. Here are some examples of generated posters:


@inproceedings{zhang2026postergen,
title={PosterGen: Aesthetic-Aware Multi-Modal Paper-to-Poster Generation Via Multi-Agent LLMs},
author={Zhang, Zhilin and Zhang, Xiang and Wei, Jiaqi and Xu, Yiwei and You, Chenyu},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={9813--9823},
year={2026}
}
This codebase is built upon following open-source projects. We express our sincere gratitude to:
$ claude mcp add PosterGen \
-- python -m otcore.mcp_server <graph>