Bernini Model Config
One node to hold your whole Bernini environment
- bernini_config
- summary
Bernini is the best open video-editing model of 2026 - ByteDance's Wan-2.2-derived renderer, Apache 2.0, maskless instruction editing - and it's also the kind of thing that makes people give up before the first render. It needs its own cloned repo, its own Python 3.11 CUDA environment, a multi-gigabyte model directory, and optionally two separate checkpoints. That's four paths to get wrong, and wiring them straight into a giant runner node is how graphs get ugly fast. Bernini Model Config exists so you set them once, in one place, and hand the runner a clean typed object.
It's a config/loader node in the same shape as the loader nodes in Kijai's WanVideoWrapper: small helper in, structured data out. Crucially, it does no model loading and no VRAM work - BERNINI_CONFIG is just a bundle of paths and environment variables the runner will unpack when it builds its command. Its whole job is keeping the runnable part of your graph readable.
The inputs that matter
Mostly you set three fields and leave the rest alone:
- bernini_repo_dir - the folder containing
infer_single_gpu.py, i.e. your clone ofbytedance/Bernini. - python_executable - the interpreter of the Python 3.11 CUDA environment you made for Bernini. This is not ComfyUI's Python; the renderer runs in a subprocess with its own env.
- config - where the model lives. The tooltip recommends a local
ByteDance/Bernini-R-Diffusersdirectory; the alternative isconfigs/bernini_renderer_wan22inside the repo.
Two details to know before they bite you:
- high_noise_ckpt and low_noise_ckpt are optional but must be set together - set only one and the node raises a clear error instead of guessing. That matches Bernini's separate high/low-noise checkpoint layout for people who split the weights.
- env_json lets you inject environment variables as JSON, e.g.
{"CUDA_VISIBLE_DEVICES":"0"}to pick the GPU, or{"BERNINI_PE_API_KEY":"..."}if you run the prompt enhancer. Thesummaryoutput redacts anything whose key looks like KEY/TOKEN/SECRET/PASSWORD - a small courtesy you'll appreciate the day you paste a workflow into a shared post.
Outputs
- bernini_config (type
BERNINI_CONFIG) - plugs directly into Bernini Run Single GPU'sbernini_configinput and overrides the runner's fallback path widgets. - summary (STRING) - pretty-printed JSON of everything the runner will use; dump it into a Show Text node to sanity-check your paths.
Installing this node
This is one of the 16 nodes in the lzits Nodes pack (by Lior Zitser, MIT), so you install the whole pack once:
- ComfyUI Manager - search for "lzits Nodes" and hit install.
- Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/lzitser23/lzits-nodes.git
Then restart ComfyUI. None of the Bernini nodes pull Bernini's own Python dependencies into ComfyUI - they shell out to a separate environment - but you still need the upstream assets: git clone https://github.com/bytedance/Bernini and hf download ByteDance/Bernini-R-Diffusers. The Bernini Setup Commands node prints the exact commands.
Where people get burned: pointing python_executable at ComfyUI's Python and expecting it to work. It won't - the whole point of the subprocess design is that Bernini's torch/CUDA stack stays out of ComfyUI's environment. If the runner dies with a cryptic torch error, nine times out of ten it's this field.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| bernini_repo_dir | STRING | /root/Bernini | Folder containing infer_single_gpu.py from https://github.com/bytedance/Bernini |
| python_executable | STRING | /usr/bin/python | Python in the Bernini environment. Usually a Python 3.11 CUDA env, not necessarily ComfyUI's Python. |
| config | STRING | /root/Bernini-R-Diffusers | Recommended: ByteDance/Bernini-R-Diffusers local directory. Alternative: configs/bernini_renderer_wan22. |
| high_noise_ckpt | STRING | Optional. Set with low_noise_ckpt for separate checkpoint layout. | |
| low_noise_ckpt | STRING | Optional. Set with high_noise_ckpt for separate checkpoint layout. | |
| env_jsonopt | STRING | Optional env vars as JSON, e.g. {"CUDA_VISIBLE_DEVICES":"0", "BERNINI_PE_API_KEY":"..."} |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| bernini_config | BERNINI_CONFIG | — |
| summary | STRING | — |