Files
MachinePainting 3a574494eb Add short DESCRIPTION text to all 41 nodes
None of the nodes showed description text in ComfyUI because ComfyUI
reads obj_class.DESCRIPTION when it builds node_info - it does not read
the class docstring, which is what these nodes had.

Every registered node now carries a one-line DESCRIPTION, kept to
29-67 characters so it fits the limited space in ComfyUI Manager and
the node search results. Image Transform Pro's four-sentence
description is shortened to match.

Descriptions are derived from each node's existing docstring, or from
the README for the five classes that had no docstring
(ImageBlendPro, ColorMatchBlend and the three Boolean switch nodes).

README also updated for the recent changes: the New Nodes table now
lists the real "Rotate & Scale" category, the XY placement direction is
documented on both nodes (positive X right, positive Y up), and the
v2.2.0 changelog records the placement convention, the node outputs and
the MP_ImageTransform internal name.
2026-09-03 03:32:00 -07:00

224 lines
9.3 KiB
Python

class MegaSliderMasterValue:
"""
Master settings for Mega Sliders.
Connect to Mega Slider nodes to control min/max/step for all sliders.
"""
DESCRIPTION = "Share one min/max/step range across Mega Slider nodes."
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"min_value": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.1}),
"max_value": ("FLOAT", {"default": 1.0, "min": -10000.0, "max": 10000.0, "step": 0.1}),
"step": ("FLOAT", {"default": 0.01, "min": 0.001, "max": 1000.0, "step": 0.01}),
}
}
RETURN_TYPES = ("MEGA_SLIDER_MASTER",)
RETURN_NAMES = ("master",)
FUNCTION = "output_settings"
CATEGORY = "MachinePaintingNodes/Util"
def output_settings(self, min_value, max_value, step):
return ({"min": min_value, "max": max_value, "step": step},)
class MegaSliderX1:
"""
Single universal slider with float/int output toggle.
Connect Mega Slider Master Value for settings, or use right-click > Properties for overrides.
"""
DESCRIPTION = "One universal slider with float/int output."
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"output_int": ("BOOLEAN", {"default": False}),
"slider_1": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
},
"optional": {
"master": ("MEGA_SLIDER_MASTER",),
}
}
RETURN_TYPES = ("FLOAT",)
RETURN_NAMES = ("value",)
FUNCTION = "output_values"
CATEGORY = "MachinePaintingNodes/Util"
def output_values(self, output_int, slider_1, master=None):
value = slider_1
if master:
min_val = master["min"]
max_val = master["max"]
step_val = master["step"]
def round_to_step(val, step_size):
return round(val / step_size) * step_size
value = max(min_val, min(max_val, round_to_step(value, step_val)))
if output_int:
value = int(value)
return (value,)
class MegaSliderX3:
"""
3 universal sliders with float/int output toggle.
Connect Mega Slider Master Value for settings, or use right-click > Properties for per-slider overrides.
"""
DESCRIPTION = "Three universal sliders with float/int output."
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"output_int": ("BOOLEAN", {"default": False}),
"slider_1": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_2": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_3": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
},
"optional": {
"master": ("MEGA_SLIDER_MASTER",),
}
}
RETURN_TYPES = ("FLOAT", "FLOAT", "FLOAT")
RETURN_NAMES = ("value_1", "value_2", "value_3")
FUNCTION = "output_values"
CATEGORY = "MachinePaintingNodes/Util"
def output_values(self, output_int, slider_1, slider_2, slider_3, master=None):
values = [slider_1, slider_2, slider_3]
if master:
min_val = master["min"]
max_val = master["max"]
step_val = master["step"]
def round_to_step(val, step_size):
return round(val / step_size) * step_size
values = [max(min_val, min(max_val, round_to_step(v, step_val))) for v in values]
if output_int:
values = [int(v) for v in values]
return tuple(values)
class MegaSliderX6:
"""
6 universal sliders with float/int output toggle.
Connect Mega Slider Master Value for settings, or use right-click > Properties for per-slider overrides.
"""
DESCRIPTION = "Six universal sliders with float/int output."
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"output_int": ("BOOLEAN", {"default": False}),
"slider_1": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_2": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_3": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_4": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_5": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_6": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
},
"optional": {
"master": ("MEGA_SLIDER_MASTER",),
}
}
RETURN_TYPES = ("FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT")
RETURN_NAMES = ("value_1", "value_2", "value_3", "value_4", "value_5", "value_6")
FUNCTION = "output_values"
CATEGORY = "MachinePaintingNodes/Util"
def output_values(self, output_int, slider_1, slider_2, slider_3, slider_4, slider_5, slider_6, master=None):
values = [slider_1, slider_2, slider_3, slider_4, slider_5, slider_6]
if master:
min_val = master["min"]
max_val = master["max"]
step_val = master["step"]
def round_to_step(val, step_size):
return round(val / step_size) * step_size
values = [max(min_val, min(max_val, round_to_step(v, step_val))) for v in values]
if output_int:
values = [int(v) for v in values]
return tuple(values)
class MegaSliderX12:
"""
12 universal sliders with float/int output toggle.
Connect Mega Slider Master Value for settings, or use right-click > Properties for per-slider overrides.
"""
DESCRIPTION = "Twelve universal sliders with float/int output."
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"output_int": ("BOOLEAN", {"default": False}),
"slider_1": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_2": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_3": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_4": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_5": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_6": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_7": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_8": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_9": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_10": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_11": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
"slider_12": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01, "display": "slider"}),
},
"optional": {
"master": ("MEGA_SLIDER_MASTER",),
}
}
RETURN_TYPES = ("FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT",
"FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT", "FLOAT")
RETURN_NAMES = ("value_1", "value_2", "value_3", "value_4", "value_5", "value_6",
"value_7", "value_8", "value_9", "value_10", "value_11", "value_12")
FUNCTION = "output_values"
CATEGORY = "MachinePaintingNodes/Util"
def output_values(self, output_int, slider_1, slider_2, slider_3, slider_4, slider_5, slider_6,
slider_7, slider_8, slider_9, slider_10, slider_11, slider_12, master=None):
values = [slider_1, slider_2, slider_3, slider_4, slider_5, slider_6,
slider_7, slider_8, slider_9, slider_10, slider_11, slider_12]
if master:
min_val = master["min"]
max_val = master["max"]
step_val = master["step"]
def round_to_step(val, step_size):
return round(val / step_size) * step_size
values = [max(min_val, min(max_val, round_to_step(v, step_val))) for v in values]
if output_int:
values = [int(v) for v in values]
return tuple(values)