Mage-Flow
一种高效的、支持原生分辨率的图像生成与编辑基础模型

Mage-Flow 是一个紧凑的 4B 规模生成式堆栈 ,用于高效的文生图 和基于指令的图像编辑 。Mage-Flow 并未将参数量扩展到数百亿,而是通过精心的分词器--骨干网络--系统协同设计达到了与最先进模型相媲美的质量,从而在现实计算预算下保持快速、低内存占用且易于微调。
该堆栈由两个共享且协同设计的组件构成:
- Mage-VAE --- 一个轻量级、高保真的潜在分词器(采用单步扩散编解码与锚点潜在 KL 正则化)。
- NR-MMDiT --- 一个共享的 4B 原生分辨率多模态扩散 Transformer,在 Mage-VAE 潜在空间中通过整流流匹配进行训练。
结合原生分辨率打包和融合内核训练基础设施,这一共享堆栈驱动了两种模型实例化 :用于文生图的 Mage-Flow 和用于基于指令图像编辑的 Mage-Flow-Edit 。每种模型均提供 Base 、RL 对齐 和 4 步 Turbo 三种变体。
✨ 亮点
- 紧凑且具有竞争力。 一个单一的 4B 系列即可同时支持生成和编辑,其性能匹配或超越了许多更大的开源系统(Qwen-Image 20B、Z-Image 6B、FLUX.2 32B、FireRed-Image-Edit 20B)。
- 高效的分词器。 Mage-VAE 在重建保真度上与 FLUX.2-VAE 相当,但每个像素的编解码 MAC 运算量分别减少了 约 12 倍 / 约 22 倍,从而消除了 VAE 在高分辨率场景下的瓶颈。
- 原生分辨率。 单个检查点即可生成从 512 到 2048 任意宽高比的图像,包括极端的 4:1 比例(例如
512×2048、2048×512)。 - 系统级速度。 原生分辨率打包(FlashAttention 变长 + 逐样本 2D RoPE)+ 融合 CUDA 内核将每步训练时间从 约 1.93 秒降至约 0.78 秒 (训练速度提升约 2.5 倍 );CFG 的条件/无条件分支在一次打包前向传播中完成。
- 完整系列。 生成和编辑模型均提供 Base 、RL 对齐 和 4 步 Turbo 变体。
- 多功能编辑。 Mage-Flow-Edit 在一个统一的图像与文本条件模型中支持语义内容编辑、外观变换、图像修复以及结构感知输出。详情请参阅报告中的编辑图库。
- 交互式延迟。 在单张 A100 上生成
1024²图像:Mage-Flow-Turbo 0.59 秒/张 ,Mage-Flow-Edit-Turbo 1.02 秒/次编辑 ,峰值内存 约 18--20 GB(在所比较的系统中最低)。

一对多编辑多样性 --- Mage-Flow-Edit 可以从单张参考图像生成多样化的输出。
📥 模型仓库
每个检查点都是一个独立的 diffusers 风格仓库(包含 transformer/ + 共享的 vae/、text_encoder/、scheduler/)。
| 模型 | 任务 | 变体 | 步数 | Hugging Face |
|---|---|---|---|---|
Mage-Flow-4B-Base |
文生图 | Base | 30 | 🤗 microsoft/Mage-Flow-Base |
Mage-Flow-4B |
文生图 | RL 对齐 | 20 | 🤗 microsoft/Mage-Flow |
Mage-Flow-4B-Turbo |
文生图 | 少步蒸馏 | 4 | 🤗 microsoft/Mage-Flow-Turbo |
Mage-Flow-Edit-4B-Base |
编辑 | Base | 30 | 🤗 microsoft/Mage-Flow-Edit-Base |
Mage-Flow-Edit-4B |
编辑 | RL 对齐 | 30 | 🤗 microsoft/Mage-Flow-Edit |
Mage-Flow-Edit-4B-Turbo |
编辑 | 少步蒸馏 | 4 | 🤗 microsoft/Mage-Flow-Edit-Turbo |
📊 Performance
完整基准测试表(文生图与图像编辑)--- 点击展开
文生图 --- 完整基准测试套件:GenEval、DPG-Bench、TIIF-Bench(短/长文本拆分)、CVTG-2K、OneIG(英文/中文)、LongText(英文/中文)。数值越高越好;GenEval / CVTG-2K / OneIG / LongText 采用 0--1 分制,DPG / TIIF 采用 0--100 分制。Type 列标注了闭源与开源;粗体 / ++下划线++ = 开源模型中的最佳 / 次佳(闭源模型仅供参考,不参与排名);-- = 未报告;★ = 我们的模型。
| Model | Type | #Params | Steps | GenEval | DPG | TIIF-Short | TIIF-Long | CVTG-2K | OneIG-EN | OneIG-CN | LongText-EN | LongText-CN |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Seedream 3.0 | Closed | -- | -- | 0.84 | 88.27 | 86.02 | 84.31 | 0.592 | 0.530 | 0.528 | 0.896 | 0.878 |
| Seedream 4.0 | Closed | -- | -- | 0.84 | 88.63 | -- | -- | 0.892 | 0.573 | 0.554 | 0.936 | 0.946 |
| GPT-Image-1 | Closed | -- | -- | 0.84 | 85.15 | 89.15 | 88.29 | 0.857 | 0.533 | 0.474 | 0.956 | 0.619 |
| Nano-Banana-Pro | Closed | -- | -- | 0.83 | 87.16 | -- | -- | 0.779 | 0.580 | 0.570 | 0.981 | 0.949 |
| FLUX.1-dev | Open | 12B | 50 | 0.66 | 83.84 | 71.09 | 71.78 | 0.496 | 0.434 | 0.245 | 0.607 | 0.005 |
| FLUX.1-Krea-dev | Open | 12B | 50 | 0.72 | 86.59 | 80.36 | 81.67 | 0.444 | 0.443 | 0.271 | 0.693 | 0.002 |
| FLUX.2-dev | Open | 32B | 50 | 0.87 | 87.57 | 88.82 | 88.10 | 0.893 | 0.551 | 0.516 | 0.963 | 0.757 |
| FLUX.2-Klein-Base-4B | Open | 4B | 50 | 0.78 | 83.02 | 79.94 | 80.01 | 0.656 | 0.485 | 0.366 | 0.554 | 0.071 |
| FLUX.2-Klein-Base-9B | Open | 9B | 50 | 0.83 | 85.29 | 81.47 | 84.52 | 0.655 | 0.544 | 0.400 | 0.872 | 0.227 |
| FLUX.2-Klein-4B | Open | 4B | 4 | 0.83 | 85.53 | 78.91 | 79.04 | 0.628 | 0.500 | 0.364 | 0.649 | 0.068 |
| FLUX.2-Klein-9B | Open | 9B | 4 | 0.86 | 86.20 | 85.22 | 84.13 | 0.424 | 0.538 | 0.406 | 0.872 | 0.226 |
| Qwen-Image | Open | 20B | 50 | 0.87 | 88.32 | ++86.14++ | ++86.83++ | 0.829 | 0.539 | 0.548 | 0.943 | 0.946 |
| JoyAI-Image | Open | 16B | 50 | -- | 88.05 | -- | -- | 0.874 | 0.542 | 0.521 | 0.963 | 0.963 |
| HunyuanImage-3.0 | Open | 80B | 50 | 0.72 | 86.10 | -- | -- | 0.765 | -- | -- | -- | -- |
| LongCat-Image | Open | 6B | 50 | 0.87 | 86.80 | 80.93 | 81.30 | 0.866 | 0.516 | 0.518 | 0.885 | ++0.956++ |
| Z-Image-Base | Open | 6B | 50 | 0.84 | ++88.14++ | 80.20 | 83.04 | 0.867 | ++0.546++ | ++0.535++ | 0.935 | 0.936 |
| Z-Image-Turbo | Open | 6B | 8 | 0.82 | 84.86 | 77.73 | 80.05 | 0.859 | 0.528 | 0.507 | 0.917 | 0.926 |
| Mage-Flow-Base ★ | Open | 4B | 30 | 0.79 | 86.26 | 82.50 | 83.19 | 0.851 | 0.542 | 0.509 | 0.904 | 0.792 |
| Mage-Flow ★ | Open | 4B | 20 | 0.90 | 86.49 | 82.19 | 84.70 | ++0.887++ | 0.536 | 0.505 | ++0.944++ | 0.823 |
| Mage-Flow-Turbo ★ | Open | 4B | 4 | ++0.88++ | 85.48 | 83.58 | 84.16 | 0.873 | 0.523 | 0.491 | 0.911 | 0.801 |
图像编辑 --- ImgEdit-Bench(0--5)、GEdit-Bench 英文/中文(0--10)、TextEdit-Bench 合成/真实(0--25)。数值越高越好;Type 列标注了闭源与开源;粗体 / ++下划线++ = 开源模型中的最佳 / 次佳;-- = 未报告;★ = 我们的模型。
| Model | Type | #Params | Steps | ImgEdit | GEdit-EN | GEdit-CN | TextEdit-Syn | TextEdit-Real |
|---|---|---|---|---|---|---|---|---|
| Nano-Banana | Closed | -- | -- | 4.29 | 7.291 | 7.399 | 16.54 | 18.22 |
| Seedream 4.0 | Closed | -- | -- | 4.30 | 7.701 | 7.692 | 14.90 | 18.54 |
| Seedream 4.5 | Closed | -- | -- | 4.32 | 7.820 | 7.800 | -- | -- |
| Nano-Banana-Pro | Closed | -- | -- | 4.37 | 7.738 | 7.799 | -- | -- |
| Step1X-Edit-v1.2 | Open | 19B | 50 | 3.95 | 7.480 | 7.467 | 9.26 | 12.02 |
| FLUX.1-Kontext-dev | Open | 12B | 28 | 3.71 | 6.462 | 1.857 | 12.14 | 14.31 |
| FLUX.2-dev | Open | 32B | 50 | 4.35 | 7.413 | 7.278 | 11.86 | 14.71 |
| FLUX.2-Klein-Base-4B | Open | 4B | 50 | 3.80 | 7.081 | 7.102 | 11.01 | 13.79 |
| FLUX.2-Klein-4B | Open | 4B | 4 | 4.01 | 7.717 | 7.750 | 11.84 | 14.46 |
| FLUX.2-Klein-Base-9B | Open | 9B | 50 | 4.05 | 7.740 | 7.745 | 12.76 | 15.65 |
| FLUX.2-Klein-9B | Open | 9B | 4 | 4.18 | 8.040 | 8.055 | 12.73 | 15.75 |
| Z-Image-Edit | Open | 6B | 50 | 4.30 | 7.570 | 7.540 | -- | -- |
| Qwen-Image-Edit-2509 | Open | 20B | 50 | 4.31 | 7.480 | 7.467 | 13.40 | 15.81 |
| Qwen-Image-Edit-2511 | Open | 20B | 50 | ++4.51++ | 7.877 | 7.819 | 13.53 | ++16.81++ |
| LongCat-Image-Edit | Open | 6B | 50 | 4.45 | 7.748 | 7.731 | 12.46 | 14.89 |
| FireRed-Image-Edit-1.0 | Open | 20B | 50 | 4.56 | 7.943 | 7.887 | 15.19 | 17.23 |
| JoyAI-Image-Edit | Open | 16B | 50 | 4.46 | 8.276 | ++8.125++ | ++14.80++ | 17.23 |
| Mage-Flow-Edit-Base ★ | Open | 4B | 30 | 4.28 | 7.860 | 7.970 | 13.63 | 15.57 |
| Mage-Flow-Edit ★ | Open | 4B | 30 | 4.34 | 8.127 | 8.123 | 14.14 | 16.26 |
| Mage-Flow-Edit-Turbo ★ | Open | 4B | 4 | 4.38 | ++8.271++ | 8.264 | 12.77 | 15.41 |
🏗️ Architecture
Mage-VAE --- 一个基于对称 单步扩散编解码器构建的潜在分词器:解码器是一个全卷积的单步像素扩散模型(无全局注意力块),编码器是其架构对偶(一个以像素为条件的单步潜在生成器)。标准的 Gaussian 先验 KL 被替换为锚点潜在 KL ,该正则化将后验向 FLUX.2-VAE 潜在空间对齐,从而得到一个可直接用于生成的 128 通道、16× 下采样的潜在空间。

Mage-VAE --- 锚点 VAE(FLUX.2-VAE)、对称单步编码器/解码器架构以及三阶段训练流程。
Mage-Flow --- 一个 4B 多模态 DiT,使用 Qwen3-VL 编码提示、使用 Mage-VAE 编码图像,然后通过逐样本 2D 旋转位置编码和联合自注意力处理打包的 变长图像+文本序列。原生分辨率打包消除了桶量化与填充,使单个检查点可泛化到任意输出尺寸,并将 CFG 条件/无条件分支融合为一次前向传播。

Mage-Flow --- 变长图像+文本 token 通过原生分辨率 MMDiT 进行原生分辨率打包(左),以及双流 MMDiT 块(右)。
后训练 --- 从 Base 出发,生成模型通过 Diffusion-NFT (提示跟随、美学、文本渲染、偏好)对齐得到 RL 模型,再通过 解耦 DMD + 对抗感知引导 蒸馏为 4 步 Turbo。编辑模型复用该方案,在生成与编辑数据的混合上训练以保持生成先验。
🚀 Quick Start
Installation
首先安装除 flash-attn 之外的所有 依赖,然后关闭 构建隔离单独安装 flash-attn------它会针对你已安装的 torch 编译一个 CUDA 扩展,因此 torch 和匹配的 CUDA 工具包必须已存在。
bash
cd Mage/mage_flow
uv venv && source .venv/bin/activate
# 1) 固定且经过测试的依赖集(torch 2.13, transformers 5.5, diffusers 0.38, pillow 12.3, ...)。
# 推荐用于可复现性。`uv pip install -e .` 也可行,但其宽松的版本约束可能会解析到代码未测试过的较新 torch/transformers。
uv pip install -r requirements.txt
uv pip install -e . --no-deps # mage-flow 包本身
# 2) flash-attn --- 需要构建工具已存在,且 CUDA 工具包的 MAJOR 版本
# 与你 torch 构建版本匹配(例如 torch cu12x ↔ nvcc 12.x)。cu13/nvcc-12 组合会失败。
uv pip install setuptools wheel ninja
uv pip install --no-build-isolation flash-attn==2.8.3
纯 pip 是等效的(pip install -r requirements.txt、pip install -e . --no-deps,然后执行两行 flash-attn 命令)。这会注册三个命令:mage-flow、mage-flow-edit、mage-flow-app。
torch / CUDA: 默认的 PyPI torch wheel 针对最新的 CUDA(当前为 cu13x)。如果你的机器 CUDA 工具包是 12.x,请先从匹配的索引安装 torch,例如
uv pip install torch==2.13.0 torchvision==0.28.0 --index-url https://download.pytorch.org/whl/cu126,否则 flash-attn 构建会因 CUDA 版本不匹配而失败。(torch 2.13.0 提供 cu126/cu129/cu130 的 wheel --- 选择与你nvcc匹配的那个。)
Python API
pipe.generate(prompts, **kw) 和 pipe.edit(prompts, ref_images, **kw) 返回一个与 prompts 对齐的 list[PIL.Image]。prompts 列表会在每个去噪步骤中被批处理为一次打包前向传播(每个样本可以有自己的分辨率/种子)。
文生图:
python
from mage_flow import MageFlowPipeline
pipe = MageFlowPipeline.from_pretrained("microsoft/Mage-Flow", device="cuda")
# 1) 单张图像
img = pipe.generate(["A close-up portrait of an elderly African man with deep wrinkles, wearing a traditional hat, soft natural lighting, ultra realistic."],
steps=20, cfg=5.0, heights=[1024], widths=[1024])[0]
img.save("t2i.png")
# 2) 批量:多个提示/分辨率/种子在一步内完成一次打包前向传播
imgs = pipe.generate(
["the Salar de Uyuni mirror surface captured at high noon, with intimate stillness permeating the air. dew beads on every blade of grass. National Geographic editorial, cinematic depth, fine-grained natural texture.",
"A close-up portrait of an elderly African man with deep wrinkles, wearing a traditional hat, soft natural lighting, ultra realistic.",
"An immersive close-up of a steaming bowl of Sichuan mapo tofu over jasmine rice served on a hand-thrown ceramic plate, finished with a wedge of citrus. Surface oils catch a tiny specular highlight. Shot with a Hasselblad H6D-100c, ambient window light, the kind of image that makes the viewer hungry."],
heights=[512, 1024, 1792], widths=[2048, 1024, 1024], # 每个样本独立设置;4:1 比例也没问题
seeds=[1, 2, 3], steps=20, cfg=5.0,
)
图像编辑:
python
from mage_flow import MageFlowPipeline
pipe = MageFlowPipeline.from_pretrained("microsoft/Mage-Flow-Edit", device="cuda")
# 单张参考图像(路径或 PIL 图像)
img = pipe.edit(["Replace the background with a field of sunflowers"], ["assets/dog.jpg"],
steps=30, cfg=5.0, max_size=1024)[0]
img.save("single_edit.png")
# 多图像编辑 --- ref_images[i] 是一个源图像 LIST
img = pipe.edit(["blend the object from image 2 into image 1"],
[["scene.png", "object.png"]], steps=30, cfg=5.0)[0]
img.save("multi_edit.png")
# 显式指定输出尺寸(覆盖 max_size);Turbo 编辑 = 4 步 / cfg 1
img = pipe.edit(["Replace the background with a field of sunflowers"], ["assets/dog.jpg"],
heights=[1024], widths=[1024], steps=4, cfg=1.0)[0]
img.save("single_edit_1024x1024.png")
参数 (generate / edit 共用):
| 参数 | 默认值 | 描述 |
|---|---|---|
prompts |
--- | 字符串或字符串列表;列表会在每一步中被批处理为一次前向传播 |
ref_images (编辑) |
--- | 每个提示:一张图像/路径,或用于多图像编辑的图像列表 |
steps |
30 |
去噪步数 --- Base 30,RL 20,Turbo 4 |
cfg |
5.0 |
无分类器引导尺度(Turbo:1.0) |
heights、widths |
[1024] |
每个样本的输出尺寸,16 的倍数;原生分辨率 512--2048 |
max_size (编辑) |
源图像尺寸 | 输出最长边;短边遵循参考图像的宽高比 |
vl_cond_long_edge (编辑) |
384 |
限制输入到 VL 文本编码器 的参考图像长边(匹配训练预处理;VAE/生成路径保持完整输出分辨率)。0/None 禁用 |
neg_prompts |
" " |
每个样本的负向提示(当 cfg > 1 时生效) |
seeds |
42 |
每个样本的种子;-1 = 随机 |
batch_cfg |
True |
将 CFG 条件 + 无条件前向传播融合为一次打包前向传播 |
renormalization |
False |
按 token 重新缩放引导速度(减少高 cfg 下的过饱和) |
static_shift |
6.0 |
覆盖流匹配的 sigma 偏移 |
prompt_template |
mage-flow / mage-flow-edit |
文本编码器的提示模板 |
CLI
bash
# 文生图(两个提示在一个批次中)
mage-flow --prompt "A close-up portrait of an elderly African man with deep wrinkles, wearing a traditional hat, soft natural lighting, ultra realistic." "An immersive landscape of a Greenlandic icefjord at midnight sun, painted by early dawn light, crystal-clear skies adding drama. fine grains of sand carving sharp shadows. Peter Lik gallery print, moody atmosphere, museum-grade composition." \
--model_path microsoft/Mage-Flow --steps 20 --cfg 5.0 \
--height 1024 512 --width 1024 2048 --seed 42 --out ./outputs
# 编辑(每个提示一个 --ref;多图像编辑用逗号分隔源图像)
mage-flow-edit --prompt "Replace the background with a field of sunflowers" "blend these two images" \
--ref assets/dog.jpg "scene.png,object.png" \
--model_path microsoft/Mage-Flow-Edit --max_size 1024 --out ./outputs
| 标志 | 范围 | 含义 |
|---|---|---|
--prompt |
两者 | 一个或多个提示,作为批次运行(样本 i 使用 --seed + i) |
--model_path |
两者 | 本地仓库目录或 HF Hub 仓库 id(自动下载 + 缓存) |
--steps |
两者 | 去噪步数 |
--cfg |
两者 | 无分类器引导尺度 |
--height |
两者 | 输出高度 --- 一个值,或每个提示一个值用于混合分辨率 |
--width |
两者 | 输出宽度 --- 一个值,或每个提示一个值用于混合分辨率 |
--seed |
两者 | 基础种子(样本 i 使用 --seed + i) |
--neg_prompt |
两者 | 负向提示 |
--static_shift |
两者 | 覆盖流匹配的 sigma 偏移 |
--out |
两者 | 输出目录 |
--ref |
编辑 | 每个提示的参考图像(多图像编辑用逗号分隔路径) |
--max_size |
编辑 | 参考图像的最大尺寸 |
--vl_cond_long_edge |
编辑 | VL 条件长边(默认 384) |
Gradio 应用
bash
mage-flow-app # 在 http://0.0.0.0:7860 上提供服务(或:python -m mage_flow.app)
一个包含 Text → Image 和 Image Edit 标签页的 Web UI;模型在首次使用时惰性加载并缓存。预设默认指向 microsoft/Mage-Flow* Hugging Face 仓库 (首次使用时下载 + 缓存);设置 MAGEFLOW_HF_DIR 可改为加载本地检查点目录。
启动选项:
| 标志 | 默认值 | 含义 |
|---|---|---|
--host |
0.0.0.0 |
绑定地址 |
--port |
7860 |
端口 |
--device |
cuda |
推理设备 |
--share |
关闭 | 创建一个公共的 Gradio 分享链接 |
--preload |
(惰性) | 逗号分隔的仓库 id/路径,在启动时而非首次使用时加载 |
📝 引用
bibtex
@article{zhang2026mageflow,
title={Mage-Flow: An Efficient Native-Resolution Foundation Model for Image Generation and Editing},
author={Zhang, Xinjie and Zhang, Peng and Zheng, Shicheng and Guo, Jinghao and Jia, Zhaoyang and Shen, Yifei and Guo, Xun and Luo, Yuxuan and Li, Jiahao and Xie, Wenxuan and Pu, Fanyi and Zhang, Xiaoyi and Zhang, Kaichen and Guo, Zongyu and Bi, Tianci and Gui, Dongnan and Liu, Zhening and Wen, Zimo and Zheng, Zihan and Yang, Senqiao and Li, Xiao and Wang, Jinglu and Li, Bin and Lu, Yan},
journal={arXiv preprint arXiv:2607.19064},
year={2026}
}