Bernini Full Reference to Video
Bernini's multi-reference R2V node
- reference_image
- video
Reference-to-video is the capability that made Bernini's reputation, and RHBerniniFullReferenceToVideo is this pack's version of it. Feed it one or more reference images and a prompt, get a video back that honors them - the headline community demo was a character held across different camera shots from multiple reference images, which is the kind of thing that used to require a closed-source API. The most-upvoted independent tester's verdict was basically "finally, near closed-source-level R2V," and that's the honest bar this sits at.
The catch is that most of the community's R2V runs use renderer-only Bernini-R. This node runs the full Bernini-Diffusers stack, planner included, so it's heavier and rarer - but it's also a genuinely different thing to have in a ComfyUI graph: the semantic planner is what lets the prompt reason about multiple references instead of just conditioning on them.
The multi-reference trick that matters
The reference_image input is an IMAGE socket, and the node's own tooltip says it: batched IMAGE inputs are passed as multiple references. So to use more than one image, you batch them (an Image Batch/VHS-style combiner, or a tensor with a batch dimension). Then the prompt addresses them by index - image0, image1, and so on, in the order of the batch. The official-style example from the Bernini community reads like: "The man from image0, wearing the black T-shirt from image2, the tropical floral shorts from image3, and the pink cat-ear headphones from image1, sits on the wooden bench in the beach sunset setting from image4..." This is instruction-style prompting, not captioning - you tell the model which reference supplies what, and that's the difference between a video that uses the images and a video that ignores them. The multi-reference encoding is chunked internally to protect VRAM, and the reference conditioning weights are set high (image guidance at 4.5) because consistency is the whole point.
Inputs and outputs
reference_image, prompt, negative_prompt, num_frames (5–129, step 4, default 9), fps (default 16), width, height (64–2048, step 16 - these set output size), steps, seed, quality_preset, acceleration, memory_mode. Output is a single VIDEO socket → SaveVideo.
Unlike the video-editing nodes, width/height aren't source-following here - there's no source video, so they always set the output size. For frame count, stay on the slider's 4n+1 rhythm; 81 frames is Bernini's native comfort zone.
Installing
Same as every node in the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/RH-RunningHub/ComfyUI-RH-Bernini-Full.git
cd ComfyUI-RH-Bernini-Full
pip install -r requirements.txt
pip install --no-deps git+https://github.com/ByteDance-Seed/[email protected]
Then the qint8 model at ComfyUI/models/diffusers/Bernini-Diffusers-qint8 (must be the full Bernini-Diffusers package - the node rejects Bernini-R paths):
cd ComfyUI/models
modelscope download --model Gluttony10/Bernini-Diffusers-qint8 --local_dir diffusers/Bernini-Diffusers-qint8
ComfyUI Manager can install the pack by title; the model download is always manual and it's a big one.
Where people get burned
- Silent acceleration fallback. The
wan2.2_lightx2v_4stepsetting only works if the Seko V2.0 LightX2V LoRA pair lives atComfyUI/models/loras/Wan2.2-T2V-A14B-4steps-lora-rank64-Seko-V2.0/(bothhigh_noise_modelandlow_noise_model). Missing pair = warning in the console, no LoRAs, and your default 4 steps will look bad. Either grab the pair or run accelerationnoneat 25–50 steps. Note the pack deliberately doesn't auto-load other LightX2V/I2V LoRAs - it only wants this exact T2V pair, so all task nodes share one cached pipeline. - No audio. Same as all Bernini: mute. Plan a separate audio stage if you need sound.
- Heaviness. Full-pipeline R2V with multiple references is a real VRAM and patience commitment.
keep_loaded_batch(default) caches the pipeline between runs;low_vram_unloadfrees stages after each run if you're tight. - Reference order confusion. Batch order is reference order - swap the images and
image0/image2in your prompt stop matching what you intended. It's worth labeling your sources in the workflow.
If you came for the multi-reference consistency demo everyone's been talking about, this is the node that does it. Start with two references and an indexed prompt before you bring all five.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| reference_image | IMAGE | One or more reference images. Batched IMAGE inputs are passed as multiple references. | |
| prompt | STRING | Animate the reference image into a short smooth video. | Text prompt or edit instruction. |
| negative_prompt | STRING | low quality, blurry, distorted, text, watermark | Negative prompt. |
| num_frames | INT | 95–129 | Number of output frames. Higher values increase VRAM use and runtime. |
| fps | INT | 161–60 | Frame rate written into the returned video. |
| width | INT | 51264–2048 | Output width in pixels. Larger values increase VRAM use and runtime. |
| height | INT | 51264–2048 | Output height in pixels. Larger values increase VRAM use and runtime. |
| steps | INT | 41–100 | Diffusion steps. |
| seed | INT | 56780–4294967295 | Random seed. Values are clamped to NumPy's valid 0 to 2**32-1 range before inference. |
| quality_preset | COMBO | standard | standard balances speed and quality; quality spends more planning time for better output. |
| acceleration | COMBO | wan2.2_lightx2v_4step | Auto-load the Wan2.2 T2V LightX2V 4-step LoRA pair from ComfyUI/models/loras when available. |
| memory_mode | COMBO | keep_loaded_batch | keep_loaded_batch keeps the Bernini pipeline cached for faster consecutive jobs; low_vram_unload frees memory after each run. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |