Files
FunnyFinger a92aaa7159 updated to v2.0.0
added new features such as dynamic sum adjustment and sum-lock dynamics
2025-04-19 20:22:11 +03:00

74 lines
3.1 KiB
Python

import folder_paths
# Updated Node name for registration (used in JS)
NODE_NAME = "Slider Stacker (DSS)" # Internal name, keep suffix for uniqueness
########################################################################################################################
# TSC Slider Stacker (DSS) - String Inputs for Names
class TSC_Slider_Stacker_Standalone:
@classmethod
def INPUT_TYPES(cls):
max_sliders = 50
inputs = {
"required": {
"sliders_max": ("FLOAT", {"default": 1.00, "min": 0.0, "max": 2.0, "step": 0.01, "precision": 2, "display": "number"}),
"sliders_count": ("INT", {"default": 1, "min": 1, "max": max_sliders, "step": 1}),
"sliders_sum": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 9999.0, "step": 0.01, "precision": 2, "display": "number"}),
"lock_sum": ("BOOLEAN", {"default": False, "label_on": "on", "label_off": "off"})
}
}
# Define all possible widgets without the hidden flag initially
for i in range(1, max_sliders + 1):
inputs["required"][f"slider_name_{i}"] = ("STRING", {"multiline": False, "default": "None"}) # Removed hidden: True
widget_name = f"({i})"
inputs["required"][widget_name] = ("FLOAT", {
"default": 1.0,
"min": 0.0,
"max": 2.0,
"step": 0.01,
"precision": 2,
"display": "slider"
# Removed hidden: True
})
return inputs
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("SLIDER_WEIGHTS",)
FUNCTION = "slider_stacker"
# Updated Category
CATEGORY = "Dynamic Sliders Stack"
# Add compatibility attributes for newer ComfyUI versions
TITLE = "Slider Stacker"
TYPE = "Slider Stacker (DSS)"
# Removed __init__, onNodeLoad, update_slider_visibility, getWidgets, onExecute overrides
# Let JS handle the dynamic visibility
def slider_stacker(self, sliders_max, sliders_count, sliders_sum=None, lock_sum=False, **kwargs):
# Clamp sliders_count to a valid range (1 to 50)
sliders_count = max(1, min(int(sliders_count), 50))
# Regular processing using the validated sliders_count
sliders_available = [kwargs.get(f"slider_name_{i}") for i in range(1, sliders_count + 1)]
weights_raw = [kwargs.get(f"({i})") for i in range(1, sliders_count + 1)]
safe_max_strength = max(0.0, sliders_max)
weights_clamped_by_widget = [max(0.0, min(w, 2.0)) for w in weights_raw]
weights_clamped_final = [min(w, safe_max_strength) for w in weights_clamped_by_widget]
active_weights = []
for i in range(sliders_count):
active_weights.append(f"{weights_clamped_final[i]:.2f}")
weights_string = ", ".join(active_weights)
return (weights_string,)
# --- Mappings ---
NODE_CLASS_MAPPINGS = {
NODE_NAME: TSC_Slider_Stacker_Standalone
}
# Updated Display Name
NODE_DISPLAY_NAME_MAPPINGS = {
NODE_NAME: "Slider Stacker" # Removed suffix for cleaner UI
}