Bernini v2 is a video editor: t2v / i2v / v2v / r2v / rv2v / ads2v. The source media (reference images / source video) are first-class inputs. The pipeline has two stages:
- Semantic planning: a fine-tuned Qwen2.5-VL (
mllm) + connector +vit_decoder(MaskGIT-style loop) turn the text + source visual tokens intodiff_mllm_contexts(the novel part Bernini-R lacks). - Rendering: two co-trained Wan2.2 DiTs (high-noise / low-noise, switched at 0.875) with the Bernini
vae_txt_vit_wapgguidance (4-way CFG with APG projection), VAE-encoded source media ascontext_latents, Wan2.1 VAE decode.
ComfyUI Custom node
Extract the ZIP file in ComfyUI/custom_nodes
Task is inferred from which media inputs are connected: (none) = t2v, source_video = v2v, source_video + reference_images = rv2v, reference_images only = r2v, source_video + reference_video = ads2v.
Recommended settings
- CFG: 3
- Steps: 16, 23 or 50
- Sampler: UniPC / DPMPP_2M / EULER
Model files
| Component | File |
|---|---|
| high-noise DiT | wan2.2_bernini_v2_high_noise_nvfp4.safetensors |
| low-noise DiT | wan2.2_bernini_v2_low_noise_nvfp4.safetensors |
| T5 (UMT5-XXL) | umt5_xxl_fp8_e4m3fn_scaled.safetensors |
| VAE (Wan2.1) | Wan2_1_VAE_fp32.safetensors |
Place the planner files anywhere under models/text_encoders/ - folder names don't matters:
| Component | File | Where |
|---|---|---|
| planner MLLM | bernini_mllm_fp8_scaled.safetensors | text_encoders/Bernini/ |
| connector | connector.safetensors | text_encoders/Bernini/ |
| vit_decoder | vit_decoder_bf16.safetensors | text_encoders/Bernini/ |
| mask_tokens | mask_tokens.safetensors | text_encoders/Bernini/ |
| planner tokenizer + processor configs | mllm folder | text_encoders/Bernini/mllm |