ComfyUI Bruxos do VFX
https://github.com/NyckM/Bruxos-do-VFX-Nodes/tree/main
Custom nodes for video VFX with Wan 2.2 / Bernini: object and people removal, batch upscaling, face swap, A/B comparison, and production-ready utilities — all designed for real-world VFX workflows.
<img width="832" height="480" alt="Workflow for object and people removal" src="https://github.com/user-attachments/assets/6745a8ce-00ce-4915-a60d-ed1354099311" />
Why this exists
Developed at Bruxos do VFX during the production of two feature films — Dr. Monstro (Marcos Jorge) and Alice Júnior 2 (Gil Baroni). The complexity of compositing and scene integration created the need for a dedicated object-removal workflow built on top of Bernini/Wan.
Current performance averages 96 frames in 204 seconds.
https://github.com/user-attachments/assets/1575f97f-34b9-492a-accb-818e97a6cbde
https://github.com/user-attachments/assets/d1e47486-ac3b-4030-be42-56a0f16b0128
Installation
Easy (recommended)
Run the included .bat installer from your ComfyUI installation folder. It will automatically install the node pack and download all required models.
(RunPod version is still under development.)
Manual
Copy the package into:
ComfyUI/custom_nodes/ComfyUI-Bruxos-do-VFXRestart ComfyUI.
Required Models
ModelDownloadDestinationUNET GGUF (high/low)https://huggingface.co/neuregex/Bernini-R-GGUF/tree/mainComfyUI/models/unetDistill LoRA (4 steps)https://huggingface.co/Cyph3r/lightx2v_T2V_14B_cfg_step_distill_v2_lora_rank64_bf16ComfyUI/models/lorasText Encoder (umt5)https://huggingface.co/Osrivers/umt5_xxl_fp8_e4m3fn_scaled.safetensorsComfyUI/models/text_encodersVAEhttps://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan2_1_VAE_bf16.safetensorsComfyUI/models/vae
Important: Download the models using the Hugging Face CLI or a download manager. Browser downloads may produce incomplete or corrupted files.
Nodes
<img width="226" height="557" alt="Bernini Long Condition" src="https://github.com/user-attachments/assets/934fd9b3-087f-47db-aeb2-6ca01967c556" />
Bernini / Generation
Bernini Infinity — Main renderer for videos longer than the standard 81-frame limit without requiring a custom sampler. It injects
context_latentsper chunk (with optionaltail_memory) instead of relying on a single conditioning, taking advantage of Bernini/Wan's native architecture.Bernini Region Mask — Converts colored masks (SAM2/SAM3/Scail2Color) into black-and-white masks with invert, grow, and blur controls.
Bernini Long (Conditioning / ChunkSelect / VideoMerge / AppendVideoChunk / EmptyVideoChunks / Info) — Helper nodes for long video generation.
FaceStitchUpscale — Blends the upscaled face back into the video using the
face_bboxesgenerated by Pose and Face Detection.SAM3 Point Editor — Green click = positive point, purple click = negative point directly on the frame, providing much more stable tracking than text prompts alone.
Video
Load Video / Save Video — Native VIDEO (ComfyUI 2.0) equivalents to Video Helper Suite, including preview trimming (skip, cap, nth frame, force rate) and extended export controls for codec and CRF.
Compare Videos A/B — Built-in comparison player with wipe, side-by-side, difference, and toggle modes, allowing before/after inspection without leaving ComfyUI.
Mask BBox Preview — Displays the bounding box that
bboxmode would crop before rendering.
Upscaling
Upscale Config / Batch Blend — Super-nodes that replace the original Settings and Blend Frames subgraphs.
Utilities
Grow + Blur Mask
Block Mask
Smart Sharpen
Text Utilities / Show Text
Seed Generator
Load Images From Folder
Video Info
Wan All-in-One Loader
Qwen-VL Caption
Prompt Guide (official Bernini presets)
Sequential vs Context Window
SequentialContext WindowProcessingProcesses chunks sequentially, advancing chunk_size - overlap frames each stepProcesses the full video using a sliding context windowVRAM UsageLowerSlightly highermask_mode = bbox❌ Falls back to inpaint✅ SupportedTemporal ConsistencyGood (via tail_memory)Better (native)Recommended UseVery long videos or limited VRAMVideos that fit in a single generation or when using bbox mode
⚠️ Using a very small chunk_size together with a large overlap dramatically increases the number of passes (for example: chunk=17, overlap=16 results in 61 passes). Larger chunks with smaller overlaps are generally recommended.
Mask Modes
off — Regenerates the entire frame.
inpaint — Only edits the masked region while preserving the original image elsewhere.
bbox — Crops the masked region and generates it at a smaller resolution for significantly lower VRAM usage. (Available only in Context Window mode.)
Changelog (Major Milestones)
v0.2
Automatic 4n+1 frame correction (mirrored padding + final trimming)
Added
mask_mode(off,inpaint,bbox)Added
mask_growAdded
mask_blur
v0.3
Added FaceStitchUpscale
v0.5
Added native VIDEO Load/Save nodes (ComfyUI 2.0)
v0.6–0.9
Complete suite of native utility nodes (reducing third-party dependencies)
Compare Videos A/B
Mask BBox Preview
Upscale Config / Batch Blend
Server-side preview trimming in Load Video
v0.10
Added SAM3 Point Editor (green positive / purple negative points) for significantly more stable object tracking.
Why isn't there a "Bernini Long Sampler"?
Because Bernini already passes temporal information through conditioning, and the Wan patch already accepts context_latents as a list. The important part is generating the correct conditionings:
context_latents = [
encoded_chunk,
tail_latent,
]This approach leverages the native Bernini architecture instead of duplicating an entire sampler, making the package easier to maintain and fully compatible with existing Bernini workflows.
An automatic chunk executor may be added in the future, but it would depend on the exact node names and class implementations installed on each user's system.
🙏 Acknowledgements
Built on top of Kijai's work and the Bernini models.
Many thanks to the original authors and the open-source community.
📄 License
Apache License 2.0.
Description
FAQ
Comments (14)
https://github.com/NyckM/Bruxos-do-VFX-Nodes/tree/main
nodes for Bernini
its very slow in my RTX 4070 12GB, took 30mins for just 121 frames, how to solve this?
first resolution, for 12gb vram the best isp 480p 832x480, second using bbox, is gonna generate just inside the mask, this is gonna help vram and memory optimized. use content window, because sequential is gonna make block more bigger.
workflow and nodes Updated
What is the difference between sequential & content_window?
sequential vs context_window — what's the difference?
Both control how the node processes a video that's longer than one chunk, but they handle the chunks very differently.
sequential processes the video in chunks one after another, where each chunk slides forward by chunk_size − overlap. The tail_memory option feeds a few edited frames from the previous chunk into the next one to keep continuity. It's the more memory-friendly, straightforward path, but because it re-runs the model on overlapping windows, a small chunk_size with a large overlap can explode the number of chunks (e.g. chunk=17, overlap=16 → step 1 → 61 passes). Note: bbox masking does not apply in sequential — it falls back to inpaint.
context_window treats the whole clip as one generation but gives the model a sliding context of neighboring frames, so it looks at surrounding frames for temporal consistency instead of stitching separate passes. It tends to give smoother motion/continuity across the full video, and it's the mode where bbox masking works (so you get the region-crop speedup).
Rule of thumb:
Short clip that fits in one pass → either works; context_window gives the best consistency and enables bbox.
Very long clip / limited VRAM → sequential with a large chunk_size and a small overlap keeps the number of passes low.
Want the bbox region crop to save time/VRAM → you must use context_window (in sequential it's ignored).
workflow and nodes Updated
to fix that i create a bat file for install, https://github.com/NyckM/Bruxos-do-VFX-Nodes/tree/main/InstallEasy this automatic install and download the models for the Customnodes work, you should put this file on comfyui folder and open.
Hi! A few common reasons this happens, in order of likelihood:
1. ComfyUI wasn't restarted after copying the folder. New custom nodes are
only picked up on startup, reopen ComfyUI completely (not just refresh
the browser tab).
2. Wrong folder location. The node pack folder itself
ComfyUI-Bruxos-do-VFX) needs to sit directly inside
ComfyUI/custom_nodes/, e.g.:
ComfyUI/custom_nodes/ComfyUI-Bruxos-do-VFX/__init__.py
not nested one level deeper, and not just the loose files.
3. Browser cache, if the nodes load on the backend but don't show up in
the node search: hard refresh with Ctrl+Shift+R.
4. Startup errors being swallowed. Check your ComfyUI console/log right
after startup for a line mentioning Bruxos — if it fails to import,
there'll be a warning there with the actual reason.
Could you paste the relevant lines from your console log (search for
"Bruxos")? That'll tell us exactly what's failing instead of guessing. Also
worth trying: use the install script bruxos_setup_windows.bat for Windows)
if you're not already, since it handles the folder placement and pip install
path automatically.
@BruxosDoVFX It turned out that the issue was caused by manually installing the custom nodes and then running 'Install Easy' on top of them. After a clean reinstall using only 'Install Easy', everything is working perfectly. Thank you so much for creating this workflow!
workflow and nodes Updated
It's a very good workflow. One thing I haven't been able to figure out. For models that use a lot of vram, I like to put a vram debug node between the samplers. But this is doing both sampler phases through one node. Is there anything to do about that? Thanks
workflow and nodes Updated