mirror of
https://git.datalinker.icu/kijai/ComfyUI-Hunyuan3DWrapper.git
synced 2025-12-14 15:24:29 +08:00
Update nodes.py
This commit is contained in:
parent
5b19d811ab
commit
a53d0e3f56
100
nodes.py
100
nodes.py
@ -144,7 +144,7 @@ class DownloadAndLoadHy3DDelightModel:
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_TYPES = ("DELIGHTMODEL",)
|
RETURN_TYPES = ("HY3DDIFFUSERSPIPE",)
|
||||||
RETURN_NAMES = ("delight_pipe", )
|
RETURN_NAMES = ("delight_pipe", )
|
||||||
FUNCTION = "loadmodel"
|
FUNCTION = "loadmodel"
|
||||||
CATEGORY = "Hunyuan3DWrapper"
|
CATEGORY = "Hunyuan3DWrapper"
|
||||||
@ -184,7 +184,7 @@ class Hy3DDelightImage:
|
|||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {
|
return {
|
||||||
"required": {
|
"required": {
|
||||||
"delight_pipe": ("DELIGHTMODEL",),
|
"delight_pipe": ("HY3DDIFFUSERSPIPE",),
|
||||||
"image": ("IMAGE", ),
|
"image": ("IMAGE", ),
|
||||||
"steps": ("INT", {"default": 50, "min": 1}),
|
"steps": ("INT", {"default": 50, "min": 1}),
|
||||||
"width": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 16}),
|
"width": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 16}),
|
||||||
@ -192,6 +192,9 @@ class Hy3DDelightImage:
|
|||||||
"cfg_image": ("FLOAT", {"default": 1.5, "min": 0.0, "max": 100.0, "step": 0.01}),
|
"cfg_image": ("FLOAT", {"default": 1.5, "min": 0.0, "max": 100.0, "step": 0.01}),
|
||||||
"cfg_text": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}),
|
"cfg_text": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}),
|
||||||
"seed": ("INT", {"default": 42, "min": 0, "max": 0xffffffffffffffff}),
|
"seed": ("INT", {"default": 42, "min": 0, "max": 0xffffffffffffffff}),
|
||||||
|
},
|
||||||
|
"optional": {
|
||||||
|
"scheduler": ("NOISESCHEDULER",),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,11 +203,19 @@ class Hy3DDelightImage:
|
|||||||
FUNCTION = "process"
|
FUNCTION = "process"
|
||||||
CATEGORY = "Hunyuan3DWrapper"
|
CATEGORY = "Hunyuan3DWrapper"
|
||||||
|
|
||||||
def process(self, delight_pipe, image, width, height, cfg_image, cfg_text, steps, seed):
|
def process(self, delight_pipe, image, width, height, cfg_image, cfg_text, steps, seed, scheduler=None):
|
||||||
|
|
||||||
device = mm.get_torch_device()
|
device = mm.get_torch_device()
|
||||||
offload_device = mm.unet_offload_device()
|
offload_device = mm.unet_offload_device()
|
||||||
|
|
||||||
|
if scheduler is not None:
|
||||||
|
if not hasattr(self, "default_scheduler"):
|
||||||
|
self.default_scheduler = delight_pipe.scheduler
|
||||||
|
delight_pipe.scheduler = scheduler
|
||||||
|
else:
|
||||||
|
if hasattr(self, "default_scheduler"):
|
||||||
|
delight_pipe.scheduler = self.default_scheduler
|
||||||
|
|
||||||
image = image.permute(0, 3, 1, 2).to(device)
|
image = image.permute(0, 3, 1, 2).to(device)
|
||||||
|
|
||||||
image = delight_pipe(
|
image = delight_pipe(
|
||||||
@ -233,7 +244,7 @@ class DownloadAndLoadHy3DPaintModel:
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_TYPES = ("HY3DPAINTMODEL",)
|
RETURN_TYPES = ("HY3DDIFFUSERSPIPE",)
|
||||||
RETURN_NAMES = ("multiview_pipe", )
|
RETURN_NAMES = ("multiview_pipe", )
|
||||||
FUNCTION = "loadmodel"
|
FUNCTION = "loadmodel"
|
||||||
CATEGORY = "Hunyuan3DWrapper"
|
CATEGORY = "Hunyuan3DWrapper"
|
||||||
@ -587,12 +598,62 @@ class Hy3DRenderMultiViewDepth:
|
|||||||
|
|
||||||
return depth_maps
|
return depth_maps
|
||||||
|
|
||||||
|
class Hy3DDiffusersSchedulerConfig:
|
||||||
|
@classmethod
|
||||||
|
def INPUT_TYPES(s):
|
||||||
|
return {
|
||||||
|
"required": {
|
||||||
|
"pipeline": ("HY3DDIFFUSERSPIPE",),
|
||||||
|
"scheduler": (available_schedulers,
|
||||||
|
{
|
||||||
|
"default": 'Euler A'
|
||||||
|
}),
|
||||||
|
"sigmas": (["default", "karras", "exponential", "beta"],),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_TYPES = ("NOISESCHEDULER",)
|
||||||
|
RETURN_NAMES = ("diffusers_scheduler",)
|
||||||
|
FUNCTION = "process"
|
||||||
|
CATEGORY = "Hunyuan3DWrapper"
|
||||||
|
|
||||||
|
def process(self, pipeline, scheduler, sigmas):
|
||||||
|
|
||||||
|
scheduler_config = dict(pipeline.scheduler.config)
|
||||||
|
|
||||||
|
if scheduler in scheduler_mapping:
|
||||||
|
if scheduler == "DPM++SDE":
|
||||||
|
scheduler_config["algorithm_type"] = "sde-dpmsolver++"
|
||||||
|
else:
|
||||||
|
scheduler_config.pop("algorithm_type", None)
|
||||||
|
if sigmas == "default":
|
||||||
|
scheduler_config["use_karras_sigmas"] = False
|
||||||
|
scheduler_config["use_exponential_sigmas"] = False
|
||||||
|
scheduler_config["use_beta_sigmas"] = False
|
||||||
|
elif sigmas == "karras":
|
||||||
|
scheduler_config["use_karras_sigmas"] = True
|
||||||
|
scheduler_config["use_exponential_sigmas"] = False
|
||||||
|
scheduler_config["use_beta_sigmas"] = False
|
||||||
|
elif sigmas == "exponential":
|
||||||
|
scheduler_config["use_karras_sigmas"] = False
|
||||||
|
scheduler_config["use_exponential_sigmas"] = True
|
||||||
|
scheduler_config["use_beta_sigmas"] = False
|
||||||
|
elif sigmas == "beta":
|
||||||
|
scheduler_config["use_karras_sigmas"] = False
|
||||||
|
scheduler_config["use_exponential_sigmas"] = False
|
||||||
|
scheduler_config["use_beta_sigmas"] = True
|
||||||
|
noise_scheduler = scheduler_mapping[scheduler].from_config(scheduler_config)
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unknown scheduler: {scheduler}")
|
||||||
|
|
||||||
|
return (noise_scheduler,)
|
||||||
|
|
||||||
class Hy3DSampleMultiView:
|
class Hy3DSampleMultiView:
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {
|
return {
|
||||||
"required": {
|
"required": {
|
||||||
"pipeline": ("HY3DPAINTMODEL",),
|
"pipeline": ("HY3DDIFFUSERSPIPE",),
|
||||||
"ref_image": ("IMAGE", ),
|
"ref_image": ("IMAGE", ),
|
||||||
"normal_maps": ("IMAGE", ),
|
"normal_maps": ("IMAGE", ),
|
||||||
"position_maps": ("IMAGE", ),
|
"position_maps": ("IMAGE", ),
|
||||||
@ -602,10 +663,7 @@ class Hy3DSampleMultiView:
|
|||||||
},
|
},
|
||||||
"optional": {
|
"optional": {
|
||||||
"camera_config": ("HY3DCAMERA",),
|
"camera_config": ("HY3DCAMERA",),
|
||||||
"scheduler": (available_schedulers,
|
"scheduler": ("NOISESCHEDULER",),
|
||||||
{
|
|
||||||
"default": 'Euler A'
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -614,7 +672,7 @@ class Hy3DSampleMultiView:
|
|||||||
FUNCTION = "process"
|
FUNCTION = "process"
|
||||||
CATEGORY = "Hunyuan3DWrapper"
|
CATEGORY = "Hunyuan3DWrapper"
|
||||||
|
|
||||||
def process(self, pipeline, ref_image, normal_maps, position_maps, view_size, seed, steps, camera_config=None, scheduler="Euler A"):
|
def process(self, pipeline, ref_image, normal_maps, position_maps, view_size, seed, steps, camera_config=None, scheduler=None):
|
||||||
device = mm.get_torch_device()
|
device = mm.get_torch_device()
|
||||||
mm.soft_empty_cache()
|
mm.soft_empty_cache()
|
||||||
torch.manual_seed(seed)
|
torch.manual_seed(seed)
|
||||||
@ -655,17 +713,13 @@ class Hy3DSampleMultiView:
|
|||||||
|
|
||||||
callback = ComfyProgressCallback(total_steps=steps)
|
callback = ComfyProgressCallback(total_steps=steps)
|
||||||
|
|
||||||
scheduler_config = dict(pipeline.scheduler.config)
|
if scheduler is not None:
|
||||||
|
if not hasattr(self, "default_scheduler"):
|
||||||
if scheduler in scheduler_mapping:
|
self.default_scheduler = pipeline.scheduler
|
||||||
if scheduler == "DPM++SDE":
|
pipeline.scheduler = scheduler
|
||||||
scheduler_config["algorithm_type"] = "sde-dpmsolver++"
|
|
||||||
else:
|
else:
|
||||||
scheduler_config.pop("algorithm_type", None)
|
if hasattr(self, "default_scheduler"):
|
||||||
noise_scheduler = scheduler_mapping[scheduler].from_config(scheduler_config)
|
pipeline.scheduler = self.default_scheduler
|
||||||
pipeline.scheduler = noise_scheduler
|
|
||||||
else:
|
|
||||||
raise ValueError(f"Unknown scheduler: {scheduler}")
|
|
||||||
|
|
||||||
multiview_images = pipeline(
|
multiview_images = pipeline(
|
||||||
input_image,
|
input_image,
|
||||||
@ -1166,7 +1220,8 @@ NODE_CLASS_MAPPINGS = {
|
|||||||
"Hy3DSetMeshPBRTextures": Hy3DSetMeshPBRTextures,
|
"Hy3DSetMeshPBRTextures": Hy3DSetMeshPBRTextures,
|
||||||
"Hy3DSetMeshPBRAttributes": Hy3DSetMeshPBRAttributes,
|
"Hy3DSetMeshPBRAttributes": Hy3DSetMeshPBRAttributes,
|
||||||
"Hy3DVAEDecode": Hy3DVAEDecode,
|
"Hy3DVAEDecode": Hy3DVAEDecode,
|
||||||
"Hy3DRenderSingleView": Hy3DRenderSingleView
|
"Hy3DRenderSingleView": Hy3DRenderSingleView,
|
||||||
|
"Hy3DDiffusersSchedulerConfig": Hy3DDiffusersSchedulerConfig
|
||||||
}
|
}
|
||||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||||
"Hy3DModelLoader": "Hy3DModelLoader",
|
"Hy3DModelLoader": "Hy3DModelLoader",
|
||||||
@ -1191,5 +1246,6 @@ NODE_DISPLAY_NAME_MAPPINGS = {
|
|||||||
"Hy3DSetMeshPBRTextures": "Hy3D Set Mesh PBR Textures",
|
"Hy3DSetMeshPBRTextures": "Hy3D Set Mesh PBR Textures",
|
||||||
"Hy3DSetMeshPBRAttributes": "Hy3D Set Mesh PBR Attributes",
|
"Hy3DSetMeshPBRAttributes": "Hy3D Set Mesh PBR Attributes",
|
||||||
"Hy3DVAEDecode": "Hy3D VAE Decode",
|
"Hy3DVAEDecode": "Hy3D VAE Decode",
|
||||||
"Hy3DRenderSingleView": "Hy3D Render SingleView"
|
"Hy3DRenderSingleView": "Hy3D Render SingleView",
|
||||||
|
"Hy3DDiffusersSchedulerConfig": "Hy3D Diffusers Scheduler Config"
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user