diff --git a/Rayko_Loop_Seed.py b/Rayko_Loop_Seed.py deleted file mode 100644 index c41789c..0000000 --- a/Rayko_Loop_Seed.py +++ /dev/null @@ -1,66 +0,0 @@ -import random -from decimal import Decimal, ROUND_HALF_UP - -print("\033[93m🦊\033[0m \033[93mRaykoStudio - RS Loop Seed \033[92mLOADED\033[0m") - -MAX_SEED = 999999999999999 - - -class Rayko_Loop_Seed: - DESCRIPTION = "Generation of consecutive numbers." - - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "start_at_step": ("INT", { - "default": 0, - "min": -10000, - "max": 10000, - "step": 1, - }), - "end_at_step": ("INT", { - "default": 10, - "min": -10000, - "max": 10000, - "step": 1, - }), - "jump": ("INT", { - "default": 1, - "min": 1, - "max": 1000, - "step": 1, - }) - } - } - - RETURN_TYPES = ("INT",) - OUTPUT_IS_LIST = (True,) - FUNCTION = "generate" - CATEGORY = "🦊 RaykoStudio" - - def generate(self, start_at_step: int, end_at_step: int, jump: int): - if jump <= 0: - raise ValueError("Jump must be greater than 0.") - values = [] - current = start_at_step - while current <= end_at_step: - values.append(current) - current += jump - return (values,) - - @classmethod - def IS_CHANGED(cls, start_at_step, end_at_step, jump): - return f"{start_at_step}_{end_at_step}_{jump}" - - @classmethod - def DISPLAY_NAME(cls): - return "🦊 RS Loop Seed" - -NODE_CLASS_MAPPINGS = { - "Rayko_Loop_Seed": Rayko_Loop_Seed, -} - -NODE_DISPLAY_NAME_MAPPINGS = { - "Rayko_Loop_Seed": "🦊 RS Loop Seed", -} diff --git a/Rayko_Loop_Switch.py b/Rayko_Loop_Switch.py new file mode 100644 index 0000000..e018d1d --- /dev/null +++ b/Rayko_Loop_Switch.py @@ -0,0 +1,89 @@ +import random +import os + +print("\033[93m🦊\033[0m \033[93mRaykoStudio - RS Loop Switch \033[92mLOADED\033[0m") + +MAX_SEED = 9888888888888888 + +WEB_DIRECTORY = "./web" + +class RaykoLoopSwitchSeed: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "start_at_step": ("INT", {"default": 1, "min": -10000, "max": 10000, "step": 1}), + "end_at_step": ("INT", {"default": 10, "min": -10000, "max": 10000, "step": 1}), + "jump": ("INT", {"default": 1, "min": 1, "max": 1000, "step": 1}), + "control_before_generate": (["fixed", "increment", "decrement", "randomize"],), + "value_1": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + "value_2": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + "value_3": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + "value_4": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + "value_5": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + "value_6": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + "value_7": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + "value_8": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + "value_9": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + "value_10": ("INT", {"default": 0, "min": 0, "max": MAX_SEED}), + } + } + + RETURN_TYPES = ("INT",) + OUTPUT_IS_LIST = (True,) + FUNCTION = "process" + CATEGORY = "🦊 RaykoStudio" + OUTPUT_NODE = True + + def process(self, start_at_step, end_at_step, jump, control_before_generate, + value_1, value_2, value_3, value_4, value_5, + value_6, value_7, value_8, value_9, value_10): + + values = [value_1, value_2, value_3, value_4, value_5, + value_6, value_7, value_8, value_9, value_10] + + if control_before_generate == "randomize": + values = [random.randint(0, MAX_SEED) for _ in range(10)] + elif control_before_generate == "increment": + values = [(v + 1) % (MAX_SEED + 1) for v in values] + elif control_before_generate == "decrement": + values = [(v - 1) % (MAX_SEED + 1) for v in values] + + if jump <= 0: + raise ValueError("Jump must be greater than 0.") + + output_values = [] + current_step = start_at_step + while current_step <= end_at_step: + index = (current_step - 1) % 10 + output_values.append(values[index]) + current_step += jump + + return { + "ui": { + "value_1": [values[0]], + "value_2": [values[1]], + "value_3": [values[2]], + "value_4": [values[3]], + "value_5": [values[4]], + "value_6": [values[5]], + "value_7": [values[6]], + "value_8": [values[7]], + "value_9": [values[8]], + "value_10": [values[9]], + }, + "result": (output_values,) + } + + @classmethod + def IS_CHANGED(cls, start_at_step, end_at_step, jump, control_before_generate, + value_1, value_2, value_3, value_4, value_5, + value_6, value_7, value_8, value_9, value_10): + if control_before_generate in ["randomize", "increment", "decrement"]: + return float("NaN") + return (f"{start_at_step}_{end_at_step}_{jump}_{control_before_generate}_" + f"{value_1}_{value_2}_{value_3}_{value_4}_{value_5}_" + f"{value_6}_{value_7}_{value_8}_{value_9}_{value_10}") + +NODE_CLASS_MAPPINGS = {"RaykoLoopSwitchSeed": RaykoLoopSwitchSeed} +NODE_DISPLAY_NAME_MAPPINGS = {"RaykoLoopSwitchSeed": "🦊 RS Loop Switch"} \ No newline at end of file diff --git a/web/loopSwitchSeed.js b/web/loopSwitchSeed.js new file mode 100644 index 0000000..912d904 --- /dev/null +++ b/web/loopSwitchSeed.js @@ -0,0 +1,30 @@ +import { app } from "../../scripts/app.js"; + +app.registerExtension({ + name: "RaykoStudio.LoopSwitchSeed", + + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeData.name === "RaykoLoopSwitchSeed") { + + nodeType.prototype.onExecuted = function(message) { + // В ComfyUI 0.18+ данные могут приходить прямо в message + const uiData = message.ui || message; + + if (!this.widgets || !uiData) { + return; + } + + for (let i = 1; i <= 10; i++) { + const widgetName = "value_" + i; + const widget = this.widgets.find(w => w.name === widgetName); + + if (widget && uiData[widgetName]) { + widget.value = uiData[widgetName][0]; + } + } + + this.setDirtyCanvas(true, true); + }; + } + } +}); \ No newline at end of file