Files
2026-03-18 16:20:23 -04:00

93 lines
3.2 KiB
Python
Executable File

import random
import time # Import the time module
class EmAySee_RandomIntFromList:
"""
ComfyUI custom node to select a random integer from a user-defined list or range,
with an optional seed for reproducibility.
"""
def __init__(self):
pass
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"integer_list": ("STRING", {
"default": "1, 2, 4-6, 9, 11, 13-18",
"multiline": False,
"placeholder": "Enter integers or ranges (e.g., 1, 2, 4-6, 9)"
}),
"seed": ("INT", {
"default": 0,
"min": 0, # Minimum seed value
"step": 1, # Increment/decrement step
"display": "number" # Optional, for better UI
# Can add "forceInput": True to *require* a connection.
}),
},
"optional": {
"use_system_time": ("BOOLEAN", {
"default": True, #Default to a new seed on each run
"label_on": "Enabled", #Optional better UI
"label_off": "Disabled"
})
}
}
RETURN_TYPES = ("INT",)
RETURN_NAMES = ("random_integer",)
FUNCTION = "get_random_integer"
CATEGORY = "EmAySee/Utilities/List"
def get_random_integer(self, integer_list, seed, use_system_time=True):
"""
Parses the input, sets the seed, and returns a random integer.
"""
try:
numbers = self.parse_integer_list(integer_list)
if not numbers:
return (0,)
# Seed handling:
if use_system_time:
# Use system time * number of milliseconds for a more unique seed each run
seed = int(time.time() * 1000) # Use milliseconds for more variation
random.seed(seed) # Set the seed *before* calling random.choice
random_int = random.choice(numbers)
return (random_int,)
except ValueError:
print("Error: Invalid integer list format. Please use comma-separated integers and ranges (e.g., 1, 2-5, 10).")
return (0,)
def parse_integer_list(self, integer_list_string):
"""
Parses the comma-separated string of integers and ranges.
"""
numbers = []
parts = integer_list_string.split(',')
for part in parts:
part = part.strip()
if '-' in part:
try:
start, end = map(int, part.split('-'))
numbers.extend(range(start, end + 1))
except ValueError:
raise ValueError("Invalid range format.")
else:
try:
numbers.append(int(part))
except ValueError:
raise ValueError("Invalid integer format.")
return numbers
NODE_CLASS_MAPPINGS = {
"EmAySee_RandomIntFromList": EmAySee_RandomIntFromList
}
NODE_DISPLAY_NAME_MAPPINGS = {
"EmAySee_RandomIntFromList": "EmAySee - Random Integer from List 2"
}