65 lines
1.9 KiB
Python
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()
|