File size: 3,260 Bytes
91cb724
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
---
license: apache-2.0
base_model: Qwen/Qwen2.5-VL-7B-Instruct
pipeline_tag: image-text-to-text
library_name: transformers
tags:
  - graphic-design
  - layout-generation
  - poster
  - multimodal
  - qwen2_5_vl
  - eccv2026
---

# PosterCopilot-7B

Layout reasoning for professional graphic design. Give the model a set of layer
assets and a canvas size; it returns the poster layout as JSON — a bounding box
and stacking order for every layer.

Accepted to **ECCV 2026**.

[📄 Paper](https://arxiv.org/abs/2512.04082) · [🌐 Project Page](https://postercopilot.github.io/) · [💻 Code](https://github.com/JiazheWei/PosterCopilot) · [▶️ Video](https://www.youtube.com/watch?v=yqFMzb5iVE8)

## Model details

| | |
|---|---|
| Base model | [Qwen/Qwen2.5-VL-7B-Instruct](https://huggingface.co/Qwen/Qwen2.5-VL-7B-Instruct) |
| Parameters | 7B (bfloat16, ~15.5 GiB) |
| Input | 2–25 RGB layer assets + target canvas size + optional design brief |
| Output | One JSON object: `canvas_size` + per-layer `x, y, w, h, order, category` |
| Training | Perturbed SFT → RL for visual-reality alignment → RL from aesthetic feedback |

## Usage

This checkpoint expects a specific image preprocessing pipeline — each layer is
flattened onto an auto-selected contrasting background, scaled to a 28-pixel
aligned canvas, and letterboxed with grey. Use the reference implementation
rather than feeding raw images:

```bash
git clone https://github.com/JiazheWei/PosterCopilot.git
cd PosterCopilot
conda env create -f environment.yml && conda activate postercopilot

python infer.py --model <path-to-this-checkpoint> \
    --assets ./my_layers --width 1200 --height 1600 -o layout.json

python render.py --layout layout.json --assets ./my_layers -o poster.png
```

The repository also contains the renderer that composites the predicted layout
and the original layers into the finished poster (PNG or editable PSD).

### Prompt format

The model was trained with a fixed system prompt and this user turn:

```
Please process the following {N} RGB PNG layer assets and compose a single,
aesthetically pleasing poster. The canvas size is {W} x {H} (width x height).
```

optionally followed by ` Structure Requirements: {brief}`. Both strings live in
`postercopilot/prompts.py` in the code repository; paraphrasing them moves the
input off the training distribution.

## Notes

- Decoding is greedy with `repetition_penalty=1.05`. Coordinates are emitted
  digit by digit, so a single flipped digit re-rolls the rest of the layout —
  expect different-but-comparable results across GPUs, dtypes and attention
  kernels. Evaluate over a set of samples rather than one generation.
- Requires ~20 GB of free VRAM in bfloat16.
- `transformers>=4.55` — the config uses the nested `text_config` schema that
  older releases predate.

## Citation

```bibtex
@article{wei2025postercopilot,
  title={PosterCopilot: Toward Layout Reasoning and Controllable Editing for Professional Graphic Design},
  author={Wei, Jiazhe and Li, Ken and Lao, Tianyu and Wang, Haofan and Wang, Liang and Shan, Caifeng and Si, Chenyang},
  journal={arXiv preprint arXiv:2512.04082},
  year={2025}
}
```

## License

Apache 2.0, inherited from the Qwen2.5-VL-7B-Instruct base model.