From 85af9dd68fe9e56650ed1eb495e5c77b4976ff20 Mon Sep 17 00:00:00 2001 From: KarrixLee <52952301+KarrixLee@users.noreply.github.com> Date: Sat, 10 May 2025 13:13:02 +0800 Subject: [PATCH] Test (#91) * feat: enhance apply_random_seed_to_workflow function to support KSampler node type and handle fixed seed settings * refactor: add flag to skip randomization in apply_random_seed_to_workflow for KSampler nodes * tweak --- custom_routes.py | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/custom_routes.py b/custom_routes.py index fda6af5..b43ba80 100644 --- a/custom_routes.py +++ b/custom_routes.py @@ -316,7 +316,7 @@ def randomSeed(num_digits=15): return random.randint(range_start, range_end) -def apply_random_seed_to_workflow(workflow_api): +def apply_random_seed_to_workflow(workflow_api, workflow): """ Applies a random seed to each element in the workflow_api that has a 'seed' input. @@ -329,6 +329,41 @@ def apply_random_seed_to_workflow(workflow_api): # If seed is a list, it's an input from another node (generally `external number int`) if isinstance(workflow_api[key]["inputs"]["seed"], list): continue + + # Check node type in workflow to determine if we should randomize + node_id = key + should_skip = ( + False # Add a flag to track if we should skip randomization + ) + + for node in workflow["nodes"]: + if str(node["id"]) == node_id and node["type"] == "KSampler": + # Check if this node has widgets_values and if seed setting is not "fixed" + if "widgets_values" in node and len(node["widgets_values"]) > 1: + seed_mode = node["widgets_values"][1] + if seed_mode == "fixed": + # Skip randomization for fixed seeds + logger.info( + f"Skipping random seed for KSampler (node {node_id}) as it's set to fixed" + ) + should_skip = True # Set the flag to skip randomization + break # Exit the inner loop + + # Apply random seed for non-fixed seeds (randomize, iter, etc.) + workflow_api[key]["inputs"]["seed"] = randomSeed() + logger.info( + f"Applied random seed {workflow_api[key]['inputs']['seed']} to KSampler (node {node_id})" + ) + should_skip = ( + True # Set the flag to skip default randomization + ) + break # Exit the inner loop + break # This break will skip checking other nodes if widgets_values doesn't exist + + # Skip the rest of the code for this key if we already handled it + if should_skip: + continue + # Special case for SONICSampler if workflow_api[key]["class_type"] == "SONICSampler": workflow_api[key]["inputs"]["seed"] = randomSeed("sonic") @@ -449,7 +484,7 @@ def send_prompt(sid: str, inputs: StreamingPrompt): workflow = copy.deepcopy(inputs.workflow) # Random seed - apply_random_seed_to_workflow(workflow_api) + apply_random_seed_to_workflow(workflow_api, workflow) logger.info("getting inputs", inputs.inputs) @@ -535,7 +570,7 @@ async def comfy_deploy_run(request): workflow = data.get("workflow") # Now it handles directly in here - apply_random_seed_to_workflow(workflow_api) + apply_random_seed_to_workflow(workflow_api, workflow) apply_inputs_to_workflow(workflow_api, inputs) prompt = { @@ -602,7 +637,7 @@ async def stream_prompt(data, token): gpu_event_id = data.get("gpu_event_id", None) # Now it handles directly in here - apply_random_seed_to_workflow(workflow_api) + apply_random_seed_to_workflow(workflow_api, workflow) apply_inputs_to_workflow(workflow_api, inputs) prompt = {