Bernini v2 Plan
The node that finally wires up Bernini v2's brain
- planner
- positive
- negative
- source_video
- video
- reference_images
- plan
If you've run Bernini before, you ran the renderer-only version: the community path (Kijai's integration, Wan2GP) plugged a Wan 2.2 expert in and hoped the prompt was enough. What you never got was the other half of the paper - the multimodal semantic planner. That's exactly what this node is. Bernini v2 Plan runs ByteDance's Qwen2.5-VL + VIT decoder planner natively and turns your prompt into the four conditioning arms the renderer actually consumes. This pack is the first ComfyUI path where the "planner" isn't a marketing diagram; it's a node in your graph.
Here's the mental model: Bernini v2 is a two-stage model. First a planner (Qwen2.5-VL with a connector and a VIT flow decoder) thinks about the scene, the motion, and how your references fit together. Then two Wan 2.2 experts - a high-noise and a low-noise one - render it. This node is stage one. Everything downstream (RendererGuider, Scheduler) takes its plan output and never looks back at your prompt.
What you feed it
- planner - the output of Load Bernini v2 Planner. It won't run without it.
- positive / negative - CONDITIONING from a CLIPTextEncode wired to the Load Bernini v2 T5 CLIP. Bernini is instruction-style, not caption-style: describe the edit, and for multi-image work address references by index ("the man from image0... the shirt from image2... keeping the scene from image4 unchanged").
- prompt / negative_prompt - plain text, same content as the conditioning above.
- task -
t2i,i2i,t2v,v2v,r2v, orrv2v. Everything else in the graph takes its cue from this. - source_video (or the newer video input) and reference_images - the autogrow reference slot takes up to eight images; the official R2V preset uses five.
The few things a beginner actually touches: task, prompt, and seed. Leave use_task_defaults on - when it's true, the node silently replaces your planning_steps, vit_denoising_steps, and max_media_size with the official per-task presets, which is what the quality tests were run at. match_source_size auto-fits your width/height to the source media, which is usually what you want for editing.
What comes out
A single plan (BERNINI_V2_PLAN). It carries the semantic plan plus the four renderer condition arms (text, target, base, source) that the Renderer Guider splits into its four/five-arm guidance. Wire it into Bernini v2 Renderer Guider and Bernini v2 UniPC Sigmas (the scheduler). It does not output latents or an image - that all happens on the render side.
Where people get burned
- Both source inputs at once.
source_videoandvideoare alternatives; connect both and it errors out on purpose. - Frame-count arithmetic. The Wan VAE compresses time ~4x, so only
4n+1lengths round-trip cleanly (33 frames → 9 latent frames → 33 back). Oddball lengths like 32 come back short. - The planner is big. This is a multi-billion-parameter Qwen running in your model management, so the first run loads a lot of weights. It offloads independently, but it's not a free lunch - on a 24 GB card keep the 640-long-edge test workflows before climbing to 720p.
Installing it
The whole pack installs as one unit. In ComfyUI Manager search "Bernini v2 (Native)", or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-bernini-v2-T8.git
Restart ComfyUI. It needs a current ComfyUI (0.33+); the pack itself only adds safetensors. Then the models - the recommended Balanced INT8 repack is ~45.6 GiB from t8star/Bernini-V2-Comfy, placed under ComfyUI/models/bernini_v2/, plus the Wan 2.1 VAE into ComfyUI/models/vae/. The README's hf download commands are the fastest way. Download time beats generation time, but not by as much as you'd hope.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| planner | BERNINI_V2_PLANNER | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| prompt | STRING | — | |
| negative_prompt | STRING | — | |
| task | COMBO | t2v | 6 options: t2i, i2i, t2v, v2v, r2v, rv2v |
| width | INT | 84816–8192 | — |
| height | INT | 48016–8192 | — |
| length | INT | 331–8192 | — |
| source_fps | FLOAT | 16.000.01–240 | — |
| use_task_defaults | BOOLEAN | true | — |
| match_source_size | BOOLEAN | true | — |
| max_media_size | INT | 848240–8192 | — |
| planning_steps | INT | 251–100 | — |
| vit_denoising_steps | INT | 51–100 | — |
| vit_text_cfg | FLOAT | 1.200–20 | — |
| vit_image_cfg | FLOAT | 1.000–20 | — |
| seed | INT | 420–18446744073709550000 | — |
| source_videoopt | IMAGE | — | |
| videoopt | VIDEO | — | |
| reference_imagesopt | COMFY_AUTOGROW_V3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| plan | BERNINI_V2_PLAN | — |