From c7171c4d120d1ccc6c2e8d795e72631cab2af9db Mon Sep 17 00:00:00 2001 From: Jack Date: Sat, 26 Apr 2025 06:30:51 +0300 Subject: [PATCH] Add New workflows + Add juggernaut flux models + Add support for deepCache and TeaCache + Add Multi Inference --- __init__.py | 9 ++- clientlibs/types.js | 15 ++++ modules/bgremoval.py | 2 +- modules/controlNetPreprocessor.py | 2 +- modules/deepCache.py | 45 +++++++++++ modules/imageInference.py | 25 +++++- modules/modelSearch.py | 2 + modules/multiInference.py | 108 +++++++++++++++++++++++++ modules/photoMaker.py | 2 +- modules/teaCache.py | 33 ++++++++ modules/upscaler.py | 2 +- modules/utils/runwareUtils.py | 2 +- workflows/Runware_Multi_Inference.json | 1 + workflows/Runware_Outpainting.json | 1 + 14 files changed, 239 insertions(+), 10 deletions(-) create mode 100644 modules/deepCache.py create mode 100644 modules/multiInference.py create mode 100644 modules/teaCache.py create mode 100644 workflows/Runware_Multi_Inference.json create mode 100644 workflows/Runware_Outpainting.json diff --git a/__init__.py b/__init__.py index e8f7c08..f71331b 100644 --- a/__init__.py +++ b/__init__.py @@ -6,6 +6,9 @@ from .modules.upscaler import upscaler from .modules.modelSearch import modelSearch from .modules.bridges import mainRoute from .modules.controlNet import controlNet +from .modules.multiInference import multiInference +from .modules.teaCache import teaCache +from .modules.deepCache import deepCache from .modules.loraSearch import loraSearch from .modules.loraCombine import loraCombine from .modules.refiner import refiner @@ -20,7 +23,7 @@ from .modules.ipAdapter import ipAdapter from .modules.ipAdapterCombine import ipAdapterCombine from .modules.vaeSearch import vaeSearch -RUNWARE_COMFYUI_VERSION = "1.0.8 Beta" +RUNWARE_COMFYUI_VERSION = "1.0.9 Beta" RESET_COLOR = "\033[0m" BLUE_COLOR = "\033[94m" @@ -38,6 +41,9 @@ NODE_CLASS_MAPPINGS = { "Runware PhotoMaker V2": photoMaker, "Runware Image Upscaler": upscaler, "Runware Model Search": modelSearch, + "Runware Multi Inference": multiInference, + "Runware TeaCache": teaCache, + "Runware DeepCache": deepCache, "Runware Lora Search": loraSearch, "Runware Embedding Search": embeddingSearch, "Runware VAE Search": vaeSearch, @@ -59,6 +65,7 @@ NODE_DISPLAY_NAME_MAPPINGS = { "Runware Lora Search": "Runware Lora", "Runware Embedding Search": "Runware Embedding", "Runware VAE Search": "Runware VAE", + "Runware Multi Inference": "Runware Multi Inference [BETA]", } WEB_DIRECTORY = "./clientlibs" diff --git a/clientlibs/types.js b/clientlibs/types.js index 430e76c..2ec2c48 100644 --- a/clientlibs/types.js +++ b/clientlibs/types.js @@ -51,6 +51,9 @@ const RUNWARE_NODE_TYPES = { OUTPAINT: "Runware Outpaint", PHOTOMAKER: "Runware PhotoMaker V2", MODELSEARCH: "Runware Model Search", + MULTIINFERENCE: "Runware Multi Inference", + TEACACHE: "Runware TeaCache", + DEEPCACHE: "Runware DeepCache", LORASEARCH: "Runware Lora Search", CONTROLNET: "Runware ControlNet", BGREMOVAL: "Runware Background Removal", @@ -88,6 +91,18 @@ const RUNWARE_NODE_PROPS = { bgColor: DEFAULT_BGCOLOR, liveSearch: true, }, + [RUNWARE_NODE_TYPES.MULTIINFERENCE]: { + bgColor: DEFAULT_BGCOLOR, + colorModeOnly: true, + }, + [RUNWARE_NODE_TYPES.TEACACHE]: { + bgColor: DEFAULT_BGCOLOR, + colorModeOnly: true, + }, + [RUNWARE_NODE_TYPES.DEEPCACHE]: { + bgColor: DEFAULT_BGCOLOR, + colorModeOnly: true, + }, [RUNWARE_NODE_TYPES.LORASEARCH]: { bgColor: DEFAULT_BGCOLOR, liveSearch: true, diff --git a/modules/bgremoval.py b/modules/bgremoval.py index 2813109..f4ab9fe 100644 --- a/modules/bgremoval.py +++ b/modules/bgremoval.py @@ -116,4 +116,4 @@ class bgremoval: genResult = rwUtils.inferenecRequest([genConfig]) images = rwUtils.convertImageB64List(genResult) - return images \ No newline at end of file + return (images, ) \ No newline at end of file diff --git a/modules/controlNetPreprocessor.py b/modules/controlNetPreprocessor.py index 35e9f3d..3338ac9 100644 --- a/modules/controlNetPreprocessor.py +++ b/modules/controlNetPreprocessor.py @@ -116,4 +116,4 @@ class controlNetPreprocessor: genResult = rwUtils.inferenecRequest(genConfig) images = rwUtils.convertImageB64List(genResult) - return images \ No newline at end of file + return (images, ) \ No newline at end of file diff --git a/modules/deepCache.py b/modules/deepCache.py new file mode 100644 index 0000000..a002548 --- /dev/null +++ b/modules/deepCache.py @@ -0,0 +1,45 @@ +class deepCache: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "DeepCache Interval": ( + "INT", + { + "tooltip": "Represents the frequency of feature caching, specified as the number of steps between each cache operation.\n\nA larger interval value will make inference faster but may impact quality. A smaller interval prioritizes quality over speed.", + "default": 3, + "min": 1, + "max": 5, + "step": 1, + }, + ), + "DeepCache BranchId": ( + "INT", + { + "tooltip": "Determines which branch of the network (ordered from the shallowest to the deepest layer) is responsible for executing the caching processes.\n\nLower branch IDs (e.g., 0) result in more aggressive caching for faster generation, while higher branch IDs produce more conservative caching with potentially higher quality results.", + "default": 0, + "min": 0, + "max": 5, + "step": 1, + }, + ), + }, + } + + DESCRIPTION = "Can Be connected to Runware Inference to accelerate image generation by reusing past computations.\n\nDeepCache feature, which speeds up diffusion-based image generation by caching internal feature maps from the neural network.\n\nDeepCache can provide significant performance improvements for high-throughput scenarios or when generating multiple similar images." + FUNCTION = "deepCache" + RETURN_TYPES = ("RUNWAREACCELERATOR",) + RETURN_NAMES = ("Runware Accelerator",) + CATEGORY = "Runware" + + def deepCache(self, **kwargs): + deepCacheInterval = kwargs.get("DeepCache Interval") + deepCacheBranchId = kwargs.get("DeepCache BranchId") + + return ( + { + "deepCache": True, + # "deepCacheInterval": deepCacheInterval, + "deepCacheBranchId": deepCacheBranchId, + }, + ) diff --git a/modules/imageInference.py b/modules/imageInference.py index b373867..86d6d14 100644 --- a/modules/imageInference.py +++ b/modules/imageInference.py @@ -19,6 +19,12 @@ class txt2img: "placeholder": "Negative Prompt: a text instruction to guide the model on generating the image. It is usually a sentence or a paragraph that provides negative guidance for the task. This parameter helps to avoid certain undesired results.", "tooltip": "Negative Prompt: a text instruction to guide the model on generating the image." }), + "Multi Inference Mode": ("BOOLEAN", { + "tooltip": "If Enabled the node will skip the image generation process and will only return the Runware Task Object to be used in the Multi Inference Node.", + "default": False, + "label_on": "Enabled", + "label_off": "Disabled", + }), "Prompt Weighting": (["Disabled", "sdEmbeds", "Compel"], { "default": "Disabled", "tooltip": "Prompt weighting allows you to adjust how strongly different parts of your prompt influence the generated image.\n\nChoose between \"compel\" notation with advanced weighting operations or \"sdEmbeds\" for simple emphasis adjustments.\n\nCompel Example: \"small+ dog, pixar style\"\n\nsdEmbeds Example: \"(small:2.5) dog, pixar style\"", @@ -101,6 +107,9 @@ class txt2img: }), }, "optional": { + "Accelerator": ("RUNWAREACCELERATOR", { + "tooltip": "Connect a Runware Accelerator Node (TeaCache, DeepCache) to speed up the image generation process.", + }), "Lora": ("RUNWARELORA", { "tooltip": "Connect a Runware Lora From Lora Search Node Or Lora Combine For Multiple Lora's Together.", }), @@ -143,15 +152,18 @@ class txt2img: DESCRIPTION = "Generates Images Lightning Fast With Runware Image Inference Sonic Engine." FUNCTION = "generateImage" - RETURN_TYPES = ("IMAGE",) + RETURN_TYPES = ("IMAGE", "RUNWARETASK") + RETURN_NAMES = ("IMAGE", "RW-Task") CATEGORY = "Runware" def generateImage(self, **kwargs): runwareModel = kwargs.get("Model") positivePrompt = kwargs.get("positivePrompt") negativePrompt = kwargs.get("negativePrompt", None) + multiInferenceMode = kwargs.get("Multi Inference Mode", False) promptWeighting = kwargs.get("Prompt Weighting", "Disabled") runwareControlNet = kwargs.get("ControlNet", None) + runwareAccelerator = kwargs.get("Accelerator", None) runwareLora = kwargs.get("Lora", None) runwareOutpainting = kwargs.get("Outpainting", None) runwareIPAdapters = kwargs.get("IPAdapters", None) @@ -205,6 +217,8 @@ class txt2img: genConfig[0]["promptWeighting"] = "sdEmbeds" else: genConfig[0]["promptWeighting"] = "compel" + if(runwareAccelerator is not None): + genConfig[0]["acceleratorOptions"] = runwareAccelerator if (runwareLora is not None): if (isinstance(runwareLora, list)): genConfig[0]["lora"] = runwareLora @@ -238,6 +252,9 @@ class txt2img: if (enableMaskMargin): genConfig[0]["maskMargin"] = maskImageMargin - genResult = rwUtils.inferenecRequest(genConfig) - images = rwUtils.convertImageB64List(genResult) - return images + if (multiInferenceMode): + return (None, genConfig) + else: + genResult = rwUtils.inferenecRequest(genConfig) + images = rwUtils.convertImageB64List(genResult) + return (images, None) diff --git a/modules/modelSearch.py b/modules/modelSearch.py index 48f7b82..d7286e9 100644 --- a/modules/modelSearch.py +++ b/modules/modelSearch.py @@ -33,6 +33,8 @@ class modelSearch: "default": "Base Model", }), "ModelList": ([ + "rundiffusion:110@101 (Juggernaut Lightning Flux by RunDiffusion)", + "rundiffusion:130@100 (Juggernaut Pro Flux by RunDiffusion)", "runware:100@1 (Flux Schnell)", "runware:101@1 (Flux Dev)", "runware:5@1 (SD3)", diff --git a/modules/multiInference.py b/modules/multiInference.py new file mode 100644 index 0000000..a154031 --- /dev/null +++ b/modules/multiInference.py @@ -0,0 +1,108 @@ +import asyncio +from .utils import runwareUtils as rwUtils +from comfy_execution.graph import ExecutionBlocker + + +class multiInference: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "Task 1": ( + "RUNWARETASK", + { + "tooltip": "Connect a Runware Task From Any Inference Node.", + }, + ), + }, + "optional": { + "Task 2": ( + "RUNWARETASK", + { + "tooltip": "Connect a Runware Task From Any Inference Node.", + }, + ), + "Task 3": ( + "RUNWARETASK", + { + "tooltip": "Connect a Runware Task From Any Inference Node.", + }, + ), + "Task 4": ( + "RUNWARETASK", + { + "tooltip": "Connect a Runware Task From Any Inference Node.", + }, + ), + }, + } + + DESCRIPTION = "Allows you to Run Multiple Inference Tasks in Parallel." + FUNCTION = "multiInference" + RETURN_TYPES = ("IMAGE", "IMAGE", "IMAGE", "IMAGE") + RETURN_NAMES = ("Result 1", "Result 2", "Result 3", "Result 4") + CATEGORY = "Runware" + + def multiInference(self, **kwargs): + tasksData = [kwargs.get(f"Task {i}", None) for i in range(1, 5)] + validTasks = [task for task in tasksData if task is not None] + + if not validTasks: + raise Exception("Error: No valid tasks provided for Multi Inference!") + + taskIncidents = {} + + async def runInference(taskData, taskIndex, oindex): + try: + print(f"[Debugging] Task {oindex + 1} UUID => {taskData[0]['taskUUID']}") + loop = asyncio.get_running_loop() + result = await loop.run_in_executor( + None, rwUtils.inferenecRequest, taskData + ) + images = rwUtils.convertImageB64List(result) + return images + except Exception as e: + print(f"\n---- Runware Multi Inference Task {oindex + 1} Failed ----") + print(f"Task-Type: {taskData[0]['taskType']}") + print(f"Task-UUID: {taskData[0]['taskUUID']}") + print(f"{e}") + print(f"-------------------\n") + taskIncidents[taskIndex] = e + return ExecutionBlocker(None) + + async def main(): + coroutines = [] + valid_indices = [idx for idx, t in enumerate(tasksData) if t is not None] + for i, config in enumerate(validTasks): + original_index = valid_indices[i] + coroutines.append(runInference(config, i, original_index)) + results = await asyncio.gather(*coroutines, return_exceptions=False) + return results + + try: + loop = asyncio.get_event_loop() + except RuntimeError: + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + + finalResults = loop.run_until_complete(main()) + + optResult = [ExecutionBlocker(None)] * 4 + rindex = 0 + workingTasks = 0 + + for i, task_config in enumerate(tasksData): + if task_config is not None: + result = finalResults[rindex] + if result is not None and not isinstance(result, ExecutionBlocker): + workingTasks += 1 + optResult[i] = result + rindex += 1 + + if workingTasks == 0 and len(validTasks) > 0: + firstError = min(taskIncidents.keys()) + raise Exception( + f"Error in Task {firstError + 1} => {taskIncidents[firstError]}" + ) + + return tuple(optResult) diff --git a/modules/photoMaker.py b/modules/photoMaker.py index 144689e..f943b8f 100644 --- a/modules/photoMaker.py +++ b/modules/photoMaker.py @@ -187,4 +187,4 @@ class photoMaker: genResult = rwUtils.inferenecRequest(genConfig) images = rwUtils.convertImageB64List(genResult) - return images + return (images, ) diff --git a/modules/teaCache.py b/modules/teaCache.py new file mode 100644 index 0000000..c8b6185 --- /dev/null +++ b/modules/teaCache.py @@ -0,0 +1,33 @@ +class teaCache: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "TeaCache Distance": ( + "FLOAT", + { + "tooltip": "Controls the aggressiveness of the TeaCache feature.\n\nValues range from 0.0 (most conservative) to 1.0 (most aggressive).\n\nLower values prioritize quality by being more selective about which computations to reuse, while higher values prioritize speed by reusing more computations.", + "default": 0.5, + "min": 0.0, + "max": 1.0, + "step": 0.1, + }, + ), + }, + } + + DESCRIPTION = "Can Be connected to Runware Inference to accelerate image generation by reusing past computations.\n\nTeaCache is specifically designed for transformer-based models such as Flux and SD3, and does not work with UNet models like SDXL or SD1.5." + FUNCTION = "teaCache" + RETURN_TYPES = ("RUNWAREACCELERATOR",) + RETURN_NAMES = ("Runware Accelerator",) + CATEGORY = "Runware" + + def teaCache(self, **kwargs): + teaCacheDistance = kwargs.get("TeaCache Distance") + + return ( + { + "teaCache": True, + "teaCacheDistance": round(teaCacheDistance, 2), + }, + ) diff --git a/modules/upscaler.py b/modules/upscaler.py index 78f9d9f..a29f959 100644 --- a/modules/upscaler.py +++ b/modules/upscaler.py @@ -40,4 +40,4 @@ class upscaler: genResult = rwUtils.inferenecRequest(genConfig) images = rwUtils.convertImageB64List(genResult) - return images \ No newline at end of file + return (images, ) \ No newline at end of file diff --git a/modules/utils/runwareUtils.py b/modules/utils/runwareUtils.py index a3bfb22..da39ae9 100644 --- a/modules/utils/runwareUtils.py +++ b/modules/utils/runwareUtils.py @@ -411,4 +411,4 @@ def convertImageB64List(imageDataObject): generatedImage = convertIMG2Tensor(generatedImage) images += (generatedImage,) images = torch.stack(images, dim=0) - return (images,) + return images diff --git a/workflows/Runware_Multi_Inference.json b/workflows/Runware_Multi_Inference.json new file mode 100644 index 0000000..38cb989 --- /dev/null +++ b/workflows/Runware_Multi_Inference.json @@ -0,0 +1 @@ +{"id":"33be6027-1bdd-47dc-9bce-9a9b667aff69","revision":0,"last_node_id":54,"last_link_id":78,"nodes":[{"id":14,"type":"Runware Image Inference","pos":[63.60523986816406,-263.4772033691406],"size":[400,702],"flags":{"collapsed":true},"order":5,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREMODEL","link":13},{"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":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"link":41},{"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":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"cfgScale","name":"cfgScale","type":"FLOAT","widget":{"name":"cfgScale"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"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":"batchSize","name":"batchSize","type":"INT","widget":{"name":"batchSize"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":[42]}],"properties":{"Node name for S&R":"Runware Image Inference"},"widgets_values":["a very cute cat in studio ghibli style, big eyes, details, 4k, anime, cinematic scene, neon lights","",true,"Disabled","Square (512x512)",512,512,4,"DPM++ 2M SDE",3,1007228176077577,"randomize",0,0.8,false,32,1],"bgcolor":"#5345bf"},{"id":48,"type":"Runware Image Inference","pos":[67.12537384033203,-116.10993957519531],"size":[400,702],"flags":{"collapsed":true},"order":6,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREMODEL","link":72},{"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":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"link":69},{"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":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"cfgScale","name":"cfgScale","type":"FLOAT","widget":{"name":"cfgScale"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"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":"batchSize","name":"batchSize","type":"INT","widget":{"name":"batchSize"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":[75]}],"properties":{"Node name for S&R":"Runware Image Inference"},"widgets_values":["a cool dog looks very happy, snow, cozy","",true,"Disabled","Square (512x512)",512,512,4,"DPM++ 2M SDE",3,814536205716626,"randomize",0,0.8,false,32,1],"bgcolor":"#5345bf"},{"id":50,"type":"Runware Image Inference","pos":[69.54536437988281,25.459915161132812],"size":[400,702],"flags":{"collapsed":true},"order":7,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREMODEL","link":73},{"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":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"link":70},{"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":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"cfgScale","name":"cfgScale","type":"FLOAT","widget":{"name":"cfgScale"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"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":"batchSize","name":"batchSize","type":"INT","widget":{"name":"batchSize"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":[76]}],"properties":{"Node name for S&R":"Runware Image Inference"},"widgets_values":["a fish inside a fish tank, realistic, 4k, detailed","",true,"Disabled","Square (512x512)",512,512,4,"DPM++ 2M SDE",3,376518581510528,"randomize",0,0.8,false,32,1],"bgcolor":"#5345bf"},{"id":52,"type":"Runware Image Inference","pos":[65.91541290283203,169.4499053955078],"size":[400,702],"flags":{"collapsed":true},"order":8,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREMODEL","link":74},{"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":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"link":71},{"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":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"cfgScale","name":"cfgScale","type":"FLOAT","widget":{"name":"cfgScale"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"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":"batchSize","name":"batchSize","type":"INT","widget":{"name":"batchSize"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":[77]}],"properties":{"Node name for S&R":"Runware Image Inference"},"widgets_values":["Closeup body, A hyper-stylistic,, extremely detailed image is a breathtaking painting created from a combination of smeared black and gold metallic colors. The silhouette of a young woman is captured in streaks as if they were moving rapidly in the same direction. The black paint is applied in bold, dynamic strokes, creating a sense of energy and movement that contrasts beautifully with the gold accents. Gold paint is used to highlight the female silhouette, adding a sense of depth and dimension to the image. The overall effect is an exciting, surreal dynamism, as if the viewer has captured a fleeting moment in time. Every detail of the image is meticulously detailed, from the subtle, swirling patterns of the gold paint to the complex, textural patterns of the black paint. The contrasts between light and dark, color and texture create a sense of tension and energy that draws the viewer in, inviting them to explore the kinetic world of the painting. the highest quality, intricate detail, visually stunning, masterpiece, black and gold street backdrop","",true,"Disabled","Square (512x512)",512,512,4,"DPM++ 2M SDE",3,1048781623064936,"randomize",0,0.8,false,32,1],"bgcolor":"#5345bf"},{"id":29,"type":"PrimitiveNode","pos":[-313.58447265625,-287.6775817871094],"size":[295.9100036621094,88],"flags":{},"order":0,"mode":0,"inputs":[],"outputs":[{"name":"STRING","type":"STRING","widget":{"name":"positivePrompt"},"links":[41]}],"title":"positivePrompt","properties":{"Run widget replace on values":false},"widgets_values":["a very cute cat in studio ghibli style, big eyes, details, 4k, anime, cinematic scene, neon lights"]},{"id":49,"type":"PrimitiveNode","pos":[-313.694580078125,-148.7803497314453],"size":[294.70001220703125,88],"flags":{},"order":1,"mode":0,"inputs":[],"outputs":[{"name":"STRING","type":"STRING","widget":{"name":"positivePrompt"},"links":[69]}],"title":"positivePrompt","properties":{"Run widget replace on values":false},"widgets_values":["a cool dog looks very happy, snow, cozy"]},{"id":51,"type":"PrimitiveNode","pos":[-312.48443603515625,-7.210506439208984],"size":[293.489990234375,88],"flags":{},"order":2,"mode":0,"inputs":[],"outputs":[{"name":"STRING","type":"STRING","widget":{"name":"positivePrompt"},"links":[70]}],"title":"positivePrompt","properties":{"Run widget replace on values":false},"widgets_values":["a fish inside a fish tank, realistic, 4k, detailed"]},{"id":54,"type":"PreviewImage","pos":[787.405029296875,-20.520469665527344],"size":[338.6278991699219,354.0370178222656],"flags":{},"order":13,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":78}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":16,"type":"Runware Multi Inference","pos":[43.991127014160156,-430.8931579589844],"size":[289.79998779296875,86],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"Task 1","name":"Task 1","type":"RUNWARETASK","link":42},{"localized_name":"Task 2","name":"Task 2","shape":7,"type":"RUNWARETASK","link":75},{"localized_name":"Task 3","name":"Task 3","shape":7,"type":"RUNWARETASK","link":76},{"localized_name":"Task 4","name":"Task 4","shape":7,"type":"RUNWARETASK","link":77}],"outputs":[{"localized_name":"Result 1","name":"Result 1","type":"IMAGE","links":[43]},{"localized_name":"Result 2","name":"Result 2","type":"IMAGE","links":[50]},{"localized_name":"Result 3","name":"Result 3","type":"IMAGE","links":[51]},{"localized_name":"Result 4","name":"Result 4","type":"IMAGE","links":[78]}],"properties":{"Node name for S&R":"Runware Multi Inference"},"widgets_values":[],"bgcolor":"#5345bf"},{"id":24,"type":"PreviewImage","pos":[384.4295959472656,-428.31951904296875],"size":[338.6278991699219,350.4070129394531],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":43}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":34,"type":"PreviewImage","pos":[784.937744140625,-427.1095886230469],"size":[338.6278991699219,354.0370178222656],"flags":{},"order":11,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":50}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":35,"type":"PreviewImage","pos":[385.6392822265625,-24.179574966430664],"size":[338.6278991699219,354.0370178222656],"flags":{},"order":12,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":51}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":53,"type":"PrimitiveNode","pos":[-308.8545837402344,135.56948852539062],"size":[291.07000732421875,88],"flags":{},"order":4,"mode":0,"inputs":[],"outputs":[{"name":"STRING","type":"STRING","widget":{"name":"positivePrompt"},"links":[71]}],"title":"positivePrompt","properties":{"Run widget replace on values":false},"widgets_values":["Closeup body, A hyper-stylistic,, extremely detailed image is a breathtaking painting created from a combination of smeared black and gold metallic colors. The silhouette of a young woman is captured in streaks as if they were moving rapidly in the same direction. The black paint is applied in bold, dynamic strokes, creating a sense of energy and movement that contrasts beautifully with the gold accents. Gold paint is used to highlight the female silhouette, adding a sense of depth and dimension to the image. The overall effect is an exciting, surreal dynamism, as if the viewer has captured a fleeting moment in time. Every detail of the image is meticulously detailed, from the subtle, swirling patterns of the gold paint to the complex, textural patterns of the black paint. The contrasts between light and dark, color and texture create a sense of tension and energy that draws the viewer in, inviting them to explore the kinetic world of the painting. the highest quality, intricate detail, visually stunning, masterpiece, black and gold street backdrop"]},{"id":3,"type":"Runware Model Search","pos":[-345.5522155761719,-487.4124450683594],"size":[339.04998779296875,154],"flags":{"collapsed":false},"order":3,"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":[13,72,73,74]}],"properties":{"Node name for S&R":"Runware Model Search"},"widgets_values":["","All","Base Model","runware:100@1 (Flux Schnell)",false],"bgcolor":"#5345bf"}],"links":[[13,3,0,14,0,"RUNWAREMODEL"],[41,29,0,14,11,"STRING"],[42,14,1,16,0,"RUNWARETASK"],[43,16,0,24,0,"IMAGE"],[50,16,1,34,0,"IMAGE"],[51,16,2,35,0,"IMAGE"],[69,49,0,48,11,"STRING"],[70,51,0,50,11,"STRING"],[71,53,0,52,11,"STRING"],[72,3,0,48,0,"RUNWAREMODEL"],[73,3,0,50,0,"RUNWAREMODEL"],[74,3,0,52,0,"RUNWAREMODEL"],[75,48,1,16,1,"RUNWARETASK"],[76,50,1,16,2,"RUNWARETASK"],[77,52,1,16,3,"RUNWARETASK"],[78,16,3,54,0,"IMAGE"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.8264462809917354,"offset":[779.5444598246156,604.9504716404363]},"frontendVersion":"1.17.11"},"version":0.4} \ No newline at end of file diff --git a/workflows/Runware_Outpainting.json b/workflows/Runware_Outpainting.json new file mode 100644 index 0000000..a00ef28 --- /dev/null +++ b/workflows/Runware_Outpainting.json @@ -0,0 +1 @@ +{"id":"64d5095f-01d6-48a2-b4b2-a936b07f976e","revision":0,"last_node_id":8,"last_link_id":4,"nodes":[{"id":1,"type":"LoadImage","pos":[-307.6441955566406,-225.01039123535156],"size":[334.1299743652344,422.8999938964844],"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":[3]},{"localized_name":"MASK","name":"MASK","type":"MASK","links":null}],"properties":{"Node name for S&R":"LoadImage"},"widgets_values":["21sdfgas.jpg","image"]},{"id":2,"type":"Runware Image Inference","pos":[67.45526885986328,-502.1003112792969],"size":[400,702],"flags":{},"order":3,"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":2},{"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":3},{"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":"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":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"cfgScale","name":"cfgScale","type":"FLOAT","widget":{"name":"cfgScale"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"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":"batchSize","name":"batchSize","type":"INT","widget":{"name":"batchSize"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[4]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":null}],"properties":{"Node name for S&R":"Runware Image Inference"},"widgets_values":["__blank__","",false,"Disabled","Custom",1536,1536,30,"Default",3,779910374698910,"randomize",0,0.8,false,32,1],"bgcolor":"#5345bf"},{"id":7,"type":"PreviewImage","pos":[500.6356201171875,-499.6804504394531],"size":[696.1900024414062,697.1900634765625],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":4}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":4,"type":"Runware Outpaint","pos":[-299.12445068359375,-431.9206848144531],"size":[315,154],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"Top","name":"Top","type":"INT","widget":{"name":"Top"},"link":null},{"localized_name":"Right","name":"Right","type":"INT","widget":{"name":"Right"},"link":null},{"localized_name":"Bottom","name":"Bottom","type":"INT","widget":{"name":"Bottom"},"link":null},{"localized_name":"Left","name":"Left","type":"INT","widget":{"name":"Left"},"link":null},{"localized_name":"Blur","name":"Blur","type":"INT","widget":{"name":"Blur"},"link":null}],"outputs":[{"localized_name":"Outpaint Settings","name":"Outpaint Settings","type":"RUNWAREOUTPAINT","links":[2]}],"properties":{"Node name for S&R":"Runware Outpaint"},"widgets_values":[256,256,256,256,0],"bgcolor":"#5345bf"},{"id":5,"type":"Runware Model Search","pos":[-289.864501953125,-477.9004211425781],"size":[342.6799621582031,154],"flags":{"collapsed":true},"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":[1]}],"properties":{"Node name for S&R":"Runware Model Search"},"widgets_values":["","FLUX.1-Dev","Inpainting Model","runware:102@1 (FLUX Dev Fill 1)",false],"bgcolor":"#5345bf"}],"links":[[1,5,0,2,0,"RUNWAREMODEL"],[2,4,0,2,3,"RUNWAREOUTPAINT"],[3,1,0,2,7,"IMAGE"],[4,2,0,7,0,"IMAGE"]],"groups":[],"config":{},"extra":{"ds":{"scale":1,"offset":[512.6044598246152,589.6904716404363]},"frontendVersion":"1.17.11"},"version":0.4} \ No newline at end of file