Trying to get omnimattezero installed but cant find the models
Nice. Looks like there may be a more suspicious culprit than offloading:
I think the faint grid is probably not caused by the GGUF file itself, and maybe not by block_num either. The first thing I would test is VAE tiling.
In the current ComfyUI_OmnimatteZero code, block_num = 0 does not mean “disable all memory-saving behavior”. It only avoids the apply_group_offloading(...) branch. The fallback branch still calls model.enable_model_cpu_offload().
Relevant file:
OmnimatteZero_node.py
The relevant logic is roughly:
if block_num > 0:
apply_group_offloading(
model.transformer,
onload_device=torch.device("cuda"),
offload_type="block_level",
num_blocks_per_group=block_num,
)
else:
model.enable_model_cpu_offload()
So the behavior is:
block_num value |
What happens | What it does not mean |
|---|---|---|
> 0 |
Uses Diffusers group offloading on the transformer | Not image tiling |
0 |
Skips group offloading, but still enables model CPU offload | Not “disable all offloading / tiling” |
The grid artifact sounds more like a VAE tiling artifact. In object_removal.py, VAE tiling is enabled unconditionally:
pipe.vae.enable_tiling()
There is also another one for the upsample path:
pipe_upsample.vae.enable_tiling()
Diffusers’ own docs describe VAE tiling as a memory-saving method that decodes the image in overlapping tiles, and they note that tile-to-tile tone variation can happen:
Diffusers memory optimization docs: VAE tiling
So if you have a 32GB card, I would test disabling VAE tiling first.
Patch 1: disable VAE tiling
Open:
ComfyUI/custom_nodes/ComfyUI_OmnimatteZero/object_removal.py
Find:
pipe.vae.enable_tiling()
Change it to:
# pipe.vae.enable_tiling()
Also find:
pipe_upsample.vae.enable_tiling()
Change it to:
# pipe_upsample.vae.enable_tiling()
Then fully restart ComfyUI and test the same workflow again.
Patch 2: if you also want to avoid model CPU offload
This is optional. I would only try this after testing VAE tiling first.
Open:
ComfyUI/custom_nodes/ComfyUI_OmnimatteZero/OmnimatteZero_node.py
Find this block:
if block_num > 0:
apply_group_offloading(
model.transformer,
onload_device=torch.device("cuda"),
offload_type="block_level",
num_blocks_per_group=block_num,
)
else:
model.enable_model_cpu_offload()
For a 32GB card, you can try replacing the else branch with model.to(device):
if block_num > 0:
apply_group_offloading(
model.transformer,
onload_device=torch.device("cuda"),
offload_type="block_level",
num_blocks_per_group=block_num,
)
else:
model.to(device)
There are two similar blocks in the file, so check both:
- the normal inference path;
- the compose/background-replacement path.
The second one appears around the compose_video(...) path.
Test order I would use
| Step | Change | Reason |
|---|---|---|
| 1 | Comment out pipe.vae.enable_tiling() |
Most likely source of a visible grid |
| 2 | Also comment out pipe_upsample.vae.enable_tiling() if using the upsample path |
Same reason, but only matters if that path is used |
| 3 | Keep block_num = 0 |
Avoid group offloading while testing |
| 4 | If the grid remains, replace model.enable_model_cpu_offload() with model.to(device) |
Tests whether CPU/model offload is involved |
| 5 | If VRAM runs out, restore offloading or use a smaller GGUF quant | Q8_0 can still be heavy depending on resolution and frame count |
Important caveat
Disabling VAE tiling increases VRAM use. A 32GB card has a much better chance of handling it, but it can still OOM depending on:
- resolution;
- number of frames;
- whether Q8_0 / Q6_K / Q5_K_M / Q4_K_M is used;
- whether upsampling is enabled;
- whether compose mode / background replacement is enabled;
- how much VRAM ComfyUI already has occupied.
So I would not change everything at once. First test only this:
# pipe.vae.enable_tiling()
# pipe_upsample.vae.enable_tiling()
If that removes the grid, then the issue was probably VAE tiling rather than group offloading.
Discussion in the ATmosphere