Bernini Full Text to Image
The whole Bernini pipeline in one node — MLLM planner and all
- image
Most Bernini nodes in the wild are running Bernini-R - the renderer-only model that Kijai's integration targets, and the thing everyone actually runs. This node is not that. RHBerniniFullTextToImage drives the full Bernini pipeline: the 7B MLLM semantic planner, the Qwen2.5-VL vision encoder, T5 text encoding, and the 14B diffusion transformer, all from one node. It's a text-to-image node that carries the entire model stack under the hood.
Why would you want that? Two reasons. First, it's the honest version of "test the model before you go editing": ByteDance's own README tells you to start with text-to-image when checking your environment, and this is that check. Second, the planner is the half of the paper that barely ever reached a working local path - the community consensus is that nobody got anything out of it that Bernini-R didn't already give them, so running it yourself is the only way to form your own opinion. It costs you: this is the heaviest thing you'll load, and the first cold load of the qint8 model isn't something a bigger GPU skips.
The pack is by RunningHub (the cloud GPU platform, RH-RunningHub/ComfyUI-RH-Bernini-Full), and it does real local inference - no API, no key, no RunningHub account needed. You just need the model on disk and a serious chunk of VRAM.
What you actually set
The node is deliberately bare-bones. All the scary internals (omega scales, guidance modes, planning steps) are hard-coded defaults; the widgets that matter:
- prompt - a plain instruction, not a tag soup. Bernini prompts like an edit request even for pure generation, so "a clean studio product image of a red ceramic teapot on a white table, soft daylight" works better than
teapot, studio, product. - steps - defaults to 4, which only makes sense with LightX2V acceleration active (see the gotcha below). The example workflows in the repo use 50 steps with acceleration off.
- width / height - 64–2048, step 16. Bigger is a straight VRAM trade; 512² is a sensible floor to confirm the pipeline works.
- quality_preset -
standard(default) orquality. Quality just gives the planner more time (planning step 25 → 35), not more diffusion steps. - seed - clamped to a valid uint32 for you, so any integer works.
- acceleration and memory_mode - shared with every node in the pack, described below.
It outputs a single standard IMAGE socket, so wire it straight into SaveImage (or anything that takes an image).
Installing the pack
This install is the same for all six nodes in the pack, and it's heavier than a typical custom node:
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]
The --no-deps on VeOmni matters - it's a hard dependency (the MLLM and parallel code import it), but installing it with deps can replace your torch/CUDA and break your whole ComfyUI. Then grab the model:
cd ComfyUI/models
modelscope download --model Gluttony10/Bernini-Diffusers-qint8 --local_dir diffusers/Bernini-Diffusers-qint8
It must sit at ComfyUI/models/diffusers/Bernini-Diffusers-qint8 with the bernini/, mllm/, t5_text_encoder/, t5_tokenizer/, and vae/ subfolders intact. The node validates the folder's config.json (must say model_type: "bernini") and will refuse a Bernini-R path outright. ComfyUI Manager also finds it if you search the pack title.
Where people get burned
- The acceleration setting silently no-ops. If
wan2.2_lightx2v_4stepis selected but the Seko V2.0 LoRA pair isn't inComfyUI/models/loras, the node just runs without LoRAs and prints a warning. Your 4-step default then produces mush. Either downloadWan2.2-T2V-A14B-4steps-lora-rank64-Seko-V2.0/high_noise_model.safetensors+low_noise_model.safetensors, or set acceleration tononeand raise steps. - VRAM. The qint8 package is quantized with optimum-quanto, so it fits where the fp16 full model won't - but "fits" is doing a lot of work.
memory_mode: low_vram_unloadfrees VAE/planner/T5/transformer stages after each run and clears CUDA cache, which helps you run more things in sequence; it does nothing for the first load.
For a quick sanity check before committing to video, this is the node to run - it's the cheapest thing the pack does, and if the pipeline loads here, your install is correct.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A clean studio product image of a red ceramic teapot on a white table, soft daylight | Text prompt or edit instruction. |
| negative_prompt | STRING | low quality, blurry, distorted, text, watermark | Negative prompt. |
| 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 | 12340–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 |
|---|---|---|
| image | IMAGE | — |