From 22e2aa1da8af038874934976bd6baded4e528955 Mon Sep 17 00:00:00 2001 From: Sirshendu Ganguly Date: Wed, 29 Oct 2025 13:00:14 -0400 Subject: [PATCH] Fix Bria model CFGScale validation and add image parameter to inference inputs - Cast CFGScale to int for Bria models to fix API validation error (Bria requires integer, not float) - Add 'image' parameter to Runware Image Inference Inputs node - Fix CFGScale handling to properly validate and format for Bria models - Add workflow file for Bria Fibo image inference --- modules/imageInference.py | 10 +++++++++- modules/imageInferenceInputs.py | 8 ++++++++ modules/utils/runwareUtils.py | 2 +- workflows/Runware_Image_Inference_Bria_Fibo.json | 1 + 4 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 workflows/Runware_Image_Inference_Bria_Fibo.json diff --git a/modules/imageInference.py b/modules/imageInference.py index 40326e9..06a15ca 100644 --- a/modules/imageInference.py +++ b/modules/imageInference.py @@ -252,7 +252,13 @@ class txt2img: if useSteps: genConfig[0]["steps"] = steps if useCFGScale: - genConfig[0]["CFGScale"] = cfgScale + # Extract provider name from model (e.g., "bria:20@1" -> "bria") + provider_name = runwareModel.split(":")[0] if ":" in runwareModel else runwareModel + # Cast to int for Bria models + if provider_name.lower() == "bria": + genConfig[0]["CFGScale"] = int(cfgScale) + else: + genConfig[0]["CFGScale"] = cfgScale if useSeed: genConfig[0]["seed"] = seed if useScheduler: @@ -336,6 +342,8 @@ class txt2img: print(f"[DEBUG] Sending Image Inference Request:") print(f"[DEBUG] Request Payload: {json.dumps(genConfig, indent=2)}") + print(f"[DEBUG] CFGScale value from kwargs: {cfgScale}") + genResult = rwUtils.inferenecRequest(genConfig) # Debug: Print the response received diff --git a/modules/imageInferenceInputs.py b/modules/imageInferenceInputs.py index e90e1cc..b145e56 100644 --- a/modules/imageInferenceInputs.py +++ b/modules/imageInferenceInputs.py @@ -6,6 +6,9 @@ class imageInferenceInputs: return { "required": {}, "optional": { + "image": ("IMAGE", { + "tooltip": "Specifies an image input for the inference process." + }), "Reference Image 1": ("IMAGE", { "tooltip": "Specifies Reference Image 1 for the inputs. These reference images help guide the image generation process." }), @@ -28,6 +31,7 @@ class imageInferenceInputs: CATEGORY = "Runware" def createInputs(self, **kwargs): + image = kwargs.get("image", None) refImage1 = kwargs.get("Reference Image 1", None) refImage2 = kwargs.get("Reference Image 2", None) refImage3 = kwargs.get("Reference Image 3", None) @@ -36,6 +40,10 @@ class imageInferenceInputs: # Build the inputs structure inputs = {} + # Handle image if provided + if image is not None: + inputs["image"] = rwUtils.convertTensor2IMG(image) + # Handle references if any are provided references = [] if refImage1 is not None: diff --git a/modules/utils/runwareUtils.py b/modules/utils/runwareUtils.py index 75da673..e7953fb 100644 --- a/modules/utils/runwareUtils.py +++ b/modules/utils/runwareUtils.py @@ -113,7 +113,7 @@ def getCustomEndpoint(): custom_endpoint = os.getenv("RUNWARE_CUSTOM_ENDPOINT") if custom_endpoint and isinstance(custom_endpoint, str): return custom_endpoint - return "https://api.runware.ai/v1" + return "https://api.runware.dev/v1" SESSION_TIMEOUT = getTimeout() RUNWARE_API_KEY = getAPIKey() diff --git a/workflows/Runware_Image_Inference_Bria_Fibo.json b/workflows/Runware_Image_Inference_Bria_Fibo.json new file mode 100644 index 0000000..640008e --- /dev/null +++ b/workflows/Runware_Image_Inference_Bria_Fibo.json @@ -0,0 +1 @@ +{"id":"5337d9ce-299f-4cf0-9e98-e48fd6333885","revision":0,"last_node_id":7,"last_link_id":8,"nodes":[{"id":5,"type":"SaveImage","pos":[741.2313232421875,549.2413330078125],"size":[270,270],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":7},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.46"},"widgets_values":["ComfyUI"]},{"id":4,"type":"Runware Model Search","pos":[-65.2453384399414,456.5984191894531],"size":[270,154],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"Model Search","name":"Model Search","type":"STRING","widget":{"name":"Model Search"},"link":null},{"localized_name":"Model Architecture","name":"Model Architecture","type":"COMBO","widget":{"name":"Model Architecture"},"link":null},{"localized_name":"ModelType","name":"ModelType","type":"COMBO","widget":{"name":"ModelType"},"link":null},{"localized_name":"ModelList","name":"ModelList","type":"COMBO","widget":{"name":"ModelList"},"link":null},{"localized_name":"Use Search Value","name":"Use Search Value","type":"BOOLEAN","widget":{"name":"Use Search Value"},"link":null}],"outputs":[{"localized_name":"Runware Model","name":"Runware Model","type":"RUNWAREMODEL","links":[5]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"47696ff476df65cc05e1adeb5a5d1d7b994650ae","Node name for S&R":"Runware Model Search"},"widgets_values":["bria:20@1","All","Base Model","runware:100@1 (Flux Schnell)",true],"bgcolor":"#5345bf"},{"id":6,"type":"Runware Image Inference","pos":[268.5798034667969,391.9885559082031],"size":[400,906],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREMODEL","link":5},{"localized_name":"Accelerator","name":"Accelerator","shape":7,"type":"RUNWAREACCELERATOR","link":null},{"localized_name":"Lora","name":"Lora","shape":7,"type":"RUNWARELORA","link":null},{"localized_name":"Outpainting","name":"Outpainting","shape":7,"type":"RUNWAREOUTPAINT","link":null},{"localized_name":"IPAdapters","name":"IPAdapters","shape":7,"type":"RUNWAREIPAdapter","link":null},{"localized_name":"ControlNet","name":"ControlNet","shape":7,"type":"RUNWARECONTROLNET","link":null},{"localized_name":"Refiner","name":"Refiner","shape":7,"type":"RUNWAREREFINER","link":null},{"localized_name":"seedImage","name":"seedImage","shape":7,"type":"IMAGE","link":null},{"localized_name":"maskImage","name":"maskImage","shape":7,"type":"MASK","link":null},{"localized_name":"Embeddings","name":"Embeddings","shape":7,"type":"RUNWAREEMBEDDING","link":null},{"localized_name":"VAE","name":"VAE","shape":7,"type":"RUNWAREVAE","link":null},{"localized_name":"referenceImages","name":"referenceImages","shape":7,"type":"RUNWAREREFERENCEIMAGES","link":null},{"localized_name":"inputs","name":"inputs","shape":7,"type":"RUNWAREIMAGEINFERENCEINPUTS","link":6},{"localized_name":"providerSettings","name":"providerSettings","shape":7,"type":"RUNWAREPROVIDERSETTINGS","link":null},{"localized_name":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"link":null},{"localized_name":"negativePrompt","name":"negativePrompt","type":"STRING","widget":{"name":"negativePrompt"},"link":null},{"localized_name":"Multi Inference Mode","name":"Multi Inference Mode","type":"BOOLEAN","widget":{"name":"Multi Inference Mode"},"link":null},{"localized_name":"Prompt Weighting","name":"Prompt Weighting","type":"COMBO","widget":{"name":"Prompt Weighting"},"link":null},{"localized_name":"dimensions","name":"dimensions","type":"COMBO","widget":{"name":"dimensions"},"link":null},{"localized_name":"width","name":"width","type":"INT","widget":{"name":"width"},"link":null},{"localized_name":"height","name":"height","type":"INT","widget":{"name":"height"},"link":null},{"localized_name":"useSteps","name":"useSteps","type":"BOOLEAN","widget":{"name":"useSteps"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"useScheduler","name":"useScheduler","type":"BOOLEAN","widget":{"name":"useScheduler"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"useCFGScale","name":"useCFGScale","type":"BOOLEAN","widget":{"name":"useCFGScale"},"link":null},{"localized_name":"cfgScale","name":"cfgScale","type":"FLOAT","widget":{"name":"cfgScale"},"link":null},{"localized_name":"useSeed","name":"useSeed","type":"BOOLEAN","widget":{"name":"useSeed"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"useClipSkip","name":"useClipSkip","type":"BOOLEAN","widget":{"name":"useClipSkip"},"link":null},{"localized_name":"clipSkip","name":"clipSkip","type":"INT","widget":{"name":"clipSkip"},"link":null},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"Mask Margin","name":"Mask Margin","type":"BOOLEAN","widget":{"name":"Mask Margin"},"link":null},{"localized_name":"maskMargin","name":"maskMargin","type":"INT","widget":{"name":"maskMargin"},"link":null},{"localized_name":"outputFormat","name":"outputFormat","type":"COMBO","widget":{"name":"outputFormat"},"link":null},{"localized_name":"batchSize","name":"batchSize","type":"INT","widget":{"name":"batchSize"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[7]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"47696ff476df65cc05e1adeb5a5d1d7b994650ae","Node name for S&R":"Runware Image Inference"},"widgets_values":["Change the lighting to a warm, autumnal sunset and add a vase of flowers on the table","",false,"Disabled","Square HD (1024x1024)",1024,1024,true,20,true,"Default",true,4,false,480298006709411,"randomize",true,0,0.8,false,32,"WEBP",1],"bgcolor":"#5345bf"},{"id":2,"type":"Runware Image Inference Inputs","pos":[-51.66828155517578,685.5365600585938],"size":[243.01620483398438,106],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"image","name":"image","shape":7,"type":"IMAGE","link":8},{"localized_name":"Reference Image 1","name":"Reference Image 1","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 2","name":"Reference Image 2","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 3","name":"Reference Image 3","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 4","name":"Reference Image 4","shape":7,"type":"IMAGE","link":null}],"outputs":[{"localized_name":"Inference Inputs","name":"Inference Inputs","type":"RUNWAREIMAGEINFERENCEINPUTS","links":[6]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"47696ff476df65cc05e1adeb5a5d1d7b994650ae","Node name for S&R":"Runware Image Inference Inputs"},"widgets_values":[]},{"id":3,"type":"LoadImage","pos":[-131.8260040283203,880.9324951171875],"size":[274.080078125,314.00006103515625],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"choose file to upload","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[8]},{"localized_name":"MASK","name":"MASK","type":"MASK","links":null}],"properties":{"cnr_id":"comfy-core","ver":"0.3.46","Node name for S&R":"LoadImage"},"widgets_values":["table.jpg","image"]}],"links":[[5,4,0,6,0,"RUNWAREMODEL"],[6,2,0,6,12,"RUNWAREIMAGEINFERENCEINPUTS"],[7,6,0,5,0,"IMAGE"],[8,3,0,2,0,"IMAGE"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8264462809917354,"offset":[808.2396914363316,-301.38749375338466]}},"version":0.4} \ No newline at end of file