This commit is contained in:
Alexis Rolland 2026-05-14 11:03:32 +08:00 committed by GitHub
commit d5ec17b0bb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
23 changed files with 108 additions and 91 deletions

View File

@ -45,7 +45,7 @@ class SamplerLCMUpscale(io.ComfyNode):
def define_schema(cls) -> io.Schema: def define_schema(cls) -> io.Schema:
return io.Schema( return io.Schema(
node_id="SamplerLCMUpscale", node_id="SamplerLCMUpscale",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Float.Input("scale_ratio", default=1.0, min=0.1, max=20.0, step=0.01, advanced=True), io.Float.Input("scale_ratio", default=1.0, min=0.1, max=20.0, step=0.01, advanced=True),
io.Int.Input("scale_steps", default=-1, min=-1, max=1000, step=1, advanced=True), io.Int.Input("scale_steps", default=-1, min=-1, max=1000, step=1, advanced=True),
@ -123,7 +123,7 @@ class SamplerEulerCFGpp(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="SamplerEulerCFGpp", node_id="SamplerEulerCFGpp",
display_name="SamplerEulerCFG++", display_name="SamplerEulerCFG++",
category="experimental", # "sampling/custom_sampling/samplers" category="experimental", # "sampling/samplers"
inputs=[ inputs=[
io.Combo.Input("version", options=["regular", "alternative"], advanced=True), io.Combo.Input("version", options=["regular", "alternative"], advanced=True),
], ],

View File

@ -29,7 +29,7 @@ class AlignYourStepsScheduler(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="AlignYourStepsScheduler", node_id="AlignYourStepsScheduler",
search_aliases=["AYS scheduler"], search_aliases=["AYS scheduler"],
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Combo.Input("model_type", options=["SD1", "SDXL", "SVD"]), io.Combo.Input("model_type", options=["SD1", "SDXL", "SVD"]),
io.Int.Input("steps", default=10, min=1, max=10000), io.Int.Input("steps", default=10, min=1, max=10000),

View File

@ -53,7 +53,7 @@ class SamplerARVideo(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="SamplerARVideo", node_id="SamplerARVideo",
display_name="Sampler AR Video", display_name="Sampler AR Video",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Int.Input( io.Int.Input(
"num_frame_per_block", "num_frame_per_block",

View File

@ -34,6 +34,7 @@ class RemoveBackground(IO.ComfyNode):
node_id="RemoveBackground", node_id="RemoveBackground",
display_name="Remove Background", display_name="Remove Background",
category="image/background removal", category="image/background removal",
description="Generates a foreground mask to remove the background from an image using a background removal model.",
inputs=[ inputs=[
IO.Image.Input("image", tooltip="Input image to remove the background from"), IO.Image.Input("image", tooltip="Input image to remove the background from"),
IO.BackgroundRemoval.Input("bg_removal_model", tooltip="Background removal model used to generate the mask") IO.BackgroundRemoval.Input("bg_removal_model", tooltip="Background removal model used to generate the mask")

View File

@ -11,9 +11,9 @@ class Canny(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="Canny", node_id="Canny",
display_name="Canny", display_name="Detect Edges (Canny)",
search_aliases=["edge detection", "outline", "contour detection", "line art"], search_aliases=["edge detection", "outline", "contour detection", "line art"],
category="image/preprocessors", category="image/filters",
essentials_category="Image Tools", essentials_category="Image Tools",
inputs=[ inputs=[
io.Image.Input("image"), io.Image.Input("image"),

View File

@ -111,7 +111,7 @@ class PorterDuffImageComposite(io.ComfyNode):
node_id="PorterDuffImageComposite", node_id="PorterDuffImageComposite",
search_aliases=["alpha composite", "blend modes", "layer blend", "transparency blend"], search_aliases=["alpha composite", "blend modes", "layer blend", "transparency blend"],
display_name="Porter-Duff Image Composite", display_name="Porter-Duff Image Composite",
category="mask/compositing", category="image/compositing",
inputs=[ inputs=[
io.Image.Input("source"), io.Image.Input("source"),
io.Mask.Input("source_alpha"), io.Mask.Input("source_alpha"),
@ -168,7 +168,7 @@ class SplitImageWithAlpha(io.ComfyNode):
node_id="SplitImageWithAlpha", node_id="SplitImageWithAlpha",
search_aliases=["extract alpha", "separate transparency", "remove alpha"], search_aliases=["extract alpha", "separate transparency", "remove alpha"],
display_name="Split Image with Alpha", display_name="Split Image with Alpha",
category="mask/compositing", category="image/compositing",
inputs=[ inputs=[
io.Image.Input("image"), io.Image.Input("image"),
], ],
@ -192,7 +192,7 @@ class JoinImageWithAlpha(io.ComfyNode):
node_id="JoinImageWithAlpha", node_id="JoinImageWithAlpha",
search_aliases=["add transparency", "apply alpha", "composite alpha", "RGBA"], search_aliases=["add transparency", "apply alpha", "composite alpha", "RGBA"],
display_name="Join Image with Alpha", display_name="Join Image with Alpha",
category="mask/compositing", category="image/compositing",
inputs=[ inputs=[
io.Image.Input("image"), io.Image.Input("image"),
io.Mask.Input("alpha"), io.Mask.Input("alpha"),

View File

@ -17,7 +17,7 @@ class BasicScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="BasicScheduler", node_id="BasicScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Model.Input("model"), io.Model.Input("model"),
io.Combo.Input("scheduler", options=comfy.samplers.SCHEDULER_NAMES), io.Combo.Input("scheduler", options=comfy.samplers.SCHEDULER_NAMES),
@ -47,7 +47,7 @@ class KarrasScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="KarrasScheduler", node_id="KarrasScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Int.Input("steps", default=20, min=1, max=10000), io.Int.Input("steps", default=20, min=1, max=10000),
io.Float.Input("sigma_max", default=14.614642, min=0.0, max=5000.0, step=0.01, round=False, advanced=True), io.Float.Input("sigma_max", default=14.614642, min=0.0, max=5000.0, step=0.01, round=False, advanced=True),
@ -69,7 +69,7 @@ class ExponentialScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="ExponentialScheduler", node_id="ExponentialScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Int.Input("steps", default=20, min=1, max=10000), io.Int.Input("steps", default=20, min=1, max=10000),
io.Float.Input("sigma_max", default=14.614642, min=0.0, max=5000.0, step=0.01, round=False, advanced=True), io.Float.Input("sigma_max", default=14.614642, min=0.0, max=5000.0, step=0.01, round=False, advanced=True),
@ -90,7 +90,7 @@ class PolyexponentialScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="PolyexponentialScheduler", node_id="PolyexponentialScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Int.Input("steps", default=20, min=1, max=10000), io.Int.Input("steps", default=20, min=1, max=10000),
io.Float.Input("sigma_max", default=14.614642, min=0.0, max=5000.0, step=0.01, round=False, advanced=True), io.Float.Input("sigma_max", default=14.614642, min=0.0, max=5000.0, step=0.01, round=False, advanced=True),
@ -112,7 +112,7 @@ class LaplaceScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="LaplaceScheduler", node_id="LaplaceScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Int.Input("steps", default=20, min=1, max=10000), io.Int.Input("steps", default=20, min=1, max=10000),
io.Float.Input("sigma_max", default=14.614642, min=0.0, max=5000.0, step=0.01, round=False, advanced=True), io.Float.Input("sigma_max", default=14.614642, min=0.0, max=5000.0, step=0.01, round=False, advanced=True),
@ -136,7 +136,7 @@ class SDTurboScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SDTurboScheduler", node_id="SDTurboScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Model.Input("model"), io.Model.Input("model"),
io.Int.Input("steps", default=1, min=1, max=10), io.Int.Input("steps", default=1, min=1, max=10),
@ -160,7 +160,7 @@ class BetaSamplingScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="BetaSamplingScheduler", node_id="BetaSamplingScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Model.Input("model"), io.Model.Input("model"),
io.Int.Input("steps", default=20, min=1, max=10000), io.Int.Input("steps", default=20, min=1, max=10000),
@ -182,7 +182,7 @@ class VPScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="VPScheduler", node_id="VPScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Int.Input("steps", default=20, min=1, max=10000), io.Int.Input("steps", default=20, min=1, max=10000),
io.Float.Input("beta_d", default=19.9, min=0.0, max=5000.0, step=0.01, round=False, advanced=True), #TODO: fix default values io.Float.Input("beta_d", default=19.9, min=0.0, max=5000.0, step=0.01, round=False, advanced=True), #TODO: fix default values
@ -204,7 +204,7 @@ class SplitSigmas(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SplitSigmas", node_id="SplitSigmas",
category="sampling/custom_sampling/sigmas", category="sampling/sigmas",
inputs=[ inputs=[
io.Sigmas.Input("sigmas"), io.Sigmas.Input("sigmas"),
io.Int.Input("step", default=0, min=0, max=10000), io.Int.Input("step", default=0, min=0, max=10000),
@ -228,7 +228,7 @@ class SplitSigmasDenoise(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SplitSigmasDenoise", node_id="SplitSigmasDenoise",
category="sampling/custom_sampling/sigmas", category="sampling/sigmas",
inputs=[ inputs=[
io.Sigmas.Input("sigmas"), io.Sigmas.Input("sigmas"),
io.Float.Input("denoise", default=1.0, min=0.0, max=1.0, step=0.01), io.Float.Input("denoise", default=1.0, min=0.0, max=1.0, step=0.01),
@ -254,7 +254,7 @@ class FlipSigmas(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="FlipSigmas", node_id="FlipSigmas",
category="sampling/custom_sampling/sigmas", category="sampling/sigmas",
inputs=[io.Sigmas.Input("sigmas")], inputs=[io.Sigmas.Input("sigmas")],
outputs=[io.Sigmas.Output()] outputs=[io.Sigmas.Output()]
) )
@ -276,7 +276,7 @@ class SetFirstSigma(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SetFirstSigma", node_id="SetFirstSigma",
category="sampling/custom_sampling/sigmas", category="sampling/sigmas",
inputs=[ inputs=[
io.Sigmas.Input("sigmas"), io.Sigmas.Input("sigmas"),
io.Float.Input("sigma", default=136.0, min=0.0, max=20000.0, step=0.001, round=False), io.Float.Input("sigma", default=136.0, min=0.0, max=20000.0, step=0.001, round=False),
@ -298,7 +298,7 @@ class ExtendIntermediateSigmas(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="ExtendIntermediateSigmas", node_id="ExtendIntermediateSigmas",
search_aliases=["interpolate sigmas"], search_aliases=["interpolate sigmas"],
category="sampling/custom_sampling/sigmas", category="sampling/sigmas",
inputs=[ inputs=[
io.Sigmas.Input("sigmas"), io.Sigmas.Input("sigmas"),
io.Int.Input("steps", default=2, min=1, max=100), io.Int.Input("steps", default=2, min=1, max=100),
@ -351,7 +351,7 @@ class SamplingPercentToSigma(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SamplingPercentToSigma", node_id="SamplingPercentToSigma",
category="sampling/custom_sampling/sigmas", category="sampling/sigmas",
inputs=[ inputs=[
io.Model.Input("model"), io.Model.Input("model"),
io.Float.Input("sampling_percent", default=0.0, min=0.0, max=1.0, step=0.0001), io.Float.Input("sampling_percent", default=0.0, min=0.0, max=1.0, step=0.0001),
@ -379,7 +379,7 @@ class KSamplerSelect(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="KSamplerSelect", node_id="KSamplerSelect",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[io.Combo.Input("sampler_name", options=comfy.samplers.SAMPLER_NAMES)], inputs=[io.Combo.Input("sampler_name", options=comfy.samplers.SAMPLER_NAMES)],
outputs=[io.Sampler.Output()] outputs=[io.Sampler.Output()]
) )
@ -396,7 +396,7 @@ class SamplerDPMPP_3M_SDE(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SamplerDPMPP_3M_SDE", node_id="SamplerDPMPP_3M_SDE",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True), io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True),
io.Float.Input("s_noise", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True), io.Float.Input("s_noise", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True),
@ -421,7 +421,7 @@ class SamplerDPMPP_2M_SDE(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SamplerDPMPP_2M_SDE", node_id="SamplerDPMPP_2M_SDE",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Combo.Input("solver_type", options=['midpoint', 'heun']), io.Combo.Input("solver_type", options=['midpoint', 'heun']),
io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True), io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True),
@ -448,7 +448,7 @@ class SamplerDPMPP_SDE(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SamplerDPMPP_SDE", node_id="SamplerDPMPP_SDE",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True), io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True),
io.Float.Input("s_noise", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True), io.Float.Input("s_noise", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True),
@ -474,7 +474,7 @@ class SamplerDPMPP_2S_Ancestral(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SamplerDPMPP_2S_Ancestral", node_id="SamplerDPMPP_2S_Ancestral",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False), io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False),
io.Float.Input("s_noise", default=1.0, min=0.0, max=100.0, step=0.01, round=False), io.Float.Input("s_noise", default=1.0, min=0.0, max=100.0, step=0.01, round=False),
@ -494,7 +494,7 @@ class SamplerEulerAncestral(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SamplerEulerAncestral", node_id="SamplerEulerAncestral",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True), io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True),
io.Float.Input("s_noise", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True), io.Float.Input("s_noise", default=1.0, min=0.0, max=100.0, step=0.01, round=False, advanced=True),
@ -515,7 +515,7 @@ class SamplerEulerAncestralCFGPP(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="SamplerEulerAncestralCFGPP", node_id="SamplerEulerAncestralCFGPP",
display_name="SamplerEulerAncestralCFG++", display_name="SamplerEulerAncestralCFG++",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Float.Input("eta", default=1.0, min=0.0, max=1.0, step=0.01, round=False), io.Float.Input("eta", default=1.0, min=0.0, max=1.0, step=0.01, round=False),
io.Float.Input("s_noise", default=1.0, min=0.0, max=10.0, step=0.01, round=False), io.Float.Input("s_noise", default=1.0, min=0.0, max=10.0, step=0.01, round=False),
@ -537,7 +537,7 @@ class SamplerLMS(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SamplerLMS", node_id="SamplerLMS",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[io.Int.Input("order", default=4, min=1, max=100, advanced=True)], inputs=[io.Int.Input("order", default=4, min=1, max=100, advanced=True)],
outputs=[io.Sampler.Output()] outputs=[io.Sampler.Output()]
) )
@ -554,7 +554,7 @@ class SamplerDPMAdaptative(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SamplerDPMAdaptative", node_id="SamplerDPMAdaptative",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Int.Input("order", default=3, min=2, max=3, advanced=True), io.Int.Input("order", default=3, min=2, max=3, advanced=True),
io.Float.Input("rtol", default=0.05, min=0.0, max=100.0, step=0.01, round=False, advanced=True), io.Float.Input("rtol", default=0.05, min=0.0, max=100.0, step=0.01, round=False, advanced=True),
@ -585,7 +585,7 @@ class SamplerER_SDE(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SamplerER_SDE", node_id="SamplerER_SDE",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Combo.Input("solver_type", options=["ER-SDE", "Reverse-time SDE", "ODE"]), io.Combo.Input("solver_type", options=["ER-SDE", "Reverse-time SDE", "ODE"]),
io.Int.Input("max_stage", default=3, min=1, max=3, advanced=True), io.Int.Input("max_stage", default=3, min=1, max=3, advanced=True),
@ -623,7 +623,7 @@ class SamplerSASolver(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="SamplerSASolver", node_id="SamplerSASolver",
search_aliases=["sde"], search_aliases=["sde"],
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Model.Input("model"), io.Model.Input("model"),
io.Float.Input("eta", default=1.0, min=0.0, max=10.0, step=0.01, round=False, advanced=True), io.Float.Input("eta", default=1.0, min=0.0, max=10.0, step=0.01, round=False, advanced=True),
@ -668,7 +668,7 @@ class SamplerSEEDS2(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="SamplerSEEDS2", node_id="SamplerSEEDS2",
search_aliases=["sde", "exp heun"], search_aliases=["sde", "exp heun"],
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[ inputs=[
io.Combo.Input("solver_type", options=["phi_1", "phi_2"]), io.Combo.Input("solver_type", options=["phi_1", "phi_2"]),
io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, tooltip="Stochastic strength", advanced=True), io.Float.Input("eta", default=1.0, min=0.0, max=100.0, step=0.01, round=False, tooltip="Stochastic strength", advanced=True),
@ -793,7 +793,8 @@ class BasicGuider(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="BasicGuider", node_id="BasicGuider",
category="sampling/custom_sampling/guiders", display_name="Basic Guider",
category="sampling/guiders",
inputs=[ inputs=[
io.Model.Input("model"), io.Model.Input("model"),
io.Conditioning.Input("conditioning"), io.Conditioning.Input("conditioning"),
@ -814,7 +815,8 @@ class CFGGuider(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="CFGGuider", node_id="CFGGuider",
category="sampling/custom_sampling/guiders", display_name="CFG Guider",
category="sampling/guiders",
inputs=[ inputs=[
io.Model.Input("model"), io.Model.Input("model"),
io.Conditioning.Input("positive"), io.Conditioning.Input("positive"),
@ -868,7 +870,8 @@ class DualCFGGuider(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="DualCFGGuider", node_id="DualCFGGuider",
search_aliases=["dual prompt guidance"], search_aliases=["dual prompt guidance"],
category="sampling/custom_sampling/guiders", display_name="Dual CFG Guider",
category="sampling/guiders",
inputs=[ inputs=[
io.Model.Input("model"), io.Model.Input("model"),
io.Conditioning.Input("cond1"), io.Conditioning.Input("cond1"),
@ -896,7 +899,7 @@ class DisableNoise(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="DisableNoise", node_id="DisableNoise",
search_aliases=["zero noise"], search_aliases=["zero noise"],
category="sampling/custom_sampling/noise", category="sampling/noise",
inputs=[], inputs=[],
outputs=[io.Noise.Output()] outputs=[io.Noise.Output()]
) )
@ -913,7 +916,7 @@ class RandomNoise(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="RandomNoise", node_id="RandomNoise",
category="sampling/custom_sampling/noise", category="sampling/noise",
inputs=[io.Int.Input("noise_seed", default=0, min=0, max=0xffffffffffffffff, control_after_generate=True)], inputs=[io.Int.Input("noise_seed", default=0, min=0, max=0xffffffffffffffff, control_after_generate=True)],
outputs=[io.Noise.Output()] outputs=[io.Noise.Output()]
) )

View File

@ -215,7 +215,7 @@ class Flux2Scheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="Flux2Scheduler", node_id="Flux2Scheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Int.Input("steps", default=20, min=1, max=4096), io.Int.Input("steps", default=20, min=1, max=4096),
io.Int.Input("width", default=1024, min=16, max=nodes.MAX_RESOLUTION, step=1), io.Int.Input("width", default=1024, min=16, max=nodes.MAX_RESOLUTION, step=1),
@ -263,7 +263,7 @@ class FluxKVCache(io.ComfyNode):
node_id="FluxKVCache", node_id="FluxKVCache",
display_name="Flux KV Cache", display_name="Flux KV Cache",
description="Enables KV Cache optimization for reference images on Flux family models.", description="Enables KV Cache optimization for reference images on Flux family models.",
category="", category="experimental",
is_experimental=True, is_experimental=True,
inputs=[ inputs=[
io.Model.Input("model", tooltip="The model to use KV Cache on."), io.Model.Input("model", tooltip="The model to use KV Cache on."),

View File

@ -340,7 +340,7 @@ class GITSScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="GITSScheduler", node_id="GITSScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Float.Input("coeff", default=1.20, min=0.80, max=1.50, step=0.05, advanced=True), io.Float.Input("coeff", default=1.20, min=0.80, max=1.50, step=0.05, advanced=True),
io.Int.Input("steps", default=10, min=2, max=1000), io.Int.Input("steps", default=10, min=2, max=1000),

View File

@ -160,7 +160,7 @@ class ImageAddNoise(IO.ComfyNode):
node_id="ImageAddNoise", node_id="ImageAddNoise",
search_aliases=["film grain"], search_aliases=["film grain"],
display_name="Add Noise to Image", display_name="Add Noise to Image",
category="image/postprocessing", category="image/filters",
inputs=[ inputs=[
IO.Image.Input("image"), IO.Image.Input("image"),
IO.Int.Input( IO.Int.Input(
@ -192,7 +192,8 @@ class SaveAnimatedWEBP(IO.ComfyNode):
def define_schema(cls): def define_schema(cls):
return IO.Schema( return IO.Schema(
node_id="SaveAnimatedWEBP", node_id="SaveAnimatedWEBP",
category="image/animation", display_name="Save Animated WEBP",
category="image",
inputs=[ inputs=[
IO.Image.Input("images"), IO.Image.Input("images"),
IO.String.Input("filename_prefix", default="ComfyUI"), IO.String.Input("filename_prefix", default="ComfyUI"),
@ -229,7 +230,8 @@ class SaveAnimatedPNG(IO.ComfyNode):
def define_schema(cls): def define_schema(cls):
return IO.Schema( return IO.Schema(
node_id="SaveAnimatedPNG", node_id="SaveAnimatedPNG",
category="image/animation", display_name="Save Animated PNG",
category="image",
inputs=[ inputs=[
IO.Image.Input("images"), IO.Image.Input("images"),
IO.String.Input("filename_prefix", default="ComfyUI"), IO.String.Input("filename_prefix", default="ComfyUI"),
@ -491,7 +493,7 @@ class SaveSVGNode(IO.ComfyNode):
search_aliases=["export vector", "save vector graphics"], search_aliases=["export vector", "save vector graphics"],
display_name="Save SVG", display_name="Save SVG",
description="Save SVG files on disk.", description="Save SVG files on disk.",
category="image/save", category="image",
inputs=[ inputs=[
IO.SVG.Input("svg"), IO.SVG.Input("svg"),
IO.String.Input( IO.String.Input(

View File

@ -502,7 +502,7 @@ class LTXVScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="LTXVScheduler", node_id="LTXVScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Int.Input("steps", default=20, min=1, max=10000), io.Int.Input("steps", default=20, min=1, max=10000),
io.Float.Input("max_shift", default=2.05, min=0.0, max=100.0, step=0.01), io.Float.Input("max_shift", default=2.05, min=0.0, max=100.0, step=0.01),

View File

@ -83,7 +83,7 @@ class ImageCompositeMasked(IO.ComfyNode):
node_id="ImageCompositeMasked", node_id="ImageCompositeMasked",
search_aliases=["overlay", "layer", "paste image", "images composition"], search_aliases=["overlay", "layer", "paste image", "images composition"],
display_name="Image Composite Masked", display_name="Image Composite Masked",
category="image", category="image/compositing",
inputs=[ inputs=[
IO.Image.Input("destination"), IO.Image.Input("destination"),
IO.Image.Input("source"), IO.Image.Input("source"),
@ -112,7 +112,7 @@ class MaskToImage(IO.ComfyNode):
node_id="MaskToImage", node_id="MaskToImage",
search_aliases=["convert mask"], search_aliases=["convert mask"],
display_name="Convert Mask to Image", display_name="Convert Mask to Image",
category="mask", category="image/mask",
inputs=[ inputs=[
IO.Mask.Input("mask"), IO.Mask.Input("mask"),
], ],
@ -134,7 +134,7 @@ class ImageToMask(IO.ComfyNode):
node_id="ImageToMask", node_id="ImageToMask",
search_aliases=["extract channel", "channel to mask"], search_aliases=["extract channel", "channel to mask"],
display_name="Convert Image to Mask", display_name="Convert Image to Mask",
category="mask", category="image/mask",
inputs=[ inputs=[
IO.Image.Input("image"), IO.Image.Input("image"),
IO.Combo.Input("channel", options=["red", "green", "blue", "alpha"]), IO.Combo.Input("channel", options=["red", "green", "blue", "alpha"]),
@ -157,7 +157,8 @@ class ImageColorToMask(IO.ComfyNode):
return IO.Schema( return IO.Schema(
node_id="ImageColorToMask", node_id="ImageColorToMask",
search_aliases=["color keying", "chroma key"], search_aliases=["color keying", "chroma key"],
category="mask", display_name="Convert Image Color to Mask",
category="image/mask",
inputs=[ inputs=[
IO.Image.Input("image"), IO.Image.Input("image"),
IO.Int.Input("color", default=0, min=0, max=0xFFFFFF, step=1, display_mode=IO.NumberDisplay.number), IO.Int.Input("color", default=0, min=0, max=0xFFFFFF, step=1, display_mode=IO.NumberDisplay.number),
@ -180,7 +181,8 @@ class SolidMask(IO.ComfyNode):
def define_schema(cls): def define_schema(cls):
return IO.Schema( return IO.Schema(
node_id="SolidMask", node_id="SolidMask",
category="mask", display_name="Create Solid Mask",
category="image/mask",
inputs=[ inputs=[
IO.Float.Input("value", default=1.0, min=0.0, max=1.0, step=0.01), IO.Float.Input("value", default=1.0, min=0.0, max=1.0, step=0.01),
IO.Int.Input("width", default=512, min=1, max=nodes.MAX_RESOLUTION, step=1), IO.Int.Input("width", default=512, min=1, max=nodes.MAX_RESOLUTION, step=1),
@ -204,7 +206,7 @@ class InvertMask(IO.ComfyNode):
node_id="InvertMask", node_id="InvertMask",
search_aliases=["reverse mask", "flip mask"], search_aliases=["reverse mask", "flip mask"],
display_name="Invert Mask", display_name="Invert Mask",
category="mask", category="image/mask",
inputs=[ inputs=[
IO.Mask.Input("mask"), IO.Mask.Input("mask"),
], ],
@ -226,7 +228,7 @@ class CropMask(IO.ComfyNode):
node_id="CropMask", node_id="CropMask",
search_aliases=["cut mask", "extract mask region", "mask slice"], search_aliases=["cut mask", "extract mask region", "mask slice"],
display_name="Crop Mask", display_name="Crop Mask",
category="mask", category="image/mask",
inputs=[ inputs=[
IO.Mask.Input("mask"), IO.Mask.Input("mask"),
IO.Int.Input("x", default=0, min=0, max=nodes.MAX_RESOLUTION, step=1), IO.Int.Input("x", default=0, min=0, max=nodes.MAX_RESOLUTION, step=1),
@ -253,7 +255,7 @@ class MaskComposite(IO.ComfyNode):
node_id="MaskComposite", node_id="MaskComposite",
search_aliases=["combine masks", "blend masks", "layer masks", "masks composition"], search_aliases=["combine masks", "blend masks", "layer masks", "masks composition"],
display_name="Combine Masks", display_name="Combine Masks",
category="mask", category="image/mask",
inputs=[ inputs=[
IO.Mask.Input("destination"), IO.Mask.Input("destination"),
IO.Mask.Input("source"), IO.Mask.Input("source"),
@ -304,7 +306,7 @@ class FeatherMask(IO.ComfyNode):
node_id="FeatherMask", node_id="FeatherMask",
search_aliases=["soft edge mask", "blur mask edges", "gradient mask edge"], search_aliases=["soft edge mask", "blur mask edges", "gradient mask edge"],
display_name="Feather Mask", display_name="Feather Mask",
category="mask", category="image/mask",
inputs=[ inputs=[
IO.Mask.Input("mask"), IO.Mask.Input("mask"),
IO.Int.Input("left", default=0, min=0, max=nodes.MAX_RESOLUTION, step=1), IO.Int.Input("left", default=0, min=0, max=nodes.MAX_RESOLUTION, step=1),
@ -352,7 +354,7 @@ class GrowMask(IO.ComfyNode):
node_id="GrowMask", node_id="GrowMask",
search_aliases=["expand mask", "shrink mask"], search_aliases=["expand mask", "shrink mask"],
display_name="Grow Mask", display_name="Grow Mask",
category="mask", category="image/mask",
inputs=[ inputs=[
IO.Mask.Input("mask"), IO.Mask.Input("mask"),
IO.Int.Input("expand", default=0, min=-nodes.MAX_RESOLUTION, max=nodes.MAX_RESOLUTION, step=1), IO.Int.Input("expand", default=0, min=-nodes.MAX_RESOLUTION, max=nodes.MAX_RESOLUTION, step=1),
@ -388,7 +390,8 @@ class ThresholdMask(IO.ComfyNode):
return IO.Schema( return IO.Schema(
node_id="ThresholdMask", node_id="ThresholdMask",
search_aliases=["binary mask"], search_aliases=["binary mask"],
category="mask", display_name="Threshold Mask",
category="image/mask",
inputs=[ inputs=[
IO.Mask.Input("mask"), IO.Mask.Input("mask"),
IO.Float.Input("value", default=0.5, min=0.0, max=1.0, step=0.01), IO.Float.Input("value", default=0.5, min=0.0, max=1.0, step=0.01),
@ -414,7 +417,7 @@ class MaskPreview(IO.ComfyNode):
node_id="MaskPreview", node_id="MaskPreview",
search_aliases=["show mask", "view mask", "inspect mask", "debug mask"], search_aliases=["show mask", "view mask", "inspect mask", "debug mask"],
display_name="Preview Mask", display_name="Preview Mask",
category="mask", category="image/mask",
description="Saves the input images to your ComfyUI output directory.", description="Saves the input images to your ComfyUI output directory.",
inputs=[ inputs=[
IO.Mask.Input("mask"), IO.Mask.Input("mask"),

View File

@ -13,8 +13,8 @@ class Morphology(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="Morphology", node_id="Morphology",
search_aliases=["erode", "dilate"], search_aliases=["erode", "dilate"],
display_name="ImageMorphology", display_name="Apply Morphology",
category="image/postprocessing", category="image/filters",
inputs=[ inputs=[
io.Image.Input("image"), io.Image.Input("image"),
io.Combo.Input( io.Combo.Input(

View File

@ -13,7 +13,7 @@ class wanBlockSwap(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="wanBlockSwap", node_id="wanBlockSwap",
category="", category="",
description="NOP", description="Intercept wanBlockSwap custom node that causes major instability and make it no-op.",
inputs=[ inputs=[
io.Model.Input("model"), io.Model.Input("model"),
], ],

View File

@ -20,7 +20,7 @@ class NumberConvertNode(io.ComfyNode):
def define_schema(cls) -> io.Schema: def define_schema(cls) -> io.Schema:
return io.Schema( return io.Schema(
node_id="ComfyNumberConvert", node_id="ComfyNumberConvert",
display_name="Number Convert", display_name="Convert Number",
category="utils", category="utils",
search_aliases=[ search_aliases=[
"int to float", "float to int", "number convert", "int to float", "float to int", "number convert",

View File

@ -31,7 +31,7 @@ class OptimalStepsScheduler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="OptimalStepsScheduler", node_id="OptimalStepsScheduler",
category="sampling/custom_sampling/schedulers", category="sampling/schedulers",
inputs=[ inputs=[
io.Combo.Input("model_type", options=["FLUX", "Wan", "Chroma"]), io.Combo.Input("model_type", options=["FLUX", "Wan", "Chroma"]),
io.Int.Input("steps", default=20, min=3, max=1000), io.Int.Input("steps", default=20, min=3, max=1000),

View File

@ -22,7 +22,7 @@ class Blend(io.ComfyNode):
node_id="ImageBlend", node_id="ImageBlend",
search_aliases=["mix images"], search_aliases=["mix images"],
display_name="Blend Images", display_name="Blend Images",
category="image/postprocessing", category="image/filters",
essentials_category="Image Tools", essentials_category="Image Tools",
inputs=[ inputs=[
io.Image.Input("image1"), io.Image.Input("image1"),
@ -80,8 +80,8 @@ class Blur(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="ImageBlur", node_id="ImageBlur",
display_name="Image Blur", display_name="Blur Image",
category="image/postprocessing", category="image/filters",
inputs=[ inputs=[
io.Image.Input("image"), io.Image.Input("image"),
io.Int.Input("blur_radius", default=1, min=1, max=31, step=1), io.Int.Input("blur_radius", default=1, min=1, max=31, step=1),
@ -117,7 +117,7 @@ class Quantize(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="ImageQuantize", node_id="ImageQuantize",
display_name="Quantize Image", display_name="Quantize Image",
category="image/postprocessing", category="image/filters",
inputs=[ inputs=[
io.Image.Input("image"), io.Image.Input("image"),
io.Int.Input("colors", default=256, min=1, max=256, step=1), io.Int.Input("colors", default=256, min=1, max=256, step=1),
@ -183,7 +183,7 @@ class Sharpen(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="ImageSharpen", node_id="ImageSharpen",
display_name="Sharpen Image", display_name="Sharpen Image",
category="image/postprocessing", category="image/filters",
inputs=[ inputs=[
io.Image.Input("image"), io.Image.Input("image"),
io.Int.Input("sharpen_radius", default=1, min=1, max=31, step=1, advanced=True), io.Int.Input("sharpen_radius", default=1, min=1, max=31, step=1, advanced=True),
@ -595,7 +595,7 @@ class BatchMasksNode(io.ComfyNode):
node_id="BatchMasksNode", node_id="BatchMasksNode",
search_aliases=["combine masks", "stack masks", "merge masks"], search_aliases=["combine masks", "stack masks", "merge masks"],
display_name="Batch Masks", display_name="Batch Masks",
category="mask", category="image/mask",
inputs=[ inputs=[
io.Autogrow.Input("masks", template=autogrow_template) io.Autogrow.Input("masks", template=autogrow_template)
], ],
@ -670,8 +670,8 @@ class ColorTransfer(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="ColorTransfer", node_id="ColorTransfer",
display_name="Color Transfer", display_name="Transfer Color",
category="image/postprocessing", category="image/filters",
description="Match the colors of one image to another using various algorithms.", description="Match the colors of one image to another using various algorithms.",
search_aliases=["color match", "color grading", "color correction", "match colors", "color transform", "mkl", "reinhard", "histogram"], search_aliases=["color match", "color grading", "color correction", "match colors", "color transform", "mkl", "reinhard", "histogram"],
inputs=[ inputs=[

View File

@ -15,7 +15,7 @@ class RTDETR_detect(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="RTDETR_detect", node_id="RTDETR_detect",
display_name="RT-DETR Detect", display_name="RT-DETR Detect",
category="detection", category="image/detection",
search_aliases=["bbox", "bounding box", "object detection", "coco"], search_aliases=["bbox", "bounding box", "object detection", "coco"],
inputs=[ inputs=[
io.Model.Input("model", display_name="model"), io.Model.Input("model", display_name="model"),
@ -71,7 +71,7 @@ class DrawBBoxes(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="DrawBBoxes", node_id="DrawBBoxes",
display_name="Draw BBoxes", display_name="Draw BBoxes",
category="detection", category="image/detection",
search_aliases=["bbox", "bounding box", "object detection", "rt_detr", "visualize detections", "coco"], search_aliases=["bbox", "bounding box", "object detection", "rt_detr", "visualize detections", "coco"],
inputs=[ inputs=[
io.Image.Input("image", optional=True), io.Image.Input("image", optional=True),

View File

@ -93,7 +93,7 @@ class SAM3_Detect(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="SAM3_Detect", node_id="SAM3_Detect",
display_name="SAM3 Detect", display_name="SAM3 Detect",
category="detection", category="image/detection",
search_aliases=["sam3", "segment anything", "open vocabulary", "text detection", "segment"], search_aliases=["sam3", "segment anything", "open vocabulary", "text detection", "segment"],
inputs=[ inputs=[
io.Model.Input("model", display_name="model"), io.Model.Input("model", display_name="model"),
@ -265,7 +265,7 @@ class SAM3_VideoTrack(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="SAM3_VideoTrack", node_id="SAM3_VideoTrack",
display_name="SAM3 Video Track", display_name="SAM3 Video Track",
category="detection", category="image/detection",
search_aliases=["sam3", "video", "track", "propagate"], search_aliases=["sam3", "video", "track", "propagate"],
inputs=[ inputs=[
io.Image.Input("images", display_name="images", tooltip="Video frames as batched images"), io.Image.Input("images", display_name="images", tooltip="Video frames as batched images"),
@ -320,7 +320,7 @@ class SAM3_TrackPreview(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="SAM3_TrackPreview", node_id="SAM3_TrackPreview",
display_name="SAM3 Track Preview", display_name="SAM3 Track Preview",
category="detection", category="image/detection",
inputs=[ inputs=[
SAM3TrackData.Input("track_data", display_name="track_data"), SAM3TrackData.Input("track_data", display_name="track_data"),
io.Image.Input("images", display_name="images", optional=True), io.Image.Input("images", display_name="images", optional=True),
@ -478,7 +478,7 @@ class SAM3_TrackToMask(io.ComfyNode):
return io.Schema( return io.Schema(
node_id="SAM3_TrackToMask", node_id="SAM3_TrackToMask",
display_name="SAM3 Track to Mask", display_name="SAM3 Track to Mask",
category="detection", category="image/detection",
inputs=[ inputs=[
SAM3TrackData.Input("track_data", display_name="track_data"), SAM3TrackData.Input("track_data", display_name="track_data"),
io.String.Input("object_indices", display_name="object_indices", default="", io.String.Input("object_indices", display_name="object_indices", default="",

View File

@ -353,7 +353,8 @@ class SDPoseDrawKeypoints(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SDPoseDrawKeypoints", node_id="SDPoseDrawKeypoints",
category="image/preprocessors", display_name="SDPose Draw Keypoints",
category="image/detection",
search_aliases=["openpose", "pose detection", "preprocessor", "keypoints", "pose"], search_aliases=["openpose", "pose detection", "preprocessor", "keypoints", "pose"],
inputs=[ inputs=[
io.Custom("POSE_KEYPOINT").Input("keypoints"), io.Custom("POSE_KEYPOINT").Input("keypoints"),
@ -421,7 +422,8 @@ class SDPoseKeypointExtractor(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SDPoseKeypointExtractor", node_id="SDPoseKeypointExtractor",
category="image/preprocessors", display_name="SDPose Keypoint Extractor",
category="image/detection",
search_aliases=["openpose", "pose detection", "preprocessor", "keypoints", "sdpose"], search_aliases=["openpose", "pose detection", "preprocessor", "keypoints", "sdpose"],
description="Extract pose keypoints from images using the SDPose model: https://huggingface.co/Comfy-Org/SDPose/tree/main/checkpoints", description="Extract pose keypoints from images using the SDPose model: https://huggingface.co/Comfy-Org/SDPose/tree/main/checkpoints",
inputs=[ inputs=[
@ -595,7 +597,8 @@ class SDPoseFaceBBoxes(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="SDPoseFaceBBoxes", node_id="SDPoseFaceBBoxes",
category="image/preprocessors", display_name="SDPose Face Bounding Boxes",
category="image/detection",
search_aliases=["face bbox", "face bounding box", "pose", "keypoints"], search_aliases=["face bbox", "face bounding box", "pose", "keypoints"],
inputs=[ inputs=[
io.Custom("POSE_KEYPOINT").Input("keypoints"), io.Custom("POSE_KEYPOINT").Input("keypoints"),
@ -652,7 +655,8 @@ class CropByBBoxes(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="CropByBBoxes", node_id="CropByBBoxes",
category="image/preprocessors", display_name="Crop By Bounding Boxes",
category="image/transform",
search_aliases=["crop", "face crop", "bbox crop", "pose", "bounding box"], search_aliases=["crop", "face crop", "bbox crop", "pose", "bounding box"],
description="Crop and resize regions from the input image batch based on provided bounding boxes.", description="Crop and resize regions from the input image batch based on provided bounding boxes.",
inputs=[ inputs=[

View File

@ -65,7 +65,7 @@ class VideoLinearCFGGuidance:
RETURN_TYPES = ("MODEL",) RETURN_TYPES = ("MODEL",)
FUNCTION = "patch" FUNCTION = "patch"
CATEGORY = "sampling/video_models" CATEGORY = "sampling/guiders"
def patch(self, model, min_cfg): def patch(self, model, min_cfg):
def linear_cfg(args): def linear_cfg(args):
@ -89,7 +89,7 @@ class VideoTriangleCFGGuidance:
RETURN_TYPES = ("MODEL",) RETURN_TYPES = ("MODEL",)
FUNCTION = "patch" FUNCTION = "patch"
CATEGORY = "sampling/video_models" CATEGORY = "sampling/guiders"
def patch(self, model, min_cfg): def patch(self, model, min_cfg):
def linear_cfg(args): def linear_cfg(args):
@ -157,5 +157,7 @@ NODE_CLASS_MAPPINGS = {
} }
NODE_DISPLAY_NAME_MAPPINGS = { NODE_DISPLAY_NAME_MAPPINGS = {
"ImageOnlyCheckpointLoader": "Image Only Checkpoint Loader (img2vid model)", "ImageOnlyCheckpointLoader": "Load Checkpoint Image Only (img2vid model)",
"VideoLinearCFGGuidance": "Video Linear CFG Guidance",
"VideoTriangleCFGGuidance": "Video Triangle CFG Guidance",
} }

View File

@ -122,7 +122,8 @@ class VOIDQuadmaskPreprocess(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="VOIDQuadmaskPreprocess", node_id="VOIDQuadmaskPreprocess",
category="mask/video", display_name="VOID Quadmask Preprocessor",
category="image/mask",
inputs=[ inputs=[
io.Mask.Input("mask"), io.Mask.Input("mask"),
io.Int.Input("dilate_width", default=0, min=0, max=50, step=1, io.Int.Input("dilate_width", default=0, min=0, max=50, step=1,
@ -392,7 +393,7 @@ class VOIDWarpedNoiseSource(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="VOIDWarpedNoiseSource", node_id="VOIDWarpedNoiseSource",
category="sampling/custom_sampling/noise", category="sampling/noise",
inputs=[ inputs=[
io.Latent.Input("warped_noise", io.Latent.Input("warped_noise",
tooltip="Warped noise latent from VOIDWarpedNoise"), tooltip="Warped noise latent from VOIDWarpedNoise"),
@ -454,7 +455,7 @@ class VOIDSampler(io.ComfyNode):
def define_schema(cls): def define_schema(cls):
return io.Schema( return io.Schema(
node_id="VOIDSampler", node_id="VOIDSampler",
category="sampling/custom_sampling/samplers", category="sampling/samplers",
inputs=[], inputs=[],
outputs=[io.Sampler.Output()], outputs=[io.Sampler.Output()],
) )

View File

@ -691,7 +691,7 @@ class LoraLoader:
FUNCTION = "load_lora" FUNCTION = "load_lora"
CATEGORY = "loaders" CATEGORY = "loaders"
DESCRIPTION = "LoRAs are used to modify diffusion and CLIP models, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together." DESCRIPTION = "This LoRA loader is used to modify both diffusion and CLIP models, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together."
SEARCH_ALIASES = ["lora", "load lora", "apply lora", "lora loader", "lora model"] SEARCH_ALIASES = ["lora", "load lora", "apply lora", "lora loader", "lora model"]
def load_lora(self, model, clip, lora_name, strength_model, strength_clip): def load_lora(self, model, clip, lora_name, strength_model, strength_clip):
@ -721,6 +721,7 @@ class LoraLoaderModelOnly(LoraLoader):
"strength_model": ("FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}), "strength_model": ("FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}),
}} }}
RETURN_TYPES = ("MODEL",) RETURN_TYPES = ("MODEL",)
DESCRIPTION = "This LoRAs loader is used to modify the diffusion model, altering the way in which latents are denoised such as applying styles. Multiple LoRA nodes can be linked together."
FUNCTION = "load_lora_model_only" FUNCTION = "load_lora_model_only"
def load_lora_model_only(self, model, lora_name, strength_model): def load_lora_model_only(self, model, lora_name, strength_model):
@ -1771,7 +1772,7 @@ class LoadImageMask(LoadImage):
} }
} }
CATEGORY = "mask" CATEGORY = "image"
RETURN_TYPES = ("MASK",) RETURN_TYPES = ("MASK",)
FUNCTION = "load_image_mask" FUNCTION = "load_image_mask"