From c84d195611e6a92ae44ab2c4898dad60fb093419 Mon Sep 17 00:00:00 2001 From: Sirshendu Ganguly Date: Thu, 28 May 2026 16:24:02 +0530 Subject: [PATCH] Added support for VTO --- modules/imageInferenceInputs.py | 15 ++++++++++++++- workflows/Runware_Image_Inference_VTO.json | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 workflows/Runware_Image_Inference_VTO.json diff --git a/modules/imageInferenceInputs.py b/modules/imageInferenceInputs.py index 0a4ff6f..2ea4672 100644 --- a/modules/imageInferenceInputs.py +++ b/modules/imageInferenceInputs.py @@ -44,13 +44,20 @@ class imageInferenceInputs: optionalInputs[f"Super Resolution Reference Image {i}"] = ("IMAGE", { "tooltip": f"Specifies {ordinal.capitalize()} Super Resolution Reference Image for the inputs.", }) + + optionalInputs["person"] = ("IMAGE", { + "tooltip": "Person image for inputs.person." + }) + optionalInputs["garment"] = ("IMAGE", { + "tooltip": "Garment reference image for inputs.garment." + }) return { "required": {}, "optional": optionalInputs } - DESCRIPTION = "Configure custom inputs for Runware Image Inference, including reference images (with optional type e.g. 'sketch' for illustrative style models, and strength 0-1 for sketch) that can be passed to the inference node." + DESCRIPTION = "Configure custom inputs for Runware Image Inference, including image/mask, reference images (with optional type e.g. 'sketch' for illustrative style models, and strength 0-1 for sketch), super resolution references, and person/garment images." FUNCTION = "createInputs" RETURN_TYPES = ("RUNWAREIMAGEINFERENCEINPUTS",) RETURN_NAMES = ("Inference Inputs",) @@ -60,6 +67,8 @@ class imageInferenceInputs: """Create image inference inputs from provided parameters""" image = kwargs.get("image", None) mask = kwargs.get("mask", None) + person = kwargs.get("person", None) + garment = kwargs.get("garment", None) inputs = {} @@ -67,6 +76,10 @@ class imageInferenceInputs: inputs["image"] = rwUtils.convertTensor2IMG(image) if mask is not None: inputs["mask"] = rwUtils.convertTensor2IMG(mask) + if person is not None: + inputs["person"] = rwUtils.convertTensor2IMG(person) + if garment is not None: + inputs["garment"] = rwUtils.convertTensor2IMG(garment) references = self._collectReferences(kwargs) if len(references) > 0: diff --git a/workflows/Runware_Image_Inference_VTO.json b/workflows/Runware_Image_Inference_VTO.json new file mode 100644 index 0000000..316ff4b --- /dev/null +++ b/workflows/Runware_Image_Inference_VTO.json @@ -0,0 +1 @@ +{"id":"3655737e-74ea-4ca7-b104-c3cea32f6ee5","revision":0,"last_node_id":6,"last_link_id":5,"nodes":[{"id":6,"type":"Runware Save Image","pos":[726.4894147644764,72.35343419027436],"size":[270,318],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"Images","name":"Images","type":"STRING","widget":{"name":"Images"},"link":2},{"localized_name":"filenamePrefix","name":"filenamePrefix","type":"STRING","widget":{"name":"filenamePrefix"},"link":null},{"localized_name":"saveImage","name":"saveImage","type":"BOOLEAN","widget":{"name":"saveImage"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"89495cfc137c18cd1f5fca7eb52d3870822d5a65","Node name for S&R":"Runware Save Image"},"widgets_values":["","ComfyUI",true],"bgcolor":"#5345bf"},{"id":2,"type":"Runware Image Inference Inputs","pos":[-365.2299339589291,-46.32029206152259],"size":[403.740234375,1482],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"image","name":"image","shape":7,"type":"IMAGE","link":null},{"localized_name":"mask","name":"mask","shape":7,"type":"IMAGE","link":null},{"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},{"localized_name":"Reference Image 5","name":"Reference Image 5","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 6","name":"Reference Image 6","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 7","name":"Reference Image 7","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 8","name":"Reference Image 8","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 9","name":"Reference Image 9","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 10","name":"Reference Image 10","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 11","name":"Reference Image 11","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 12","name":"Reference Image 12","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 13","name":"Reference Image 13","shape":7,"type":"IMAGE","link":null},{"localized_name":"Reference Image 14","name":"Reference Image 14","shape":7,"type":"IMAGE","link":null},{"localized_name":"Super Resolution Reference Image 1","name":"Super Resolution Reference Image 1","shape":7,"type":"IMAGE","link":null},{"localized_name":"Super Resolution Reference Image 2","name":"Super Resolution Reference Image 2","shape":7,"type":"IMAGE","link":null},{"localized_name":"Super Resolution Reference Image 3","name":"Super Resolution Reference Image 3","shape":7,"type":"IMAGE","link":null},{"localized_name":"Super Resolution Reference Image 4","name":"Super Resolution Reference Image 4","shape":7,"type":"IMAGE","link":null},{"localized_name":"Super Resolution Reference Image 5","name":"Super Resolution Reference Image 5","shape":7,"type":"IMAGE","link":null},{"localized_name":"person","name":"person","shape":7,"type":"IMAGE","link":4},{"localized_name":"garment","name":"garment","shape":7,"type":"IMAGE","link":5},{"localized_name":"Reference Tag 1","name":"Reference Tag 1","shape":7,"type":"STRING","widget":{"name":"Reference Tag 1"},"link":null},{"localized_name":"Reference Type 1","name":"Reference Type 1","shape":7,"type":"STRING","widget":{"name":"Reference Type 1"},"link":null},{"localized_name":"Reference Strength 1","name":"Reference Strength 1","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 1"},"link":null},{"localized_name":"Reference Tag 2","name":"Reference Tag 2","shape":7,"type":"STRING","widget":{"name":"Reference Tag 2"},"link":null},{"localized_name":"Reference Type 2","name":"Reference Type 2","shape":7,"type":"STRING","widget":{"name":"Reference Type 2"},"link":null},{"localized_name":"Reference Strength 2","name":"Reference Strength 2","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 2"},"link":null},{"localized_name":"Reference Tag 3","name":"Reference Tag 3","shape":7,"type":"STRING","widget":{"name":"Reference Tag 3"},"link":null},{"localized_name":"Reference Type 3","name":"Reference Type 3","shape":7,"type":"STRING","widget":{"name":"Reference Type 3"},"link":null},{"localized_name":"Reference Strength 3","name":"Reference Strength 3","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 3"},"link":null},{"localized_name":"Reference Tag 4","name":"Reference Tag 4","shape":7,"type":"STRING","widget":{"name":"Reference Tag 4"},"link":null},{"localized_name":"Reference Type 4","name":"Reference Type 4","shape":7,"type":"STRING","widget":{"name":"Reference Type 4"},"link":null},{"localized_name":"Reference Strength 4","name":"Reference Strength 4","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 4"},"link":null},{"localized_name":"Reference Tag 5","name":"Reference Tag 5","shape":7,"type":"STRING","widget":{"name":"Reference Tag 5"},"link":null},{"localized_name":"Reference Type 5","name":"Reference Type 5","shape":7,"type":"STRING","widget":{"name":"Reference Type 5"},"link":null},{"localized_name":"Reference Strength 5","name":"Reference Strength 5","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 5"},"link":null},{"localized_name":"Reference Tag 6","name":"Reference Tag 6","shape":7,"type":"STRING","widget":{"name":"Reference Tag 6"},"link":null},{"localized_name":"Reference Type 6","name":"Reference Type 6","shape":7,"type":"STRING","widget":{"name":"Reference Type 6"},"link":null},{"localized_name":"Reference Strength 6","name":"Reference Strength 6","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 6"},"link":null},{"localized_name":"Reference Tag 7","name":"Reference Tag 7","shape":7,"type":"STRING","widget":{"name":"Reference Tag 7"},"link":null},{"localized_name":"Reference Type 7","name":"Reference Type 7","shape":7,"type":"STRING","widget":{"name":"Reference Type 7"},"link":null},{"localized_name":"Reference Strength 7","name":"Reference Strength 7","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 7"},"link":null},{"localized_name":"Reference Tag 8","name":"Reference Tag 8","shape":7,"type":"STRING","widget":{"name":"Reference Tag 8"},"link":null},{"localized_name":"Reference Type 8","name":"Reference Type 8","shape":7,"type":"STRING","widget":{"name":"Reference Type 8"},"link":null},{"localized_name":"Reference Strength 8","name":"Reference Strength 8","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 8"},"link":null},{"localized_name":"Reference Tag 9","name":"Reference Tag 9","shape":7,"type":"STRING","widget":{"name":"Reference Tag 9"},"link":null},{"localized_name":"Reference Type 9","name":"Reference Type 9","shape":7,"type":"STRING","widget":{"name":"Reference Type 9"},"link":null},{"localized_name":"Reference Strength 9","name":"Reference Strength 9","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 9"},"link":null},{"localized_name":"Reference Tag 10","name":"Reference Tag 10","shape":7,"type":"STRING","widget":{"name":"Reference Tag 10"},"link":null},{"localized_name":"Reference Type 10","name":"Reference Type 10","shape":7,"type":"STRING","widget":{"name":"Reference Type 10"},"link":null},{"localized_name":"Reference Strength 10","name":"Reference Strength 10","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 10"},"link":null},{"localized_name":"Reference Tag 11","name":"Reference Tag 11","shape":7,"type":"STRING","widget":{"name":"Reference Tag 11"},"link":null},{"localized_name":"Reference Type 11","name":"Reference Type 11","shape":7,"type":"STRING","widget":{"name":"Reference Type 11"},"link":null},{"localized_name":"Reference Strength 11","name":"Reference Strength 11","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 11"},"link":null},{"localized_name":"Reference Tag 12","name":"Reference Tag 12","shape":7,"type":"STRING","widget":{"name":"Reference Tag 12"},"link":null},{"localized_name":"Reference Type 12","name":"Reference Type 12","shape":7,"type":"STRING","widget":{"name":"Reference Type 12"},"link":null},{"localized_name":"Reference Strength 12","name":"Reference Strength 12","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 12"},"link":null},{"localized_name":"Reference Tag 13","name":"Reference Tag 13","shape":7,"type":"STRING","widget":{"name":"Reference Tag 13"},"link":null},{"localized_name":"Reference Type 13","name":"Reference Type 13","shape":7,"type":"STRING","widget":{"name":"Reference Type 13"},"link":null},{"localized_name":"Reference Strength 13","name":"Reference Strength 13","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 13"},"link":null},{"localized_name":"Reference Tag 14","name":"Reference Tag 14","shape":7,"type":"STRING","widget":{"name":"Reference Tag 14"},"link":null},{"localized_name":"Reference Type 14","name":"Reference Type 14","shape":7,"type":"STRING","widget":{"name":"Reference Type 14"},"link":null},{"localized_name":"Reference Strength 14","name":"Reference Strength 14","shape":7,"type":"FLOAT","widget":{"name":"Reference Strength 14"},"link":null}],"outputs":[{"localized_name":"Inference Inputs","name":"Inference Inputs","type":"RUNWAREIMAGEINFERENCEINPUTS","links":[3]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"89495cfc137c18cd1f5fca7eb52d3870822d5a65","Node name for S&R":"Runware Image Inference Inputs"},"widgets_values":["","",0,"","",0,"","",0,"","",0,"","",0,"","",0,"","",0,"","",0,"","",0,"","",0,"","",0,"","",0,"","",0,"","",0],"bgcolor":"#5345bf"},{"id":4,"type":"LoadImage","pos":[-991.1887304210379,304.8989870658721],"size":[282.798828125,314.00000000000006],"flags":{},"order":0,"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":[4]},{"localized_name":"MASK","name":"MASK","type":"MASK","links":null}],"properties":{"cnr_id":"comfy-core","ver":"0.22.0","Node name for S&R":"LoadImage"},"widgets_values":["1fe8b9d2-a586-49fd-bd74-94dad01f9141.jpg","image"]},{"id":5,"type":"LoadImage","pos":[-943.0316219425166,698.9850374938297],"size":[282.798828125,314.00000000000006],"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":[5]},{"localized_name":"MASK","name":"MASK","type":"MASK","links":null}],"properties":{"cnr_id":"comfy-core","ver":"0.22.0","Node name for S&R":"LoadImage"},"widgets_values":["d2e78e0c-53b0-413b-939b-541375cfa1ec.jpg","image"]},{"id":3,"type":"Runware Model Search","pos":[-773.691111015741,8.450735327300883],"size":[272.111328125,154],"flags":{},"order":2,"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":[1]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"89495cfc137c18cd1f5fca7eb52d3870822d5a65","Node name for S&R":"Runware Model Search"},"widgets_values":["bfl:flux@vto","All","Base Model","bfl:flux@vto (FLUX Virtual Try-On 1.0)",true],"bgcolor":"#5345bf"},{"id":1,"type":"Runware Image Inference","pos":[86.26102712585534,-54.459817683082285],"size":[400,1130],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREMODEL","link":1},{"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":3},{"localized_name":"providerSettings","name":"providerSettings","shape":7,"type":"RUNWAREPROVIDERSETTINGS","link":null},{"localized_name":"safetyInputs","name":"safetyInputs","shape":7,"type":"RUNWARESAFETYINPUTS","link":null},{"localized_name":"settings","name":"settings","shape":7,"type":"RUNWARESETTINGS","link":null},{"localized_name":"ultralytics","name":"ultralytics","shape":7,"type":"RUNWAREULTRALYTICSINPUTS","link":null},{"localized_name":"advancedFeatures","name":"advancedFeatures","shape":7,"type":"RUNWAREIMAGEINFERENCEADVANCEDFEATURES","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":"useResolution","name":"useResolution","type":"BOOLEAN","widget":{"name":"useResolution"},"link":null},{"localized_name":"resolution","name":"resolution","type":"COMBO","widget":{"name":"resolution"},"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},{"localized_name":"acceleration","name":"acceleration","type":"COMBO","widget":{"name":"acceleration"},"link":null},{"localized_name":"outputQuality","name":"outputQuality","type":"INT","widget":{"name":"outputQuality"},"link":null},{"localized_name":"useUpscaleFactor","name":"useUpscaleFactor","type":"BOOLEAN","widget":{"name":"useUpscaleFactor"},"link":null},{"localized_name":"upscaleFactor","name":"upscaleFactor","type":"COMBO","widget":{"name":"upscaleFactor"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"STRING","links":[2]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"89495cfc137c18cd1f5fca7eb52d3870822d5a65","Node name for S&R":"Runware Image Inference"},"widgets_values":["A handsome young man wearing the provided garment naturally and realistically, full upper body portrait, centered composition, photorealistic skin texture, realistic fabric draping and fit, modern fashion editorial style, soft studio lighting, clean background, natural pose, cinematic lighting, highly detailed, sharp focus, professional fashion photography, realistic proportions, high-quality composition","",false,"Disabled","None",512,512,false,"1k",false,4,false,"Default",false,6.5,false,1378814689,"randomize",false,0,0.8,false,32,"WEBP",1,"none",95,false,2],"bgcolor":"#5345bf"}],"links":[[1,3,0,1,0,"RUNWAREMODEL"],[2,1,0,6,0,"STRING"],[3,2,0,1,12,"RUNWAREIMAGEINFERENCEINPUTS"],[4,4,0,2,21,"IMAGE"],[5,5,0,2,22,"IMAGE"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.505529313703492,"offset":[1286.8312326450907,220.27112610139724]}},"version":0.4} \ No newline at end of file