Merge branch 'master' into dr-support-pip-cm

This commit is contained in:
Dr.Lt.Data 2025-10-09 10:49:23 +09:00
commit 05cd5348b6
14 changed files with 145 additions and 111 deletions

View File

@ -21,17 +21,23 @@ def rescale_zero_terminal_snr_sigmas(sigmas):
alphas_bar[-1] = 4.8973451890853435e-08 alphas_bar[-1] = 4.8973451890853435e-08
return ((1 - alphas_bar) / alphas_bar) ** 0.5 return ((1 - alphas_bar) / alphas_bar) ** 0.5
def reshape_sigma(sigma, noise_dim):
if sigma.nelement() == 1:
return sigma.view(())
else:
return sigma.view(sigma.shape[:1] + (1,) * (noise_dim - 1))
class EPS: class EPS:
def calculate_input(self, sigma, noise): def calculate_input(self, sigma, noise):
sigma = sigma.view(sigma.shape[:1] + (1,) * (noise.ndim - 1)) sigma = reshape_sigma(sigma, noise.ndim)
return noise / (sigma ** 2 + self.sigma_data ** 2) ** 0.5 return noise / (sigma ** 2 + self.sigma_data ** 2) ** 0.5
def calculate_denoised(self, sigma, model_output, model_input): def calculate_denoised(self, sigma, model_output, model_input):
sigma = sigma.view(sigma.shape[:1] + (1,) * (model_output.ndim - 1)) sigma = reshape_sigma(sigma, model_output.ndim)
return model_input - model_output * sigma return model_input - model_output * sigma
def noise_scaling(self, sigma, noise, latent_image, max_denoise=False): def noise_scaling(self, sigma, noise, latent_image, max_denoise=False):
sigma = sigma.view(sigma.shape[:1] + (1,) * (noise.ndim - 1)) sigma = reshape_sigma(sigma, noise.ndim)
if max_denoise: if max_denoise:
noise = noise * torch.sqrt(1.0 + sigma ** 2.0) noise = noise * torch.sqrt(1.0 + sigma ** 2.0)
else: else:
@ -45,12 +51,12 @@ class EPS:
class V_PREDICTION(EPS): class V_PREDICTION(EPS):
def calculate_denoised(self, sigma, model_output, model_input): def calculate_denoised(self, sigma, model_output, model_input):
sigma = sigma.view(sigma.shape[:1] + (1,) * (model_output.ndim - 1)) sigma = reshape_sigma(sigma, model_output.ndim)
return model_input * self.sigma_data ** 2 / (sigma ** 2 + self.sigma_data ** 2) - model_output * sigma * self.sigma_data / (sigma ** 2 + self.sigma_data ** 2) ** 0.5 return model_input * self.sigma_data ** 2 / (sigma ** 2 + self.sigma_data ** 2) - model_output * sigma * self.sigma_data / (sigma ** 2 + self.sigma_data ** 2) ** 0.5
class EDM(V_PREDICTION): class EDM(V_PREDICTION):
def calculate_denoised(self, sigma, model_output, model_input): def calculate_denoised(self, sigma, model_output, model_input):
sigma = sigma.view(sigma.shape[:1] + (1,) * (model_output.ndim - 1)) sigma = reshape_sigma(sigma, model_output.ndim)
return model_input * self.sigma_data ** 2 / (sigma ** 2 + self.sigma_data ** 2) + model_output * sigma * self.sigma_data / (sigma ** 2 + self.sigma_data ** 2) ** 0.5 return model_input * self.sigma_data ** 2 / (sigma ** 2 + self.sigma_data ** 2) + model_output * sigma * self.sigma_data / (sigma ** 2 + self.sigma_data ** 2) ** 0.5
class CONST: class CONST:
@ -58,15 +64,15 @@ class CONST:
return noise return noise
def calculate_denoised(self, sigma, model_output, model_input): def calculate_denoised(self, sigma, model_output, model_input):
sigma = sigma.view(sigma.shape[:1] + (1,) * (model_output.ndim - 1)) sigma = reshape_sigma(sigma, model_output.ndim)
return model_input - model_output * sigma return model_input - model_output * sigma
def noise_scaling(self, sigma, noise, latent_image, max_denoise=False): def noise_scaling(self, sigma, noise, latent_image, max_denoise=False):
sigma = sigma.view(sigma.shape[:1] + (1,) * (noise.ndim - 1)) sigma = reshape_sigma(sigma, noise.ndim)
return sigma * noise + (1.0 - sigma) * latent_image return sigma * noise + (1.0 - sigma) * latent_image
def inverse_noise_scaling(self, sigma, latent): def inverse_noise_scaling(self, sigma, latent):
sigma = sigma.view(sigma.shape[:1] + (1,) * (latent.ndim - 1)) sigma = reshape_sigma(sigma, latent.ndim)
return latent / (1.0 - sigma) return latent / (1.0 - sigma)
class X0(EPS): class X0(EPS):
@ -80,16 +86,16 @@ class IMG_TO_IMG(X0):
class COSMOS_RFLOW: class COSMOS_RFLOW:
def calculate_input(self, sigma, noise): def calculate_input(self, sigma, noise):
sigma = (sigma / (sigma + 1)) sigma = (sigma / (sigma + 1))
sigma = sigma.view(sigma.shape[:1] + (1,) * (noise.ndim - 1)) sigma = reshape_sigma(sigma, noise.ndim)
return noise * (1.0 - sigma) return noise * (1.0 - sigma)
def calculate_denoised(self, sigma, model_output, model_input): def calculate_denoised(self, sigma, model_output, model_input):
sigma = (sigma / (sigma + 1)) sigma = (sigma / (sigma + 1))
sigma = sigma.view(sigma.shape[:1] + (1,) * (model_output.ndim - 1)) sigma = reshape_sigma(sigma, model_output.ndim)
return model_input * (1.0 - sigma) - model_output * sigma return model_input * (1.0 - sigma) - model_output * sigma
def noise_scaling(self, sigma, noise, latent_image, max_denoise=False): def noise_scaling(self, sigma, noise, latent_image, max_denoise=False):
sigma = sigma.view(sigma.shape[:1] + (1,) * (noise.ndim - 1)) sigma = reshape_sigma(sigma, noise.ndim)
noise = noise * sigma noise = noise * sigma
noise += latent_image noise += latent_image
return noise return noise

View File

@ -336,11 +336,25 @@ class Combo(ComfyTypeIO):
class Input(WidgetInput): class Input(WidgetInput):
"""Combo input (dropdown).""" """Combo input (dropdown)."""
Type = str Type = str
def __init__(self, id: str, options: list[str]=None, display_name: str=None, optional=False, tooltip: str=None, lazy: bool=None, def __init__(
default: str=None, control_after_generate: bool=None, self,
upload: UploadType=None, image_folder: FolderType=None, id: str,
remote: RemoteOptions=None, options: list[str] | list[int] | type[Enum] = None,
socketless: bool=None): display_name: str=None,
optional=False,
tooltip: str=None,
lazy: bool=None,
default: str | int | Enum = None,
control_after_generate: bool=None,
upload: UploadType=None,
image_folder: FolderType=None,
remote: RemoteOptions=None,
socketless: bool=None,
):
if isinstance(options, type) and issubclass(options, Enum):
options = [v.value for v in options]
if isinstance(default, Enum):
default = default.value
super().__init__(id, display_name, optional, tooltip, lazy, default, socketless) super().__init__(id, display_name, optional, tooltip, lazy, default, socketless)
self.multiselect = False self.multiselect = False
self.options = options self.options = options

View File

@ -249,8 +249,8 @@ class ByteDanceImageNode(comfy_io.ComfyNode):
inputs=[ inputs=[
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in Text2ImageModelName], options=Text2ImageModelName,
default=Text2ImageModelName.seedream_3.value, default=Text2ImageModelName.seedream_3,
tooltip="Model name", tooltip="Model name",
), ),
comfy_io.String.Input( comfy_io.String.Input(
@ -382,8 +382,8 @@ class ByteDanceImageEditNode(comfy_io.ComfyNode):
inputs=[ inputs=[
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in Image2ImageModelName], options=Image2ImageModelName,
default=Image2ImageModelName.seededit_3.value, default=Image2ImageModelName.seededit_3,
tooltip="Model name", tooltip="Model name",
), ),
comfy_io.Image.Input( comfy_io.Image.Input(
@ -676,8 +676,8 @@ class ByteDanceTextToVideoNode(comfy_io.ComfyNode):
inputs=[ inputs=[
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in Text2VideoModelName], options=Text2VideoModelName,
default=Text2VideoModelName.seedance_1_pro.value, default=Text2VideoModelName.seedance_1_pro,
tooltip="Model name", tooltip="Model name",
), ),
comfy_io.String.Input( comfy_io.String.Input(
@ -793,8 +793,8 @@ class ByteDanceImageToVideoNode(comfy_io.ComfyNode):
inputs=[ inputs=[
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in Image2VideoModelName], options=Image2VideoModelName,
default=Image2VideoModelName.seedance_1_pro.value, default=Image2VideoModelName.seedance_1_pro,
tooltip="Model name", tooltip="Model name",
), ),
comfy_io.String.Input( comfy_io.String.Input(

View File

@ -647,7 +647,7 @@ class KlingCameraControls(comfy_io.ComfyNode):
category="api node/video/Kling", category="api node/video/Kling",
description="Allows specifying configuration options for Kling Camera Controls and motion control effects.", description="Allows specifying configuration options for Kling Camera Controls and motion control effects.",
inputs=[ inputs=[
comfy_io.Combo.Input("camera_control_type", options=[i.value for i in KlingCameraControlType]), comfy_io.Combo.Input("camera_control_type", options=KlingCameraControlType),
comfy_io.Float.Input( comfy_io.Float.Input(
"horizontal_movement", "horizontal_movement",
default=0.0, default=0.0,
@ -772,7 +772,7 @@ class KlingTextToVideoNode(comfy_io.ComfyNode):
comfy_io.Float.Input("cfg_scale", default=1.0, min=0.0, max=1.0), comfy_io.Float.Input("cfg_scale", default=1.0, min=0.0, max=1.0),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[i.value for i in KlingVideoGenAspectRatio], options=KlingVideoGenAspectRatio,
default="16:9", default="16:9",
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
@ -840,7 +840,7 @@ class KlingCameraControlT2VNode(comfy_io.ComfyNode):
comfy_io.Float.Input("cfg_scale", default=0.75, min=0.0, max=1.0), comfy_io.Float.Input("cfg_scale", default=0.75, min=0.0, max=1.0),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[i.value for i in KlingVideoGenAspectRatio], options=KlingVideoGenAspectRatio,
default="16:9", default="16:9",
), ),
comfy_io.Custom("CAMERA_CONTROL").Input( comfy_io.Custom("CAMERA_CONTROL").Input(
@ -903,17 +903,17 @@ class KlingImage2VideoNode(comfy_io.ComfyNode):
comfy_io.String.Input("negative_prompt", multiline=True, tooltip="Negative text prompt"), comfy_io.String.Input("negative_prompt", multiline=True, tooltip="Negative text prompt"),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model_name", "model_name",
options=[i.value for i in KlingVideoGenModelName], options=KlingVideoGenModelName,
default="kling-v2-master", default="kling-v2-master",
), ),
comfy_io.Float.Input("cfg_scale", default=0.8, min=0.0, max=1.0), comfy_io.Float.Input("cfg_scale", default=0.8, min=0.0, max=1.0),
comfy_io.Combo.Input("mode", options=[i.value for i in KlingVideoGenMode], default="std"), comfy_io.Combo.Input("mode", options=KlingVideoGenMode, default=KlingVideoGenMode.std),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[i.value for i in KlingVideoGenAspectRatio], options=KlingVideoGenAspectRatio,
default="16:9", default=KlingVideoGenAspectRatio.field_16_9,
), ),
comfy_io.Combo.Input("duration", options=[i.value for i in KlingVideoGenDuration], default="5"), comfy_io.Combo.Input("duration", options=KlingVideoGenDuration, default=KlingVideoGenDuration.field_5),
], ],
outputs=[ outputs=[
comfy_io.Video.Output(), comfy_io.Video.Output(),
@ -984,8 +984,8 @@ class KlingCameraControlI2VNode(comfy_io.ComfyNode):
comfy_io.Float.Input("cfg_scale", default=0.75, min=0.0, max=1.0), comfy_io.Float.Input("cfg_scale", default=0.75, min=0.0, max=1.0),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[i.value for i in KlingVideoGenAspectRatio], options=KlingVideoGenAspectRatio,
default="16:9", default=KlingVideoGenAspectRatio.field_16_9,
), ),
comfy_io.Custom("CAMERA_CONTROL").Input( comfy_io.Custom("CAMERA_CONTROL").Input(
"camera_control", "camera_control",

View File

@ -181,11 +181,11 @@ class LumaImageGenerationNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in LumaImageModel], options=LumaImageModel,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[ratio.value for ratio in LumaAspectRatio], options=LumaAspectRatio,
default=LumaAspectRatio.ratio_16_9, default=LumaAspectRatio.ratio_16_9,
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
@ -366,7 +366,7 @@ class LumaImageModifyNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in LumaImageModel], options=LumaImageModel,
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
"seed", "seed",
@ -466,21 +466,21 @@ class LumaTextToVideoGenerationNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in LumaVideoModel], options=LumaVideoModel,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[ratio.value for ratio in LumaAspectRatio], options=LumaAspectRatio,
default=LumaAspectRatio.ratio_16_9, default=LumaAspectRatio.ratio_16_9,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"resolution", "resolution",
options=[resolution.value for resolution in LumaVideoOutputResolution], options=LumaVideoOutputResolution,
default=LumaVideoOutputResolution.res_540p, default=LumaVideoOutputResolution.res_540p,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"duration", "duration",
options=[dur.value for dur in LumaVideoModelOutputDuration], options=LumaVideoModelOutputDuration,
), ),
comfy_io.Boolean.Input( comfy_io.Boolean.Input(
"loop", "loop",
@ -595,7 +595,7 @@ class LumaImageToVideoGenerationNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in LumaVideoModel], options=LumaVideoModel,
), ),
# comfy_io.Combo.Input( # comfy_io.Combo.Input(
# "aspect_ratio", # "aspect_ratio",
@ -604,7 +604,7 @@ class LumaImageToVideoGenerationNode(comfy_io.ComfyNode):
# ), # ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"resolution", "resolution",
options=[resolution.value for resolution in LumaVideoOutputResolution], options=LumaVideoOutputResolution,
default=LumaVideoOutputResolution.res_540p, default=LumaVideoOutputResolution.res_540p,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(

View File

@ -335,7 +335,7 @@ def parse_width_height_from_res(resolution: str):
"1:1 (1152 x 1152)": {"width": 1152, "height": 1152}, "1:1 (1152 x 1152)": {"width": 1152, "height": 1152},
"4:3 (1536 x 1152)": {"width": 1536, "height": 1152}, "4:3 (1536 x 1152)": {"width": 1536, "height": 1152},
"3:4 (1152 x 1536)": {"width": 1152, "height": 1536}, "3:4 (1152 x 1536)": {"width": 1152, "height": 1536},
"21:9 (2560 x 1080)": {"width": 2560, "height": 1080}, # "21:9 (2560 x 1080)": {"width": 2560, "height": 1080},
} }
return res_map.get(resolution, {"width": 1920, "height": 1080}) return res_map.get(resolution, {"width": 1920, "height": 1080})
@ -388,11 +388,11 @@ class MoonvalleyImg2VideoNode(comfy_io.ComfyNode):
"negative_prompt", "negative_prompt",
multiline=True, multiline=True,
default="<synthetic> <scene cut> gopro, bright, contrast, static, overexposed, vignette, " default="<synthetic> <scene cut> gopro, bright, contrast, static, overexposed, vignette, "
"artifacts, still, noise, texture, scanlines, videogame, 360 camera, VR, transition, " "artifacts, still, noise, texture, scanlines, videogame, 360 camera, VR, transition, "
"flare, saturation, distorted, warped, wide angle, saturated, vibrant, glowing, " "flare, saturation, distorted, warped, wide angle, saturated, vibrant, glowing, "
"cross dissolve, cheesy, ugly hands, mutated hands, mutant, disfigured, extra fingers, " "cross dissolve, cheesy, ugly hands, mutated hands, mutant, disfigured, extra fingers, "
"blown out, horrible, blurry, worst quality, bad, dissolve, melt, fade in, fade out, " "blown out, horrible, blurry, worst quality, bad, dissolve, melt, fade in, fade out, "
"wobbly, weird, low quality, plastic, stock footage, video camera, boring", "wobbly, weird, low quality, plastic, stock footage, video camera, boring",
tooltip="Negative prompt text", tooltip="Negative prompt text",
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
@ -403,14 +403,14 @@ class MoonvalleyImg2VideoNode(comfy_io.ComfyNode):
"1:1 (1152 x 1152)", "1:1 (1152 x 1152)",
"4:3 (1536 x 1152)", "4:3 (1536 x 1152)",
"3:4 (1152 x 1536)", "3:4 (1152 x 1536)",
"21:9 (2560 x 1080)", # "21:9 (2560 x 1080)",
], ],
default="16:9 (1920 x 1080)", default="16:9 (1920 x 1080)",
tooltip="Resolution of the output video", tooltip="Resolution of the output video",
), ),
comfy_io.Float.Input( comfy_io.Float.Input(
"prompt_adherence", "prompt_adherence",
default=10.0, default=4.5,
min=1.0, min=1.0,
max=20.0, max=20.0,
step=1.0, step=1.0,
@ -424,10 +424,11 @@ class MoonvalleyImg2VideoNode(comfy_io.ComfyNode):
step=1, step=1,
display_mode=comfy_io.NumberDisplay.number, display_mode=comfy_io.NumberDisplay.number,
tooltip="Random seed value", tooltip="Random seed value",
control_after_generate=True,
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
"steps", "steps",
default=100, default=33,
min=1, min=1,
max=100, max=100,
step=1, step=1,
@ -468,7 +469,6 @@ class MoonvalleyImg2VideoNode(comfy_io.ComfyNode):
steps=steps, steps=steps,
seed=seed, seed=seed,
guidance_scale=prompt_adherence, guidance_scale=prompt_adherence,
num_frames=128,
width=width_height["width"], width=width_height["width"],
height=width_height["height"], height=width_height["height"],
use_negative_prompts=True, use_negative_prompts=True,
@ -526,11 +526,11 @@ class MoonvalleyVideo2VideoNode(comfy_io.ComfyNode):
"negative_prompt", "negative_prompt",
multiline=True, multiline=True,
default="<synthetic> <scene cut> gopro, bright, contrast, static, overexposed, vignette, " default="<synthetic> <scene cut> gopro, bright, contrast, static, overexposed, vignette, "
"artifacts, still, noise, texture, scanlines, videogame, 360 camera, VR, transition, " "artifacts, still, noise, texture, scanlines, videogame, 360 camera, VR, transition, "
"flare, saturation, distorted, warped, wide angle, saturated, vibrant, glowing, " "flare, saturation, distorted, warped, wide angle, saturated, vibrant, glowing, "
"cross dissolve, cheesy, ugly hands, mutated hands, mutant, disfigured, extra fingers, " "cross dissolve, cheesy, ugly hands, mutated hands, mutant, disfigured, extra fingers, "
"blown out, horrible, blurry, worst quality, bad, dissolve, melt, fade in, fade out, " "blown out, horrible, blurry, worst quality, bad, dissolve, melt, fade in, fade out, "
"wobbly, weird, low quality, plastic, stock footage, video camera, boring", "wobbly, weird, low quality, plastic, stock footage, video camera, boring",
tooltip="Negative prompt text", tooltip="Negative prompt text",
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
@ -546,7 +546,7 @@ class MoonvalleyVideo2VideoNode(comfy_io.ComfyNode):
comfy_io.Video.Input( comfy_io.Video.Input(
"video", "video",
tooltip="The reference video used to generate the output video. Must be at least 5 seconds long. " tooltip="The reference video used to generate the output video. Must be at least 5 seconds long. "
"Videos longer than 5s will be automatically trimmed. Only MP4 format supported.", "Videos longer than 5s will be automatically trimmed. Only MP4 format supported.",
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"control_type", "control_type",
@ -563,6 +563,15 @@ class MoonvalleyVideo2VideoNode(comfy_io.ComfyNode):
tooltip="Only used if control_type is 'Motion Transfer'", tooltip="Only used if control_type is 'Motion Transfer'",
optional=True, optional=True,
), ),
comfy_io.Int.Input(
"steps",
default=33,
min=1,
max=100,
step=1,
display_mode=comfy_io.NumberDisplay.number,
tooltip="Number of inference steps",
),
], ],
outputs=[comfy_io.Video.Output()], outputs=[comfy_io.Video.Output()],
hidden=[ hidden=[
@ -582,6 +591,8 @@ class MoonvalleyVideo2VideoNode(comfy_io.ComfyNode):
video: Optional[VideoInput] = None, video: Optional[VideoInput] = None,
control_type: str = "Motion Transfer", control_type: str = "Motion Transfer",
motion_intensity: Optional[int] = 100, motion_intensity: Optional[int] = 100,
steps=33,
prompt_adherence=4.5,
) -> comfy_io.NodeOutput: ) -> comfy_io.NodeOutput:
auth = { auth = {
"auth_token": cls.hidden.auth_token_comfy_org, "auth_token": cls.hidden.auth_token_comfy_org,
@ -602,6 +613,8 @@ class MoonvalleyVideo2VideoNode(comfy_io.ComfyNode):
negative_prompt=negative_prompt, negative_prompt=negative_prompt,
seed=seed, seed=seed,
control_params=control_params, control_params=control_params,
steps=steps,
guidance_scale=prompt_adherence,
) )
control = parse_control_parameter(control_type) control = parse_control_parameter(control_type)
@ -653,11 +666,11 @@ class MoonvalleyTxt2VideoNode(comfy_io.ComfyNode):
"negative_prompt", "negative_prompt",
multiline=True, multiline=True,
default="<synthetic> <scene cut> gopro, bright, contrast, static, overexposed, vignette, " default="<synthetic> <scene cut> gopro, bright, contrast, static, overexposed, vignette, "
"artifacts, still, noise, texture, scanlines, videogame, 360 camera, VR, transition, " "artifacts, still, noise, texture, scanlines, videogame, 360 camera, VR, transition, "
"flare, saturation, distorted, warped, wide angle, saturated, vibrant, glowing, " "flare, saturation, distorted, warped, wide angle, saturated, vibrant, glowing, "
"cross dissolve, cheesy, ugly hands, mutated hands, mutant, disfigured, extra fingers, " "cross dissolve, cheesy, ugly hands, mutated hands, mutant, disfigured, extra fingers, "
"blown out, horrible, blurry, worst quality, bad, dissolve, melt, fade in, fade out, " "blown out, horrible, blurry, worst quality, bad, dissolve, melt, fade in, fade out, "
"wobbly, weird, low quality, plastic, stock footage, video camera, boring", "wobbly, weird, low quality, plastic, stock footage, video camera, boring",
tooltip="Negative prompt text", tooltip="Negative prompt text",
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
@ -675,7 +688,7 @@ class MoonvalleyTxt2VideoNode(comfy_io.ComfyNode):
), ),
comfy_io.Float.Input( comfy_io.Float.Input(
"prompt_adherence", "prompt_adherence",
default=10.0, default=4.0,
min=1.0, min=1.0,
max=20.0, max=20.0,
step=1.0, step=1.0,
@ -688,11 +701,12 @@ class MoonvalleyTxt2VideoNode(comfy_io.ComfyNode):
max=4294967295, max=4294967295,
step=1, step=1,
display_mode=comfy_io.NumberDisplay.number, display_mode=comfy_io.NumberDisplay.number,
control_after_generate=True,
tooltip="Random seed value", tooltip="Random seed value",
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
"steps", "steps",
default=100, default=33,
min=1, min=1,
max=100, max=100,
step=1, step=1,

View File

@ -174,10 +174,10 @@ def get_base_inputs_types() -> list[comfy_io.Input]:
comfy_io.String.Input("negative_prompt", multiline=True), comfy_io.String.Input("negative_prompt", multiline=True),
comfy_io.Int.Input("seed", min=0, max=0xFFFFFFFF, control_after_generate=True), comfy_io.Int.Input("seed", min=0, max=0xFFFFFFFF, control_after_generate=True),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"resolution", options=[resolution.value for resolution in PikaResolutionEnum], default="1080p" "resolution", options=PikaResolutionEnum, default=PikaResolutionEnum.field_1080p
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"duration", options=[duration.value for duration in PikaDurationEnum], default=5 "duration", options=PikaDurationEnum, default=PikaDurationEnum.integer_5
), ),
] ]
@ -616,7 +616,7 @@ class PikaffectsNode(comfy_io.ComfyNode):
inputs=[ inputs=[
comfy_io.Image.Input("image", tooltip="The reference image to apply the Pikaffect to."), comfy_io.Image.Input("image", tooltip="The reference image to apply the Pikaffect to."),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"pikaffect", options=[pikaffect.value for pikaffect in Pikaffect], default="Cake-ify" "pikaffect", options=Pikaffect, default="Cake-ify"
), ),
comfy_io.String.Input("prompt_text", multiline=True), comfy_io.String.Input("prompt_text", multiline=True),
comfy_io.String.Input("negative_prompt", multiline=True), comfy_io.String.Input("negative_prompt", multiline=True),

View File

@ -85,7 +85,7 @@ class PixverseTemplateNode(comfy_io.ComfyNode):
display_name="PixVerse Template", display_name="PixVerse Template",
category="api node/video/PixVerse", category="api node/video/PixVerse",
inputs=[ inputs=[
comfy_io.Combo.Input("template", options=[list(pixverse_templates.keys())]), comfy_io.Combo.Input("template", options=list(pixverse_templates.keys())),
], ],
outputs=[comfy_io.Custom(PixverseIO.TEMPLATE).Output(display_name="pixverse_template")], outputs=[comfy_io.Custom(PixverseIO.TEMPLATE).Output(display_name="pixverse_template")],
) )
@ -120,20 +120,20 @@ class PixverseTextToVideoNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[ratio.value for ratio in PixverseAspectRatio], options=PixverseAspectRatio,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"quality", "quality",
options=[resolution.value for resolution in PixverseQuality], options=PixverseQuality,
default=PixverseQuality.res_540p, default=PixverseQuality.res_540p,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"duration_seconds", "duration_seconds",
options=[dur.value for dur in PixverseDuration], options=PixverseDuration,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"motion_mode", "motion_mode",
options=[mode.value for mode in PixverseMotionMode], options=PixverseMotionMode,
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
"seed", "seed",
@ -262,16 +262,16 @@ class PixverseImageToVideoNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"quality", "quality",
options=[resolution.value for resolution in PixverseQuality], options=PixverseQuality,
default=PixverseQuality.res_540p, default=PixverseQuality.res_540p,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"duration_seconds", "duration_seconds",
options=[dur.value for dur in PixverseDuration], options=PixverseDuration,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"motion_mode", "motion_mode",
options=[mode.value for mode in PixverseMotionMode], options=PixverseMotionMode,
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
"seed", "seed",
@ -403,16 +403,16 @@ class PixverseTransitionVideoNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"quality", "quality",
options=[resolution.value for resolution in PixverseQuality], options=PixverseQuality,
default=PixverseQuality.res_540p, default=PixverseQuality.res_540p,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"duration_seconds", "duration_seconds",
options=[dur.value for dur in PixverseDuration], options=PixverseDuration,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"motion_mode", "motion_mode",
options=[mode.value for mode in PixverseMotionMode], options=PixverseMotionMode,
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
"seed", "seed",

View File

@ -200,11 +200,11 @@ class RunwayImageToVideoNodeGen3a(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"duration", "duration",
options=[model.value for model in Duration], options=Duration,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"ratio", "ratio",
options=[model.value for model in RunwayGen3aAspectRatio], options=RunwayGen3aAspectRatio,
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
"seed", "seed",
@ -300,11 +300,11 @@ class RunwayImageToVideoNodeGen4(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"duration", "duration",
options=[model.value for model in Duration], options=Duration,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"ratio", "ratio",
options=[model.value for model in RunwayGen4TurboAspectRatio], options=RunwayGen4TurboAspectRatio,
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
"seed", "seed",
@ -408,11 +408,11 @@ class RunwayFirstLastFrameNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"duration", "duration",
options=[model.value for model in Duration], options=Duration,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"ratio", "ratio",
options=[model.value for model in RunwayGen3aAspectRatio], options=RunwayGen3aAspectRatio,
), ),
comfy_io.Int.Input( comfy_io.Int.Input(
"seed", "seed",

View File

@ -82,8 +82,8 @@ class StabilityStableImageUltraNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[x.value for x in StabilityAspectRatio], options=StabilityAspectRatio,
default=StabilityAspectRatio.ratio_1_1.value, default=StabilityAspectRatio.ratio_1_1,
tooltip="Aspect ratio of generated image.", tooltip="Aspect ratio of generated image.",
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
@ -217,12 +217,12 @@ class StabilityStableImageSD_3_5Node(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[x.value for x in Stability_SD3_5_Model], options=Stability_SD3_5_Model,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[x.value for x in StabilityAspectRatio], options=StabilityAspectRatio,
default=StabilityAspectRatio.ratio_1_1.value, default=StabilityAspectRatio.ratio_1_1,
tooltip="Aspect ratio of generated image.", tooltip="Aspect ratio of generated image.",
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(

View File

@ -173,8 +173,8 @@ class ViduTextToVideoNode(comfy_io.ComfyNode):
inputs=[ inputs=[
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in VideoModelName], options=VideoModelName,
default=VideoModelName.vidu_q1.value, default=VideoModelName.vidu_q1,
tooltip="Model name", tooltip="Model name",
), ),
comfy_io.String.Input( comfy_io.String.Input(
@ -205,22 +205,22 @@ class ViduTextToVideoNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[model.value for model in AspectRatio], options=AspectRatio,
default=AspectRatio.r_16_9.value, default=AspectRatio.r_16_9,
tooltip="The aspect ratio of the output video", tooltip="The aspect ratio of the output video",
optional=True, optional=True,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"resolution", "resolution",
options=[model.value for model in Resolution], options=Resolution,
default=Resolution.r_1080p.value, default=Resolution.r_1080p,
tooltip="Supported values may vary by model & duration", tooltip="Supported values may vary by model & duration",
optional=True, optional=True,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"movement_amplitude", "movement_amplitude",
options=[model.value for model in MovementAmplitude], options=MovementAmplitude,
default=MovementAmplitude.auto.value, default=MovementAmplitude.auto,
tooltip="The movement amplitude of objects in the frame", tooltip="The movement amplitude of objects in the frame",
optional=True, optional=True,
), ),
@ -278,8 +278,8 @@ class ViduImageToVideoNode(comfy_io.ComfyNode):
inputs=[ inputs=[
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in VideoModelName], options=VideoModelName,
default=VideoModelName.vidu_q1.value, default=VideoModelName.vidu_q1,
tooltip="Model name", tooltip="Model name",
), ),
comfy_io.Image.Input( comfy_io.Image.Input(
@ -316,14 +316,14 @@ class ViduImageToVideoNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"resolution", "resolution",
options=[model.value for model in Resolution], options=Resolution,
default=Resolution.r_1080p.value, default=Resolution.r_1080p,
tooltip="Supported values may vary by model & duration", tooltip="Supported values may vary by model & duration",
optional=True, optional=True,
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"movement_amplitude", "movement_amplitude",
options=[model.value for model in MovementAmplitude], options=MovementAmplitude,
default=MovementAmplitude.auto.value, default=MovementAmplitude.auto.value,
tooltip="The movement amplitude of objects in the frame", tooltip="The movement amplitude of objects in the frame",
optional=True, optional=True,
@ -388,8 +388,8 @@ class ViduReferenceVideoNode(comfy_io.ComfyNode):
inputs=[ inputs=[
comfy_io.Combo.Input( comfy_io.Combo.Input(
"model", "model",
options=[model.value for model in VideoModelName], options=VideoModelName,
default=VideoModelName.vidu_q1.value, default=VideoModelName.vidu_q1,
tooltip="Model name", tooltip="Model name",
), ),
comfy_io.Image.Input( comfy_io.Image.Input(
@ -424,8 +424,8 @@ class ViduReferenceVideoNode(comfy_io.ComfyNode):
), ),
comfy_io.Combo.Input( comfy_io.Combo.Input(
"aspect_ratio", "aspect_ratio",
options=[model.value for model in AspectRatio], options=AspectRatio,
default=AspectRatio.r_16_9.value, default=AspectRatio.r_16_9,
tooltip="The aspect ratio of the output video", tooltip="The aspect ratio of the output video",
optional=True, optional=True,
), ),

View File

@ -1,3 +1,3 @@
# This file is automatically generated by the build process when version is # This file is automatically generated by the build process when version is
# updated in pyproject.toml. # updated in pyproject.toml.
__version__ = "0.3.63" __version__ = "0.3.64"

View File

@ -1,6 +1,6 @@
[project] [project]
name = "ComfyUI" name = "ComfyUI"
version = "0.3.63" version = "0.3.64"
readme = "README.md" readme = "README.md"
license = { file = "LICENSE" } license = { file = "LICENSE" }
requires-python = ">=3.9" requires-python = ">=3.9"

View File

@ -1,5 +1,5 @@
comfyui-frontend-package==1.27.10 comfyui-frontend-package==1.27.10
comfyui-workflow-templates==0.1.93 comfyui-workflow-templates==0.1.94
comfyui-embedded-docs==0.2.6 comfyui-embedded-docs==0.2.6
comfyui_manager==4.0.2 comfyui_manager==4.0.2
torch torch