Nodes/Bernini v2 (Native)/Bernini v2 Plan
ComfyUI Node

Bernini v2 Plan

The node that finally wires up Bernini v2's brain

By T8mars·Created 2 days ago·Updated about 11 hours ago· 1
Bernini v2 Plan
  • planner
  • positive
  • negative
  • source_video
  • video
  • reference_images
  • plan
prompt
negative_prompt
taskt2v
width848
height480
length33
source_fps16.00
use_task_defaultstrue
match_source_sizetrue
max_media_size848
planning_steps25
vit_denoising_steps5
vit_text_cfg1.20
vit_image_cfg1.00
seed42

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, or rv2v. 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_video and video are alternatives; connect both and it errors out on purpose.
  • Frame-count arithmetic. The Wan VAE compresses time ~4x, so only 4n+1 lengths 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.

Categoryconditioning/bernini_v2

Inputs (21)

NameTypeDefaultDescription
plannerBERNINI_V2_PLANNER
positiveCONDITIONING
negativeCONDITIONING
promptSTRING
negative_promptSTRING
taskCOMBOt2v6 options: t2i, i2i, t2v, v2v, r2v, rv2v
widthINT84816–8192
heightINT48016–8192
lengthINT331–8192
source_fpsFLOAT16.000.01–240
use_task_defaultsBOOLEANtrue
match_source_sizeBOOLEANtrue
max_media_sizeINT848240–8192
planning_stepsINT251–100
vit_denoising_stepsINT51–100
vit_text_cfgFLOAT1.200–20
vit_image_cfgFLOAT1.000–20
seedINT420–18446744073709550000
source_videooptIMAGE
videooptVIDEO
reference_imagesoptCOMFY_AUTOGROW_V3

Outputs (1)

NameTypeDescription
planBERNINI_V2_PLAN