Bernini Full Video to Video
Maskless video editing with the full Bernini pipeline — no SAM, no ControlNet
- video
- video
This is the node the pack is actually named for. RHBerniniFullVideoToVideo takes a source video and an instruction - "restyle the source video while preserving motion" is the default, and it's the right shape - and returns an edited video with no mask, no SAM pipeline, no ControlNet in front of it. That's Bernini's whole party trick, and the thing that made it the community's pick for video editing over VACE: you type what you want changed and the model figures out what to touch. The canonical demo is object removal - a hang glider erased from a paragliding clip so the man looks like he's flying unaided - which Bernini handles directly from the prompt.
There's a real catch to set expectations, and it's structural, not a bug. Editing video with Bernini costs roughly double the compute of a plain Wan 2.2 generation of the same length, because the source video you're editing is itself part of the model input sequence. Same story for VRAM. Kijai's explanation from the release threads is the one to remember: editing 121 frames internally processes about 242. This node, running the full model rather than renderer-only Bernini-R, is at the heavy end of that. Plan for a slow, hot run.
Inputs and outputs
Required inputs: video (a VIDEO socket - from LoadVideo, a SaveVideo-style source, or another video node's output), prompt, negative_prompt, num_frames, fps, width, height, steps, seed, quality_preset, acceleration, memory_mode.
The few that matter:
- video - feeds in and, notably, drives the output size. If width and height are both left at 0 (their defaults here), the output follows the source video's dimensions. This is different from the image and t2v nodes, where width/height always set the size.
- num_frames - default 9, 5–129, step 4. Keep the 4n+1 rhythm (9, 81, 129) so the Wan VAE decodes cleanly - the model's native context is 81 frames, and that's the sweet spot.
- prompt - instruction-style, and it should say what to change and what to keep. "Remove the hang glider, harness and white bars so it appears like the man is flying" is the shape Bernini is best at.
- steps - 4 with LightX2V LoRAs present (the default fast setting), 25–50 without.
Output is one VIDEO socket → SaveVideo.
Installing
Identical to the rest of 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]
Model at ComfyUI/models/diffusers/Bernini-Diffusers-qint8:
cd ComfyUI/models
modelscope download --model Gluttony10/Bernini-Diffusers-qint8 --local_dir diffusers/Bernini-Diffusers-qint8
The pack only runs the full Bernini-Diffusers model - a Bernini-R directory will be rejected by the node's own validation. ComfyUI Manager finds the pack by its title if you'd rather install that way.
Issues you'll actually hit
- The heavy-edit tax. Source video in, edited video out, roughly 2× a plain generation's compute.
memory_mode: low_vram_unloadreleases the VAE, planner, T5, and transformer in order after each run and clears CUDA cache - use it if you're sharing VRAM with anything else.keep_loaded_batch(default) is the right choice when you're iterating, since the second run skips the cold load. - Silent acceleration fallback. If the Seko V2.0 LightX2V LoRA pair isn't under
ComfyUI/models/loras, thewan2.2_lightx2v_4stepsetting just logs and runs without LoRAs. Four steps with no LoRAs is a bad look. Either fetchWan2.2-T2V-A14B-4steps-lora-rank64-Seko-V2.0(high + low noise) or switch acceleration to none and raise steps. - No audio, no first-frame/last-frame. Bernini doesn't do audio, and it doesn't support FLF chaining or SVI-style extension. If your project depends on long-form stitching, plain Wan 2.2 is the safer base.
- Verify your workflow source. The pack ships example API JSONs that assume bundled assets copied into
ComfyUI/input/(e.g.bernini_v2v_source_case1.mp4) - worth copying if you're testing with the repo's own examples.
Start small. A 9-frame edit at 512² tells you everything about whether your machine can handle the 81-frame job you actually want, and it burns a lot less GPU than finding out the hard way.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | Source video from a ComfyUI video output. | |
| prompt | STRING | Restyle the source video while preserving motion. | 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 | 00–2048 | 0 follows the source video width. |
| height | INT | 00–2048 | 0 follows the source video height. |
| steps | INT | 41–100 | Diffusion steps. |
| seed | INT | 45670–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 | — |