HuggingFace镜像/Bernini
模型介绍文件和版本分析
下载使用量0
Bernini

用于视频扩散的潜在语义规划

刘晨晨*,陈俊逸*,李磊*,迟露*,§,孙明珍*,李卓颖*,傅毅,郭若宇,吴一恒,白歌,袁泽环✉

* 贡献相同  ✉ 通讯作者  § 项目负责人

arXiv 项目页面 HuggingFace

🎉 新闻

  • [2026-06-01] 我们开源了Bernini渲染器(Bernini-R)的推理代码和模型权重。
  • [2026-05-22] 我们发布了论文《Bernini: Latent Semantic Planning for Video Diffusion》(《Bernini:用于视频扩散的潜在语义规划》)(https://arxiv.org/abs/2605.22344)。

✨ 亮点

Bernini是一个集MLLM语义规划器与DiT渲染器于一体的视频生成与编辑统一框架。

在视频编辑方面,Bernini跻身主流闭源商业模型的第一梯队。下方排行榜来自我们自建的竞技场平台,由人工标注员对成对编辑结果进行盲投,并将投票结果汇总为Bradley-Terry分数和成对胜率矩阵。

视频编辑竞技场:Bradley-Terry排行榜与成对胜率矩阵

📦 安装

环境要求

  • Python 3.11.2。
  • CUDA GPU — 推荐使用Hopper架构GPU(H100/H800/H200),以支持FlashAttention-3;其他CUDA GPU将默认使用FlashAttention-2或PyTorch SDPA。
  • CUDA工具包 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的开发与测试环境):

组件版本
GPUNVIDIA H100
CUDA12.4
Python3.11.2
PyTorch2.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 拉取不同版本的 PyTorch 构建并覆盖已固定的 torch==2.5.1+cu124:pip install --no-deps git+https://github.com/ByteDance-Seed/VeOmni.git@v0.1.10。单GPU推理无需此组件。
  • 更快注意力机制(若已安装则自动检测;否则使用 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

权重文件

Bernini-R 使用两组权重:

  1. Wan2.2 基础模型:Hugging Face 上的 Wan-AI/Wan2.2-T2V-A14B-Diffusers。提供 VAE、UMT5 文本编码器、分词器以及 transformer 架构/基础权重。首次运行时会自动下载(可通过 configs/bernini_renderer_wan22/config.json 中的 wan22_base 配置)。
  2. Bernini-R 检查点:训练后的高噪声/低噪声 transformer 权重(safetensors 格式),可从 Hugging Face 获取,通过 --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 --local-dir Bernini

🚀 使用方法

一次运行由一个案例文件描述——这是一个位于assets/testcases/目录下的小型JSON文件,它捆绑了某一任务的路由和输入信息(包括task_type、guidance_mode、prompt、源媒体和output)。这样可以避免在命令行中输入冗长的提示词。每个任务在assets/testcases/目录下都有一个对应的文件夹,其中包含一个或多个案例文件;有关格式以及捆绑的t2i/i2i/t2v/v2v/rv2v/r2v示例,请参见assets/testcases/。

提示词增强器(推荐)

--use_pe参数通过兼容OpenAI的端点增强提示词,建议使用此功能以获得最佳生成质量。requirements.txt已安装openai SDK;请通过环境变量配置端点:

export BERNINI_PE_API_KEY=...      # or OPENAI_API_KEY
export BERNINI_PE_BASE_URL=...     # or OPENAI_BASE_URL
export BERNINI_PE_MODEL=...        # vision-capable chat model

按任务类型划分的示例

除非示例另有说明,否则推理输出为 480p / 16fps(默认设置 — --max_image_size 848,--fps 16)。

每个示例运行 assets/testcases/ 中的一个捆绑案例 — 将 <hi> / <lo> 替换为您的高/低噪声检查点路径。图像任务(t2i、i2i)在单个 GPU 上展示;视频任务通过 torchrun 在 8 个 GPU 上运行,其中 --ulysses N 为每个样本提供 N 路 Ulysses 序列并行,剩余的 world_size / N 个进程对任务列表进行数据并行处理。这两个脚本接受相同的输入,因此任何示例都可以通过任一方式运行。

输入也可以直接作为标志传递,而不是使用 --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)——提供了两种情况。

对于主体保持常规运动的编辑(情况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

对于需要改变主体动作的编辑(案例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)—— 提供了两个案例。

案例 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

案例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

Reference-to-video(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 展示相同的流程:任务类型下拉菜单会自动填充 guidance_mode(仍可由用户编辑),上传的媒体会被路由至匹配的槽位,结果将内联渲染。

# Single GPU
python gradio_demo.py --high_noise_ckpt <hi> --low_noise_ckpt <lo> --port 7860

# 8 GPUs, 8-way Ulysses sequence parallel
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 提示词增强功能;界面内的复选框是在此标志基础上的每请求开关。

📑 引用

如果您在研究中使用 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 基于多个优秀的开源项目构建而成:

  • Wan2.2-T2V-A14B
  • Qwen2.5-VL-7B-Instruct
  • VeOmni

感谢这些项目的作者和社区所做出的贡献。

📄 许可证

Apache License 2.0。详见 LICENSE。