Bernini-R-1.3B-Diffusers
Bernini-R-1.3B-Diffusers
字节跳动团队提出Bernini,一个统一视频生成与编辑框架,结合MLLM语义规划器与DiT渲染器。Bernini-R提供1.3B和14B两种模型,从Wan2.1微调而来,在EditVerse、OpenVE等benchmark上取得SOTA结果。代码、权重和推理脚本已在GitHub和HuggingFace开源,支持文生图/视频、图像/视频编辑、参考图引导生成等任务。
Chenchen Liu*, Junyi Chen*, Lei Li*, Lu Chi*,§, Mingzhen Sun*, Zhuoying Li*, Yi Fu, Ruoyu Guo, Yiheng Wu, Ge Bai, Zehuan Yuan✉
* 同等贡献 ✉ 通讯作者 § 项目负责人
🎉 新闻
- [2026-06-09] 我们在 ByteDance/Bernini-R-1.3B-Diffusers 上开源了 Bernini Renderer(Bernini-R)的 1.3B 权重。该模型从 Wan2.1-1.3B 微调而来,在风格迁移、字幕或水印去除、局部编辑等简单任务上表现接近 14B 变体,但在人物生成等更复杂任务上仍有差距。
- [2026-06-01] 我们开源了 Bernini Renderer(Bernini-R)的推理代码和模型权重。
- [2026-05-22] 我们发布了论文 Bernini: Latent Semantic Planning for Video Diffusion。
✨ 亮点
Bernini 是一个统一的视频生成与编辑框架,它将基于 MLLM 的语义规划器与基于 DiT 的渲染器相结合。
在视频编辑方面,Bernini 达到了领先闭源商业模型的第一梯队。以下排行榜来自我们自建的竞技场平台,人工标注员对成对编辑结果进行盲评,投票结果汇总为 Bradley-Terry 分数和成对胜率矩阵。
📦 安装
要求
- Python 3.11.2。
- CUDA GPU — 推荐使用 Hopper GPU(H100/H800/H200)以启用 FlashAttention-3;其他 CUDA GPU 会回退到 FlashAttention-2 或 PyTorch SDPA。
- CUDA toolkit 12.4(与固定的
torch==2.5.1+cu124匹配;如果自行构建 FlashAttention-3,最低需要 12.3+)。 - 固定在
requirements.txt中:torch==2.5.1+cu124、diffusers==0.35.2、accelerate==0.34.2、transformers==4.57.3。
参考环境(Bernini-R 在此配置上开发和测试):
| 组件 | 版本 |
|---|---|
| GPU | NVIDIA H100 |
| CUDA | 12.4 |
| Python | 3.11.2 |
| PyTorch | 2.5.1+cu124 |
安装
git clone https://github.com/bytedance/Bernini.git bernini && cd bernini
pip install -r requirements.txt
可选附加组件:
- 多 GPU 序列并行 需要 Open-VeOmni(Apache-2.0,Python 3.11)。使用
--no-deps以避免 VeOmni 引入不同的 torch 构建并覆盖固定的torch==2.5.1+cu124:pip install --no-deps git+https://github.com/ByteDance-Seed/VeOmni.git@v0.1.10。 单 GPU 推理不需要它。 - 更快的 attention(如果安装了会自动检测;否则使用 PyTorch SDPA):
- FlashAttention-2 — 通用 CUDA GPU(包括 A100/A800):
pip install flash-attn==2.8.3。 - FlashAttention-3 — 仅 Hopper(H100/H800/H200,CUDA ≥ 12.3,PyTorch ≥ 2.4)。
flash_attn_interface不在 PyPI 上;需要从 flash-attention 仓库的hopper/目录(标签v2.8.3)构建:git clone https://github.com/Dao-AILab/flash-attention.git cd flash-attention && git checkout v2.8.3 cd hopper && MAX_JOBS=$(nproc) python3 setup.py install --user
- FlashAttention-2 — 通用 CUDA GPU(包括 A100/A800):
权重
模型性能
| 模型 | EditVerse | OpenVE | OpenS2V | VBench | Bernini-v2v (OS) | Bernini-vr2v (OS) |
|---|---|---|---|---|---|---|
| Bernini-R 1.3B | 7.74 | 3.65 | 62.18 | 84.69 | 3.15 | 3.21 |
| Bernini-R 14B | 7.99 | 3.78 | 62.94 | 84.64 | 3.25 | 3.34 |
Bernini-R 提供了两种获取渲染器权重的方式。推荐使用 diffusers 格式——它是一个自包含的 diffusers 格式目录,其 transformer / transformer_2 已包含 Bernini-R 权重,因此只需将 --config 指向它即可直接加载权重,无需 --high_noise_ckpt / --low_noise_ckpt。
选项 A — diffusers 格式(推荐)
从 ByteDance/Bernini-R-Diffusers 获取一个即用型的 diffusers 格式模型。它将 Wan2.2 基础组件(VAE、UMT5 文本编码器、tokenizer)与 Bernini-R transformer 权重打包在一起,因此运行时无需下载其他内容。
pip install -U "huggingface_hub"
hf download ByteDance/Bernini-R-Diffusers --local-dir Bernini-R-Diffusers
然后通过 --config 传入,并省略 checkpoint 标志,例如:
python infer_single_gpu.py --config Bernini-R-Diffusers \
--case assets/testcases/t2i/t2i.json --num_frames 1
选项 B — 单独的 checkpoint
原始布局,Bernini-R 使用两组分别加载的权重:
- Wan2.2 基础 — Hugging Face 上的
Wan-AI/Wan2.2-T2V-A14B-Diffusers。提供 VAE、UMT5 文本编码器、tokenizer 以及 transformer 架构/基础权重。首次运行时自动下载(由configs/bernini_renderer_wan22/config.json中的wan22_base配置)。 - Bernini-R checkpoint — 来自 ByteDance/Bernini-R 的训练好的高噪声/低噪声 transformer 权重(safetensors),通过
--high_noise_ckpt/--low_noise_ckpt传入。接受本地目录和 Hugging Face 仓库 ID。
使用 huggingface-cli 下载模型:
pip install -U "huggingface_hub"
hf download Wan-AI/Wan2.2-T2V-A14B-Diffusers --local-dir Wan2.2-T2V-A14B-Diffusers
hf download ByteDance/Bernini-R --local-dir Bernini-R
🚀 使用
一次运行由一个 case 文件 描述——它是 assets/testcases/ 下的一个小型 JSON 文件,包含一个任务的路径和输入(task_type、guidance_mode、prompt、源媒体、output)。这样可以将长提示词从命令行中分离出来。每个任务在 assets/testcases/ 下都有一个目录,包含一个或多个 case 文件;格式和附带的 t2i / i2i / t2v / v2v / rv2v /r2v 示例请参见 assets/testcases/。
提示词增强器(强烈推荐)
--use_pe 通过兼容 OpenAI 的端点增强提示词,推荐用于获得最佳生成质量。requirements.txt 已安装 openai SDK;通过环境变量配置端点:
export BERNINI_PE_API_KEY=... # 或 OPENAI_API_KEY
export BERNINI_PE_BASE_URL=... # 或 OPENAI_BASE_URL
export BERNINI_PE_MODEL=... # 支持视觉的聊天模型
按任务类型的示例
除非示例另有说明,推理输出为 480p / 16fps(默认值 — --max_image_size 848、--fps 16)。
每个示例运行 assets/testcases/ 中附带的 case — 将 <hi> / <lo> 替换为你的高/低噪声 checkpoint 路径。图像任务(t2i、i2i)在单 GPU 上展示;视频任务通过 torchrun 在 8 个 GPU 上运行,其中 --ulysses N 表示每个样本的 N 路 Ulysses 序列并行,剩余的 world_size / N 个 rank 在任务列表上运行数据并行。两个脚本接受相同的输入,因此任何示例都可以用任意一种方式运行。
输入也可以直接作为标志传入,而不是使用 --case(--prompt、--task_type、--guidance_mode、--video、--image、--images、--output);生成参数(--seed、--num_frames 等)始终是命令行标志。
文生图(t2i)— 单 GPU;生成一帧,因此传入 --num_frames 1
python infer_single_gpu.py --high_noise_ckpt <hi> --low_noise_ckpt <lo> \
--case assets/testcases/t2i/t2i.json --num_frames 1
图像编辑(i2i)— 单 GPU;生成一帧,因此传入 --num_frames 1
python infer_single_gpu.py --high_noise_ckpt <hi> --low_noise_ckpt <lo> \
--case assets/testcases/i2i/i2i.json --num_frames 1
文生视频(t2v)
torchrun --nproc-per-node 8 infer_multi_gpu.py \
--high_noise_ckpt <hi> --low_noise_ckpt <lo> --ulysses 8 \
--case assets/testcases/t2v/t2v.json
视频编辑(v2v / mv2v)— 提供了两个 case。
对于主要主体保持正常运动的编辑(case 1 在场景中添加雪人),v2v 任务类型就足够了:
torchrun --nproc-per-node 8 infer_multi_gpu.py \
--high_noise_ckpt <hi> --low_noise_ckpt <lo> --ulysses 8 \
--case assets/testcases/v2v/v2v_case1.json
对于需要改变主体运动的编辑(case 2 让人物蹲下),mv2v 任务类型效果更好:
torchrun --nproc-per-node 8 infer_multi_gpu.py \
--high_noise_ckpt <hi> --low_noise_ckpt <lo> --ulysses 8 \
--case assets/testcases/v2v/v2v_case2.json
参考图 + 视频编辑(rv2v)— 提供了两个 case。
Case 1 是参考图引导的视频编辑——将源视频中的服装替换为参考图中的服装:
torchrun --nproc-per-node 8 infer_multi_gpu.py \
--high_noise_ckpt <hi> --low_noise_ckpt <lo> --ulysses 8 \
--case assets/testcases/rv2v/rv2v_case1.json
Case 2 是视频插入示例——将内容插入源视频。它以 720p / 24fps 运行,以便更清晰地显示插入结果:
torchrun --nproc-per-node 8 infer_multi_gpu.py \
--high_noise_ckpt <hi> --low_noise_ckpt <lo> --ulysses 8 \
--case assets/testcases/rv2v/rv2v_case2.json \
--num_frames 121 --fps 24 --max_image_size 1280
参考图生视频(r2v)— 从一张或多张参考图驱动视频生成
torchrun --nproc-per-node 8 infer_multi_gpu.py \
--high_noise_ckpt <hi> --low_noise_ckpt <lo> --ulysses 8 \
--case assets/testcases/r2v/r2v.json
查看 python infer_single_gpu.py --help 获取完整参数列表。
Gradio 演示
gradio_demo.py 通过 Gradio UI 暴露相同的 pipeline:任务类型下拉菜单自动填充 guidance_mode(仍可编辑),上传的媒体被路由到匹配的槽位,结果内联渲染。
# 单 GPU
python gradio_demo.py --high_noise_ckpt <hi> --low_noise_ckpt <lo> --port 7860
# 8 GPU,8 路 Ulysses 序列并行
torchrun --nproc-per-node 8 gradio_demo.py --ulysses 8 \
--high_noise_ckpt <hi> --low_noise_ckpt <lo> --port 7860 --share
添加 --use_pe(并 export OPENAI_API_KEY=... / BERNINI_PE_API_KEY=...)以启用 GPT 提示词增强;UI 中的复选框是该标志之上的每个请求开关。
📑 引用
如果你在研究中使用 Bernini,请引用:
@article{bernini,
title = {Bernini: Latent Semantic Planning for Video Diffusion},
author = {Chenchen Liu and Junyi Chen and Lei Li and Lu Chi and Mingzhen Sun and Zhuoying Li and Yi Fu and Ruoyu Guo and Yiheng Wu and Ge Bai and Zehuan Yuan},
journal = {arXiv preprint arXiv:2605.22344},
year = {2026}
}
🙏 致谢
Bernini 建立在多个杰出的开源项目之上:
我们感谢这些项目的作者和社区所做的贡献。
📄 许可证
Apache License 2.0。详见 LICENSE。