Bernini v2 Renderer Guider
The node that makes two Wan experts behave like one
- plan
- high_noise_model
- low_noise_model
- vae
- guider
- latent
This is the heart of the whole pack, and honestly the cleverest node in it. Bernini v2's renderer is a dual-expert Wan 2.2: a high-noise expert does motion and composition, then a low-noise expert refines detail, and the hand-off happens mid-denoise at a fixed sigma boundary. A naive implementation runs them as two separate sampling passes, which resets the sampler's history and subtly changes the result. This node runs them as one native ComfyUI guider that swaps the expert under the hood at the boundary - so the UniPC solver's history stays continuous across the switch, matching what ByteDance's official pipeline actually does.
It's also where your source media becomes part of the generation. The guider VAE-encodes your source video and reference images into separate Wan streams, then builds the renderer's guidance arms: base, text, target, and (for editing/reference tasks) source - five arms for rv2v. Each arm is a different conditioning combination the released renderer was trained on, and they get blended with the omega weights below.
What you plug in
- plan - the output of Bernini v2 Plan. Non-negotiable; this node is a renderer, it works from the plan.
- high_noise_model / low_noise_model - two Load Bernini v2 Wan Renderer instances, one pointed at
wan_high, one atwan_low. - vae - the Wan 2.1 VAE (a stock VAELoader pointing at
wan_2.1_vae.safetensors).
The four omega weights (omega_video, omega_image, omega_text, omega_target) and omega_scale are the guidance-strength knobs. You don't need to understand the theory; with use_task_defaults on, the node overwrites all five with the official per-task values (e.g. R2V wants omega_image at 3.0). Only turn that off if you're deliberately deviating from the reference quality tests.
The two advanced settings you'll actually touch:
- boundary (default
0.875) - the sigma at which the high-noise expert hands off to the low-noise one. That's the official value; leave it. - guidance_batch_size (
auto/1/2/all) - how many conditioning arms run per batch.autois one arm at a time, the lowest-peak-VRAM choice and the default.allis fastest but greediest; on a 24 GB card, leave it alone. - vae_encode_mode (
auto/tiled) - if the source-media VAE encode OOMs on big footage,tileddodges it by never attempting the big regular encode first.
What comes out
Two outputs: the guider (GUIDER) and the latent (LATENT). The guider feeds the sampling node alongside the sigmas; the latent is the empty target latent the sampler starts from - wire it into SamplerCustomAdvanced's latent input (via the Bernini v2 UniPC Sigmas scheduler and RandomNoise).
Where people get burned
- Swapping the model inputs.
high_noise_modelgetswan_highandlow_noise_modelgetswan_low- swap them and the boundary logic inverts, giving you nonsense. The dropdown names make it obvious once you know to look. - Editing is heavy by design. Because the source video is part of the model input, a v2v job costs roughly double an equivalent Wan 2.2 generation. That's the model, not a bug in this node.
- Peak VRAM. The author's own 24 GB tests peak near 23 GiB at the official 50-step preset. If you OOM, drop
guidance_batch_sizeto1/auto, usetiledencode, and drop to the 640-long-edge example workflows.
Installing it
One pack, one install. ComfyUI Manager → search "Bernini v2 (Native)", or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-bernini-v2-T8.git
Restart ComfyUI (needs 0.33+), then download the ~45.6 GiB Balanced INT8 package from t8star/Bernini-V2-Comfy into ComfyUI/models/bernini_v2/ and the Wan 2.1 VAE into ComfyUI/models/vae/ (README has the exact hf download commands). Load the t2v.json example and watch the boundary do its thing.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| plan | BERNINI_V2_PLAN | — | |
| high_noise_model | MODEL | — | |
| low_noise_model | MODEL | — | |
| vae | VAE | — | |
| omega_video | FLOAT | 1.250–20 | — |
| omega_image | FLOAT | 3.000–20 | — |
| omega_text | FLOAT | 4.000–20 | — |
| omega_target | FLOAT | 1.200–20 | — |
| omega_scale | FLOAT | 0.750–2 | — |
| use_task_defaults | BOOLEAN | true | — |
| boundary | FLOAT | 0.8750–1 | — |
| guidance_batch_size | COMBO | auto | 4 options: auto, 1, 2, all |
| vae_encode_mode | COMBO | auto | 2 options: auto, tiled |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| guider | GUIDER | — |
| latent | LATENT | — |