Files
2026-04-09 20:50:00 -04:00

65 lines
1.9 KiB
Python

"""
ComfyUI-VOID — Video Object and Interaction Deletion
Custom nodes for the VOID model (netflix/void-model).
Removes objects and their physical interactions from videos.
Built on CogVideoX-Fun-V1.5-5b-InP with interaction-aware quadmask conditioning.
Nodes:
VOID Load VAE — load CogVideoX-Fun 3D VAE
VOID Load Text Encoder — load T5-XXL text encoder
VOID Loader — load both pass checkpoints, assemble pipelines
VOID Inference — Pass 1 inpainting + optional Pass 2 refinement
VOID Quadmask Builder — compile quadmask from SAM2/SAM3 mask outputs
"""
import os
import importlib.metadata
import folder_paths
from typing_extensions import override
from comfy_api.latest import ComfyExtension, io
# Verify diffusers version — CogVideoX requires >=0.33.1
try:
_diffusers_ver = tuple(int(x) for x in importlib.metadata.version("diffusers").split(".")[:3])
if _diffusers_ver < (0, 33, 1):
raise RuntimeError(
f"ComfyUI-VOID requires diffusers>=0.33.1 (found {importlib.metadata.version('diffusers')}). "
"Run: pip install diffusers>=0.33.1"
)
except importlib.metadata.PackageNotFoundError:
pass
# Register the void-model model subfolder so COMBO inputs can list checkpoints
try:
_void_dir = os.path.join(folder_paths.models_dir, "void-model")
os.makedirs(_void_dir, exist_ok=True)
folder_paths.add_model_folder_path("void-model", _void_dir)
except Exception:
pass
from .void_nodes import (
VoidLoadVAE,
VoidLoadTextEncoder,
VoidLoader,
VoidInference,
VoidQuadmaskBuilder,
)
class VoidExtension(ComfyExtension):
@override
async def get_node_list(self) -> list[type[io.ComfyNode]]:
return [
VoidLoadVAE,
VoidLoadTextEncoder,
VoidLoader,
VoidInference,
VoidQuadmaskBuilder,
]
async def comfy_entrypoint() -> VoidExtension:
return VoidExtension()