[CVPR2026] PosterReward: Unlocking Accurate Evaluation for High-Quality Graphic Design Generation
Python
44
0 commits
updated Apr 2, 2026
Jianyu Lai1,2*, Sixiang Chen1,2*, Jialin Gao2*, Hengyu Shi2, Zhongying Liu2, Fuxiang Zhai1, Junfeng Luo2, Xiaoming Wei2, Lujia Wang1, Lei Zhu1,3†
1HKUST (GZ) 2Meituan 3HKUST
*Equal contribution, †Corresponding Author
[CVPR 2026] PosterOmni: Generalized Artistic Poster Creation via Task Distillation and Unified Reward Feedback
Sixiang Chen, Jianyu Lai, Jialin Gao, et al.
![]()
![]()
[ICLR 2026] PosterCraft: Rethinking High-Quality Aesthetic Poster Generation in a Unified Framework
Sixiang Chen, Jianyu Lai, Jialin Gao, et al.
![]()
![]()
Recent progress in text-rendering image generation makes end-to-end poster creation increasingly feasible, but general-purpose reward models still struggle to assess typography, layout, and design-specific quality. To bridge this gap, PosterReward builds a 70k poster preference dataset from multi-MLLM consensus and introduces a dedicated reward modeling framework for poster assessment.
The paper formalizes poster evaluation with five dimensions:
PosterReward provides three model variants:
analysis -> scoring.
It also introduces two benchmarks:
conda create -n posterreward python=3.10 -y
conda activate posterreward
cd swift
pip install -e .
cd ..
pip install msgspec "qwen_vl_utils>=0.0.14" torchvision diffusers pillow
# For vLLM-based deployment (required for the Analyser in the full PosterReward pipeline and PosterBench):
pip install "torch>=2.8.0" "vllm>=0.11.0"
Note: If you encounter a vLLM engine initialization error, ensure that your
torchandvllmversions are compatible. We have verified thattorch==2.8.0+vllm==0.11.0work well with the ms-swift version included in this repo.
PosterReward-Lite is the fastest entry point for single-image pointwise scoring.
MODEL_PATH, IMAGE_PATH, and PROMPT in inference_lite.sh.bash inference_lite.sh
The full PosterReward pipeline is a two-stage process:
posterreward_analyser.py generates a detailed multi-dimensional analysis.posterreward_scorer.py turns that analysis into the final scalar reward.To use it:
ANALYSER_MODEL, SCORER_MODEL, PROMPT, and IMAGE_PATH in inference_posterreward.sh.bash inference_posterreward.sh
Outputs are saved to ./posterreward_output/ by default.
The released PosterReward family is built on Qwen3-VL-8B:
Qwen3-VL-8B.Qwen3-VL-8B.PosterReward-Pairwise is a generative pairwise model fine-tuned from Qwen3-VL-8B.The training pipeline has four cascaded stages:
poster_bench/ contains the evaluation pipeline for poster generation benchmarking.
PosterBench contains 250 prompts: 100 cinematic prompts and 150 non-cinematic prompts. Each model generates 8 samples per prompt for stability evaluation.
| Step | Script | Purpose |
|---|---|---|
| 1 | step1_generate_images.py | Generate poster images from prompts |
| 2 | step2_vllm_analyze.py | Produce detailed image analysis with a deployed VLM |
| 3 | step3_reward_score.py / step3_reward_score.sh | Score the analyzed samples with PosterReward |
| 4 | step4_metrics_analysis.py / step4_metrics_analysis.sh | Aggregate final benchmark metrics |
The default step1_generate_images.py script is configured for a Qwen-Image-2512-style backend and writes outputs to results_qwen_image_2512/.
cd poster_bench
# Edit MODEL_PATH in the script first
python step1_generate_images.py
This repository also includes dedicated generation scripts for:
step1_generate_images.py for Qwen-Image-2512-style generationstep1_generate_images_flux_klein.pystep1_generate_images_zimage.pyPosterBench additionally reports closed-source systems such as Nano-Banana-Pro, Seedream-4.5, Nano-Banana, Seedream-4.0, GPT-Image-1, and Seedream-3.0, and open-source systems such as Qwen-Image-2512, Qwen-Image, Z-Image-Turbo, Flux.2-klein-9B, Flux.1-krea-dev, Flux.1-dev, and SD3.5-L.
bash step2_vllm_deploy.sh
python step2_vllm_analyze.py \
--model_folder ./results_qwen_image_2512 \
--output all_models_analysis.jsonl
We define the analysis target with the following five dimensions. The current implementation prompt uses equivalent, slightly more descriptive wording for the same evaluation axes:
bash step3_reward_score.sh
The provided shell script is a template and contains path variables that should be edited for your environment.
bash step4_metrics_analysis.sh
PosterBench reports four core metrics:
poster_reward_bench/ contains benchmark resources for evaluating reward models on poster assessment tasks.
The benchmark images are hosted on Hugging Face. Download and extract them before running the evaluation:
cd poster_reward_bench
# Download from Hugging Face (requires huggingface-cli)
huggingface-cli download MeiGen-AI/PosterReward_v1 PRB_basic_images.tar.gz --repo-type model --local-dir .
huggingface-cli download MeiGen-AI/PosterReward_v1 PRB_advanced_images.tar.gz --repo-type model --local-dir .
# Extract
tar -xzf PRB_basic_images.tar.gz
tar -xzf PRB_advanced_images.tar.gz
After extraction, the directory structure should look like:
poster_reward_bench/
├── PRB_basic_relative.json
├── PRB_advanced_relative.json
├── PRB_basic_images/ # 1,034 images
├── PRB_advanced_images/ # 2,446 images
└── ...
PosterRewardBench has two subsets:
Flux, Flux-Krea, and SD3.5-L, with larger quality variation.Seedream-3.0, Seedream-4.0, and Qwen-Image-Lightning, with higher overall quality and smaller quality gaps.All preference pairs were reviewed by four professional annotators, and only pairs with agreement from at least three annotators were retained.
For pointwise models, we report accuracy (↑) on MMRB2, HPDv3, PRB-Basic, and PRB-Ad, where:
Evaluating the full PosterReward model on PosterRewardBench is a two-step process:
Step 1: Deploy the Analyser and generate analyses
cd poster_reward_bench
# Deploy the PosterReward Analyser via vLLM (edit MODEL_PATH in vllm_deploy.sh first)
bash vllm_deploy.sh
# In another terminal, run the analysis generation script
python step1_gen_analysis.py
This generates PRB_basic_relative_with_analysis.json and PRB_advanced_relative_with_analysis.json. The script supports checkpointing and can resume from interruptions.
Step 2: Score and evaluate accuracy
# Edit MODEL_PATH in batch_eval.sh, then run:
bash batch_eval.sh
Note: Ensure the correct
swiftbinary is in yourPATH(from the project's conda environment), asstep2_eval.pyinvokesswift infervia subprocess.
Legend: 🥇 best, 🥈 second best within each metric column.
| Model | MMRB2 ↑ | HPDv3 ↑ | PRB-Basic ↑ | PRB-Ad ↑ |
|---|---|---|---|---|
| ImageReward | 53.0 | 58.6 | 60.7 | 49.3 |
| PickScore | 57.6 | 65.6 | 66.7 | 44.1 |
| HPSv2 | 55.0 | 65.3 | 70.8 | 43.7 |
| UnifiedReward* | 56.9 | 59.4 | 60.0 | 52.7 |
| HPSv3 | 58.5 | 76.9 | 72.9 | 41.2 |
| PosterReward-Lite | 60.5 🥇 | 77.1 🥈 | 83.9 🥈 | 85.0 🥈 |
| PosterReward | 59.6 🥈 | 77.8 🥇 | 86.7 🥇 | 86.0 🥇 |
Legend: 🥇 best, 🥈 second best. For Std-Avg, lower is better.
| Model | Mean ↑ | Median ↑ | Std-Avg ↓ | Bo8-Avg ↑ |
|---|---|---|---|---|
| Nano-Banana-Pro | 13.36 🥇 | 13.47 🥇 | 1.91 🥈 | 15.77 🥇 |
| Seedream-4.5* | 12.03 🥈 | 12.09 🥈 | 2.08 | 14.57 🥈 |
| Nano-Banana | 11.60 | 11.69 | 2.17 | 14.49 |
| Seedream-4.0 | 11.46 | 11.44 | 2.06 | 13.93 |
| GPT-Image-1 | 11.16 | 11.38 | 1.75 🥇 | 13.43 |
| Seedream-3.0 | 5.01 | 5.13 | 3.66 | 9.75 |
| Model | Mean ↑ | Median ↑ | Std-Avg ↓ | Bo8-Avg ↑ |
|---|---|---|---|---|
| Qwen-Image-2512 | 11.86 🥇 | 11.63 🥇 | 1.46 🥇 | 13.85 🥇 |
| Qwen-Image | 7.69 🥈 | 7.72 🥈 | 2.55 | 11.06 🥈 |
| Z-Image-Turbo | 7.65 | 7.31 | 2.18 🥈 | 10.47 |
| Flux.2-klein-9B | 7.38 | 7.66 | 3.20 | 11.67 |
| Flux.1-krea-dev | 5.00 | 5.14 | 3.59 | 9.58 |
| Flux.1-dev | 2.55 | 2.42 | 3.85 | 7.81 |
| SD3.5-L | -2.90 | -3.92 | 2.68 | 1.24 |
| Model | Type | Link |
|---|---|---|
| PosterReward_Analyser | Generative VLM for multi-dimensional analysis | 🤗 Hugging Face |
| PosterReward-Pairwise | Generative pairwise judge | |
| PosterReward_Scorer | Scalar reward model for scoring | 🤗 Hugging Face |
| PosterReward-Lite | Fast pointwise scorer | 🤗 Hugging Face |
Comming Soon!
Python
93.5%
Shell
5.6%
[CVPR2026] PosterReward: Unlocking Accurate Evaluation for High-Quality Graphic Design Generation
Python
44
0 commits
updated Apr 2, 2026
Jianyu Lai1,2*, Sixiang Chen1,2*, Jialin Gao2*, Hengyu Shi2, Zhongying Liu2, Fuxiang Zhai1, Junfeng Luo2, Xiaoming Wei2, Lujia Wang1, Lei Zhu1,3†
1HKUST (GZ) 2Meituan 3HKUST
*Equal contribution, †Corresponding Author
[CVPR 2026] PosterOmni: Generalized Artistic Poster Creation via Task Distillation and Unified Reward Feedback
Sixiang Chen, Jianyu Lai, Jialin Gao, et al.
![]()
![]()
[ICLR 2026] PosterCraft: Rethinking High-Quality Aesthetic Poster Generation in a Unified Framework
Sixiang Chen, Jianyu Lai, Jialin Gao, et al.
![]()
![]()
Recent progress in text-rendering image generation makes end-to-end poster creation increasingly feasible, but general-purpose reward models still struggle to assess typography, layout, and design-specific quality. To bridge this gap, PosterReward builds a 70k poster preference dataset from multi-MLLM consensus and introduces a dedicated reward modeling framework for poster assessment.
The paper formalizes poster evaluation with five dimensions:
PosterReward provides three model variants:
analysis -> scoring.
It also introduces two benchmarks:
conda create -n posterreward python=3.10 -y
conda activate posterreward
cd swift
pip install -e .
cd ..
pip install msgspec "qwen_vl_utils>=0.0.14" torchvision diffusers pillow
# For vLLM-based deployment (required for the Analyser in the full PosterReward pipeline and PosterBench):
pip install "torch>=2.8.0" "vllm>=0.11.0"
Note: If you encounter a vLLM engine initialization error, ensure that your
torchandvllmversions are compatible. We have verified thattorch==2.8.0+vllm==0.11.0work well with the ms-swift version included in this repo.
PosterReward-Lite is the fastest entry point for single-image pointwise scoring.
MODEL_PATH, IMAGE_PATH, and PROMPT in inference_lite.sh.bash inference_lite.sh
The full PosterReward pipeline is a two-stage process:
posterreward_analyser.py generates a detailed multi-dimensional analysis.posterreward_scorer.py turns that analysis into the final scalar reward.To use it:
ANALYSER_MODEL, SCORER_MODEL, PROMPT, and IMAGE_PATH in inference_posterreward.sh.bash inference_posterreward.sh
Outputs are saved to ./posterreward_output/ by default.
The released PosterReward family is built on Qwen3-VL-8B:
Qwen3-VL-8B.Qwen3-VL-8B.PosterReward-Pairwise is a generative pairwise model fine-tuned from Qwen3-VL-8B.The training pipeline has four cascaded stages:
poster_bench/ contains the evaluation pipeline for poster generation benchmarking.
PosterBench contains 250 prompts: 100 cinematic prompts and 150 non-cinematic prompts. Each model generates 8 samples per prompt for stability evaluation.
| Step | Script | Purpose |
|---|---|---|
| 1 | step1_generate_images.py | Generate poster images from prompts |
| 2 | step2_vllm_analyze.py | Produce detailed image analysis with a deployed VLM |
| 3 | step3_reward_score.py / step3_reward_score.sh | Score the analyzed samples with PosterReward |
| 4 | step4_metrics_analysis.py / step4_metrics_analysis.sh | Aggregate final benchmark metrics |
The default step1_generate_images.py script is configured for a Qwen-Image-2512-style backend and writes outputs to results_qwen_image_2512/.
cd poster_bench
# Edit MODEL_PATH in the script first
python step1_generate_images.py
This repository also includes dedicated generation scripts for:
step1_generate_images.py for Qwen-Image-2512-style generationstep1_generate_images_flux_klein.pystep1_generate_images_zimage.pyPosterBench additionally reports closed-source systems such as Nano-Banana-Pro, Seedream-4.5, Nano-Banana, Seedream-4.0, GPT-Image-1, and Seedream-3.0, and open-source systems such as Qwen-Image-2512, Qwen-Image, Z-Image-Turbo, Flux.2-klein-9B, Flux.1-krea-dev, Flux.1-dev, and SD3.5-L.
bash step2_vllm_deploy.sh
python step2_vllm_analyze.py \
--model_folder ./results_qwen_image_2512 \
--output all_models_analysis.jsonl
We define the analysis target with the following five dimensions. The current implementation prompt uses equivalent, slightly more descriptive wording for the same evaluation axes:
bash step3_reward_score.sh
The provided shell script is a template and contains path variables that should be edited for your environment.
bash step4_metrics_analysis.sh
PosterBench reports four core metrics:
poster_reward_bench/ contains benchmark resources for evaluating reward models on poster assessment tasks.
The benchmark images are hosted on Hugging Face. Download and extract them before running the evaluation:
cd poster_reward_bench
# Download from Hugging Face (requires huggingface-cli)
huggingface-cli download MeiGen-AI/PosterReward_v1 PRB_basic_images.tar.gz --repo-type model --local-dir .
huggingface-cli download MeiGen-AI/PosterReward_v1 PRB_advanced_images.tar.gz --repo-type model --local-dir .
# Extract
tar -xzf PRB_basic_images.tar.gz
tar -xzf PRB_advanced_images.tar.gz
After extraction, the directory structure should look like:
poster_reward_bench/
├── PRB_basic_relative.json
├── PRB_advanced_relative.json
├── PRB_basic_images/ # 1,034 images
├── PRB_advanced_images/ # 2,446 images
└── ...
PosterRewardBench has two subsets:
Flux, Flux-Krea, and SD3.5-L, with larger quality variation.Seedream-3.0, Seedream-4.0, and Qwen-Image-Lightning, with higher overall quality and smaller quality gaps.All preference pairs were reviewed by four professional annotators, and only pairs with agreement from at least three annotators were retained.
For pointwise models, we report accuracy (↑) on MMRB2, HPDv3, PRB-Basic, and PRB-Ad, where:
Evaluating the full PosterReward model on PosterRewardBench is a two-step process:
Step 1: Deploy the Analyser and generate analyses
cd poster_reward_bench
# Deploy the PosterReward Analyser via vLLM (edit MODEL_PATH in vllm_deploy.sh first)
bash vllm_deploy.sh
# In another terminal, run the analysis generation script
python step1_gen_analysis.py
This generates PRB_basic_relative_with_analysis.json and PRB_advanced_relative_with_analysis.json. The script supports checkpointing and can resume from interruptions.
Step 2: Score and evaluate accuracy
# Edit MODEL_PATH in batch_eval.sh, then run:
bash batch_eval.sh
Note: Ensure the correct
swiftbinary is in yourPATH(from the project's conda environment), asstep2_eval.pyinvokesswift infervia subprocess.
Legend: 🥇 best, 🥈 second best within each metric column.
| Model | MMRB2 ↑ | HPDv3 ↑ | PRB-Basic ↑ | PRB-Ad ↑ |
|---|---|---|---|---|
| ImageReward | 53.0 | 58.6 | 60.7 | 49.3 |
| PickScore | 57.6 | 65.6 | 66.7 | 44.1 |
| HPSv2 | 55.0 | 65.3 | 70.8 | 43.7 |
| UnifiedReward* | 56.9 | 59.4 | 60.0 | 52.7 |
| HPSv3 | 58.5 | 76.9 | 72.9 | 41.2 |
| PosterReward-Lite | 60.5 🥇 | 77.1 🥈 | 83.9 🥈 | 85.0 🥈 |
| PosterReward | 59.6 🥈 | 77.8 🥇 | 86.7 🥇 | 86.0 🥇 |
Legend: 🥇 best, 🥈 second best. For Std-Avg, lower is better.
| Model | Mean ↑ | Median ↑ | Std-Avg ↓ | Bo8-Avg ↑ |
|---|---|---|---|---|
| Nano-Banana-Pro | 13.36 🥇 | 13.47 🥇 | 1.91 🥈 | 15.77 🥇 |
| Seedream-4.5* | 12.03 🥈 | 12.09 🥈 | 2.08 | 14.57 🥈 |
| Nano-Banana | 11.60 | 11.69 | 2.17 | 14.49 |
| Seedream-4.0 | 11.46 | 11.44 | 2.06 | 13.93 |
| GPT-Image-1 | 11.16 | 11.38 | 1.75 🥇 | 13.43 |
| Seedream-3.0 | 5.01 | 5.13 | 3.66 | 9.75 |
| Model | Mean ↑ | Median ↑ | Std-Avg ↓ | Bo8-Avg ↑ |
|---|---|---|---|---|
| Qwen-Image-2512 | 11.86 🥇 | 11.63 🥇 | 1.46 🥇 | 13.85 🥇 |
| Qwen-Image | 7.69 🥈 | 7.72 🥈 | 2.55 | 11.06 🥈 |
| Z-Image-Turbo | 7.65 | 7.31 | 2.18 🥈 | 10.47 |
| Flux.2-klein-9B | 7.38 | 7.66 | 3.20 | 11.67 |
| Flux.1-krea-dev | 5.00 | 5.14 | 3.59 | 9.58 |
| Flux.1-dev | 2.55 | 2.42 | 3.85 | 7.81 |
| SD3.5-L | -2.90 | -3.92 | 2.68 | 1.24 |
| Model | Type | Link |
|---|---|---|
| PosterReward_Analyser | Generative VLM for multi-dimensional analysis | 🤗 Hugging Face |
| PosterReward-Pairwise | Generative pairwise judge | |
| PosterReward_Scorer | Scalar reward model for scoring | 🤗 Hugging Face |
| PosterReward-Lite | Fast pointwise scorer | 🤗 Hugging Face |
Comming Soon!
Python
93.5%
Shell
5.6%