Feat: Add Math and Random Generator nodes
This commit is contained in:
@@ -259,6 +259,43 @@ Useful for dynamic resizing, conditional logic based on aspect ratio, or passing
|
||||
|
||||
---
|
||||
|
||||
### 🧮 Math & Random
|
||||
|
||||
<details>
|
||||
<summary><b>➕ Int/Float Math Operation</b> - Perform basic arithmetic</summary>
|
||||
|
||||
**Category:** `DebugPadawan/Math`
|
||||
|
||||
Performs simple math operations (add, subtract, multiply, divide, modulo, power) on integers or floats.
|
||||
|
||||
**📥 Inputs:**
|
||||
- `a`, `b` *(Int/Float)*: The values to calculate
|
||||
- `operation` *(List)*: The type of mathematical operation
|
||||
|
||||
**📤 Outputs:**
|
||||
- `result` *(Int/Float)*: The calculated value (returns both Int and Float variations)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>🎲 Random Generator</b> - Seed-based random values</summary>
|
||||
|
||||
**Category:** `DebugPadawan/Math`
|
||||
|
||||
Generates a random float or integer between a min and max value, driven by a specific seed for reproducibility.
|
||||
|
||||
**📥 Inputs:**
|
||||
- `seed` *(Integer)*: Seed for the random generator
|
||||
- `min_val`, `max_val` *(Float/Integer)*: The range bounds
|
||||
- `mode` *(List)*: Whether to generate a float or an int
|
||||
|
||||
**📤 Outputs:**
|
||||
- `val` *(Float/Integer)*: The random value (returns both Int and Float formats)
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
### 🔧 Utility Nodes
|
||||
|
||||
<details>
|
||||
@@ -338,6 +375,7 @@ Data → Wait (2.0s) → Processing → Wait (1.0s) → Output
|
||||
| **DebugPadawan/Utilities** | List Info | Data analysis helpers |
|
||||
| **DebugPadawan/Logic** | Conditional String | Conditional operations |
|
||||
| **DebugPadawan/Image** | Image Info | Image tensor analysis |
|
||||
| **DebugPadawan/Math** | Int Math Operation, Float Math Operation, Random Generator | Basic arithmetic and random number generation |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ from .nodes.json import NODE_CLASS_MAPPINGS as JSON_NODES
|
||||
from .nodes.json import NODE_DISPLAY_NAME_MAPPINGS as JSON_DISPLAY_NAMES
|
||||
from .nodes.image import NODE_CLASS_MAPPINGS as IMAGE_NODES
|
||||
from .nodes.image import NODE_DISPLAY_NAME_MAPPINGS as IMAGE_DISPLAY_NAMES
|
||||
from .nodes.math_nodes import NODE_CLASS_MAPPINGS as MATH_NODES
|
||||
from .nodes.math_nodes import NODE_DISPLAY_NAME_MAPPINGS as MATH_DISPLAY_NAMES
|
||||
|
||||
# Combine all node mappings
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
@@ -21,6 +23,7 @@ NODE_CLASS_MAPPINGS = {
|
||||
**TIMING_NODES,
|
||||
**JSON_NODES,
|
||||
**IMAGE_NODES,
|
||||
**MATH_NODES,
|
||||
}
|
||||
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
@@ -29,6 +32,7 @@ NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
**TIMING_DISPLAY_NAMES,
|
||||
**JSON_DISPLAY_NAMES,
|
||||
**IMAGE_DISPLAY_NAMES,
|
||||
**MATH_DISPLAY_NAMES,
|
||||
}
|
||||
|
||||
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
import random
|
||||
import math
|
||||
|
||||
class IntMathOperation:
|
||||
"""
|
||||
Node for performing basic integer math operations
|
||||
"""
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
"required": {
|
||||
"a": ("INT", {"default": 0, "step": 1}),
|
||||
"b": ("INT", {"default": 0, "step": 1}),
|
||||
"operation": (["add", "subtract", "multiply", "divide", "modulo", "power"],),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("INT", "FLOAT")
|
||||
RETURN_NAMES = ("int_result", "float_result")
|
||||
FUNCTION = "perform_math"
|
||||
CATEGORY = "DebugPadawan/Math"
|
||||
|
||||
def perform_math(self, a, b, operation):
|
||||
if operation == "add":
|
||||
res = a + b
|
||||
elif operation == "subtract":
|
||||
res = a - b
|
||||
elif operation == "multiply":
|
||||
res = a * b
|
||||
elif operation == "divide":
|
||||
res = a / b if b != 0 else 0
|
||||
elif operation == "modulo":
|
||||
res = a % b if b != 0 else 0
|
||||
elif operation == "power":
|
||||
res = math.pow(a, b)
|
||||
else:
|
||||
res = 0
|
||||
|
||||
return (int(res), float(res))
|
||||
|
||||
|
||||
class FloatMathOperation:
|
||||
"""
|
||||
Node for performing basic float math operations
|
||||
"""
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
"required": {
|
||||
"a": ("FLOAT", {"default": 0.0, "step": 0.01}),
|
||||
"b": ("FLOAT", {"default": 0.0, "step": 0.01}),
|
||||
"operation": (["add", "subtract", "multiply", "divide", "power"],),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("FLOAT", "INT")
|
||||
RETURN_NAMES = ("float_result", "int_result")
|
||||
FUNCTION = "perform_math"
|
||||
CATEGORY = "DebugPadawan/Math"
|
||||
|
||||
def perform_math(self, a, b, operation):
|
||||
if operation == "add":
|
||||
res = a + b
|
||||
elif operation == "subtract":
|
||||
res = a - b
|
||||
elif operation == "multiply":
|
||||
res = a * b
|
||||
elif operation == "divide":
|
||||
res = a / b if b != 0 else 0.0
|
||||
elif operation == "power":
|
||||
res = math.pow(a, b)
|
||||
else:
|
||||
res = 0.0
|
||||
|
||||
return (float(res), int(res))
|
||||
|
||||
|
||||
class RandomGenerator:
|
||||
"""
|
||||
Node for generating random integers or floats based on a seed
|
||||
"""
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
"required": {
|
||||
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
||||
"min_val": ("FLOAT", {"default": 0.0, "step": 0.01}),
|
||||
"max_val": ("FLOAT", {"default": 1.0, "step": 0.01}),
|
||||
"mode": (["float", "int"],),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("FLOAT", "INT")
|
||||
RETURN_NAMES = ("float_val", "int_val")
|
||||
FUNCTION = "generate"
|
||||
CATEGORY = "DebugPadawan/Math"
|
||||
|
||||
def generate(self, seed, min_val, max_val, mode):
|
||||
# Initialize the random generator with the seed
|
||||
rng = random.Random(seed)
|
||||
|
||||
if mode == "float":
|
||||
res = rng.uniform(min_val, max_val)
|
||||
return (float(res), int(res))
|
||||
else:
|
||||
# For int mode, ensure min and max are integers
|
||||
res = rng.randint(int(min_val), int(max_val))
|
||||
return (float(res), int(res))
|
||||
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
"DebugPadawan_IntMathOperation": IntMathOperation,
|
||||
"DebugPadawan_FloatMathOperation": FloatMathOperation,
|
||||
"DebugPadawan_RandomGenerator": RandomGenerator,
|
||||
}
|
||||
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"DebugPadawan_IntMathOperation": "Int Math Operation",
|
||||
"DebugPadawan_FloatMathOperation": "Float Math Operation",
|
||||
"DebugPadawan_RandomGenerator": "Random Generator",
|
||||
}
|
||||
Reference in New Issue
Block a user