TL;DR: The first vision-centric image-in, image-out image generation model.
🌐 Homepage | 💻 Code | 📄 Paper | 📁 Dataset | 🌏 Benchmark | 🤗 Model
VP-Bench is the official evaluation benchmark for FlowInOne. It is a rigorously curated benchmark assessing instruction faithfulness, spatial precision, visual realism, and content consistency across eight distinct visual prompting tasks.
Our evaluation scripts are now available on GitHub!
The dataset contains 8 subsets, each corresponding to a distinct visual instruction task:
| Subset | Abbrev. | Description |
|---|---|---|
class2image | C2I | Class label rendered in input image → generate corresponding image |
text2image | T2I | Text instruction rendered in input image → generate image |
text_in_image | TIE | Edit text content within an image |
force | FU | Physics-aware force understanding (3 categories) |
text_box_control | TBE | Text and bounding box editing |
trajectory | TU | Trajectory understanding and prediction |
vismarker | VME | Visual marker guided editing (8 categories) |
doodles | DE | Doodle-based editing |
image): The input visual prompt image (with rendered instruction).image): The ground-truth output image.string): The text instruction rendered in the input image (extracted via OCR annotation).string): The subset name.string): Sub-category within a subset (empty string if not applicable).string): The image filename.string): Relative path of the input image within the subset.string): Relative path of the output image within the subset.string): Stable SHA1 identifier for each input-output pair.# class2image
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "class2image", split="train")
# text2image
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "text2image", split="train")
# text_in_image
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "text_in_image", split="train")
# force
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "force", split="train")
# text_box_control
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "text_box_control", split="train")
# trajectory
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "trajectory", split="train")
# vismarker
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "vismarker", split="train")
# doodles
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "doodles", split="train")
# Load All Subsets
from datasets import load_dataset, concatenate_datasets
subsets = ["class2image", "text2image", "text_in_image", "force",
"text_box_control", "trajectory", "vismarker", "doodles"]
ds_all = concatenate_datasets([
load_dataset("CSU-JPG/VPBench", name=s, split="train") for s in subsets
])
We evaluate multiple methods on VP-Bench using three state-of-the-art VLM evaluators (Gemini3, GPT-5.2, Qwen3.5) and human judges. The metric is success ratio (higher is better). Total denotes the average success rate across all eight task categories.
Abbreviations: C2I: class-to-image · T2I: text-to-image · TIE: text-in-image edit · FU: force understanding · TBE: text & bbox edit · TU: trajectory understanding · VME: visual marker edit · DE: doodles edit
Evaluator: Gemini3
| Method | C2I | T2I | TIE | FU | TBE | TU | VME | DE | Total |
|---|---|---|---|---|---|---|---|---|---|
| Nano Banana (Google, 2025) | .650 | .980 | .423 | .520 | .614 | .020 | .548 | .721 | .560 |
| Omnigen2 (Wu et al., 2025) | .020 | .020 | .017 | .020 | .000 | .000 | .000 | .000 | .007 |
| Kontext (Labs et al., 2025) | .050 | .020 | .048 | .007 | .000 | .020 | .010 | .000 | .019 |
| Qwen-IE-2509 (Wu et al., 2025) | .230 | .040 | .069 | .000 | .000 | .020 | .023 | .000 | .048 |
| FlowInOne (Ours) | .890 | .700 | .355 | .727 | .302 | .520 | .292 | .535 | .540 |
Evaluator: GPT-5.2
| Method | C2I | T2I | TIE | FU | TBE | TU | VME | DE | Total |
|---|---|---|---|---|---|---|---|---|---|
| Nano Banana (Google, 2025) | .680 | .959 | .152 | .127 | .023 | .040 | .136 | .302 | .302 |
| Omnigen2 (Wu et al., 2025) | .110 | .020 | .000 | .000 | .000 | .000 | .000 | .023 | .019 |
| Kontext (Labs et al., 2025) | .090 | .020 | .028 | .020 | .000 | .080 | .003 | .093 | .042 |
| Qwen-IE-2509 (Wu et al., 2025) | .240 | .120 | .080 | .020 | .022 | .060 | .020 | .047 | .076 |
| FlowInOne (Ours) | .850 | .800 | .079 | .500 | .116 | .240 | .083 | .465 | .392 |
Evaluator: Qwen3.5
| Method | C2I | T2I | TIE | FU | TBE | TU | VME | DE | Total |
|---|---|---|---|---|---|---|---|---|---|
| Nano Banana (Google, 2025) | .600 | .959 | .386 | .367 | .257 | .040 | .321 | .744 | .469 |
| Omnigen2 (Wu et al., 2025) | .030 | .020 | .017 | .034 | .000 | .000 | .003 | .047 | .019 |
| Kontext (Labs et al., 2025) | .050 | .020 | .042 | .133 | .000 | .060 | .047 | .093 | .056 |
| Qwen-IE-2509 (Wu et al., 2025) | .270 | .060 | .080 | .087 | .047 | .040 | .033 | .047 | .083 |
| FlowInOne (Ours) | .859 | .720 | .354 | .713 | .272 | .320 | .306 | .481 | .503 |
Evaluator: Human
| Method | C2I | T2I | TIE | FU | TBE | TU | VME | DE | Total |
|---|---|---|---|---|---|---|---|---|---|
| Nano Banana (Google, 2025) | .602 | .904 | .271 | .250 | .200 | .050 | .229 | .742 | .406 |
| Omnigen2 (Wu et al., 2025) | .000 | .000 | .000 | .000 | .000 | .000 | .000 | .000 | .000 |
| Kontext (Labs et al., 2025) | .000 | .000 | .043 | .000 | .000 | .000 | .000 | .100 | .018 |
| Qwen-IE-2509 (Wu et al., 2025) | .067 | .000 | .029 | .000 | .000 | .000 | .000 | .000 | .012 |
| FlowInOne (Ours) | .800 | .645 | .242 | .705 | .255 | .280 | .255 | .400 | .449 |
If you found our work useful, please consider citing:
@article{yi2026flowinoneunifyingmultimodalgenerationimagein,
title={FlowInOne:Unifying Multimodal Generation as Image-in, Image-out Flow Matching},
author={Junchao Yi and Rui Zhao and Jiahao Tang and Weixian Lei and Linjie Li and Qisheng Su and Zhengyuan Yang and Lijuan Wang and Xiaofeng Zhu and Alex Jinpeng Wang},
journal={arXiv preprint arXiv:2604.06757},
year={2026}
}
34 commits
TL;DR: The first vision-centric image-in, image-out image generation model.
🌐 Homepage | 💻 Code | 📄 Paper | 📁 Dataset | 🌏 Benchmark | 🤗 Model
VP-Bench is the official evaluation benchmark for FlowInOne. It is a rigorously curated benchmark assessing instruction faithfulness, spatial precision, visual realism, and content consistency across eight distinct visual prompting tasks.
Our evaluation scripts are now available on GitHub!
The dataset contains 8 subsets, each corresponding to a distinct visual instruction task:
| Subset | Abbrev. | Description |
|---|---|---|
class2image | C2I | Class label rendered in input image → generate corresponding image |
text2image | T2I | Text instruction rendered in input image → generate image |
text_in_image | TIE | Edit text content within an image |
force | FU | Physics-aware force understanding (3 categories) |
text_box_control | TBE | Text and bounding box editing |
trajectory | TU | Trajectory understanding and prediction |
vismarker | VME | Visual marker guided editing (8 categories) |
doodles | DE | Doodle-based editing |
image): The input visual prompt image (with rendered instruction).image): The ground-truth output image.string): The text instruction rendered in the input image (extracted via OCR annotation).string): The subset name.string): Sub-category within a subset (empty string if not applicable).string): The image filename.string): Relative path of the input image within the subset.string): Relative path of the output image within the subset.string): Stable SHA1 identifier for each input-output pair.# class2image
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "class2image", split="train")
# text2image
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "text2image", split="train")
# text_in_image
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "text_in_image", split="train")
# force
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "force", split="train")
# text_box_control
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "text_box_control", split="train")
# trajectory
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "trajectory", split="train")
# vismarker
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "vismarker", split="train")
# doodles
from datasets import load_dataset
ds = load_dataset("CSU-JPG/VPBench", "doodles", split="train")
# Load All Subsets
from datasets import load_dataset, concatenate_datasets
subsets = ["class2image", "text2image", "text_in_image", "force",
"text_box_control", "trajectory", "vismarker", "doodles"]
ds_all = concatenate_datasets([
load_dataset("CSU-JPG/VPBench", name=s, split="train") for s in subsets
])
We evaluate multiple methods on VP-Bench using three state-of-the-art VLM evaluators (Gemini3, GPT-5.2, Qwen3.5) and human judges. The metric is success ratio (higher is better). Total denotes the average success rate across all eight task categories.
Abbreviations: C2I: class-to-image · T2I: text-to-image · TIE: text-in-image edit · FU: force understanding · TBE: text & bbox edit · TU: trajectory understanding · VME: visual marker edit · DE: doodles edit
Evaluator: Gemini3
| Method | C2I | T2I | TIE | FU | TBE | TU | VME | DE | Total |
|---|---|---|---|---|---|---|---|---|---|
| Nano Banana (Google, 2025) | .650 | .980 | .423 | .520 | .614 | .020 | .548 | .721 | .560 |
| Omnigen2 (Wu et al., 2025) | .020 | .020 | .017 | .020 | .000 | .000 | .000 | .000 | .007 |
| Kontext (Labs et al., 2025) | .050 | .020 | .048 | .007 | .000 | .020 | .010 | .000 | .019 |
| Qwen-IE-2509 (Wu et al., 2025) | .230 | .040 | .069 | .000 | .000 | .020 | .023 | .000 | .048 |
| FlowInOne (Ours) | .890 | .700 | .355 | .727 | .302 | .520 | .292 | .535 | .540 |
Evaluator: GPT-5.2
| Method | C2I | T2I | TIE | FU | TBE | TU | VME | DE | Total |
|---|---|---|---|---|---|---|---|---|---|
| Nano Banana (Google, 2025) | .680 | .959 | .152 | .127 | .023 | .040 | .136 | .302 | .302 |
| Omnigen2 (Wu et al., 2025) | .110 | .020 | .000 | .000 | .000 | .000 | .000 | .023 | .019 |
| Kontext (Labs et al., 2025) | .090 | .020 | .028 | .020 | .000 | .080 | .003 | .093 | .042 |
| Qwen-IE-2509 (Wu et al., 2025) | .240 | .120 | .080 | .020 | .022 | .060 | .020 | .047 | .076 |
| FlowInOne (Ours) | .850 | .800 | .079 | .500 | .116 | .240 | .083 | .465 | .392 |
Evaluator: Qwen3.5
| Method | C2I | T2I | TIE | FU | TBE | TU | VME | DE | Total |
|---|---|---|---|---|---|---|---|---|---|
| Nano Banana (Google, 2025) | .600 | .959 | .386 | .367 | .257 | .040 | .321 | .744 | .469 |
| Omnigen2 (Wu et al., 2025) | .030 | .020 | .017 | .034 | .000 | .000 | .003 | .047 | .019 |
| Kontext (Labs et al., 2025) | .050 | .020 | .042 | .133 | .000 | .060 | .047 | .093 | .056 |
| Qwen-IE-2509 (Wu et al., 2025) | .270 | .060 | .080 | .087 | .047 | .040 | .033 | .047 | .083 |
| FlowInOne (Ours) | .859 | .720 | .354 | .713 | .272 | .320 | .306 | .481 | .503 |
Evaluator: Human
| Method | C2I | T2I | TIE | FU | TBE | TU | VME | DE | Total |
|---|---|---|---|---|---|---|---|---|---|
| Nano Banana (Google, 2025) | .602 | .904 | .271 | .250 | .200 | .050 | .229 | .742 | .406 |
| Omnigen2 (Wu et al., 2025) | .000 | .000 | .000 | .000 | .000 | .000 | .000 | .000 | .000 |
| Kontext (Labs et al., 2025) | .000 | .000 | .043 | .000 | .000 | .000 | .000 | .100 | .018 |
| Qwen-IE-2509 (Wu et al., 2025) | .067 | .000 | .029 | .000 | .000 | .000 | .000 | .000 | .012 |
| FlowInOne (Ours) | .800 | .645 | .242 | .705 | .255 | .280 | .255 | .400 | .449 |
If you found our work useful, please consider citing:
@article{yi2026flowinoneunifyingmultimodalgenerationimagein,
title={FlowInOne:Unifying Multimodal Generation as Image-in, Image-out Flow Matching},
author={Junchao Yi and Rui Zhao and Jiahao Tang and Weixian Lei and Linjie Li and Qisheng Su and Zhengyuan Yang and Lijuan Wang and Xiaofeng Zhu and Alex Jinpeng Wang},
journal={arXiv preprint arXiv:2604.06757},
year={2026}
}
34 commits