From 3d7c41a15a783da5ff38b47ea1dc644c8cc68133 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sun, 23 Nov 2025 20:11:25 +0000 Subject: [PATCH 1/9] WAI-4234 --- __init__.py | 14 + nodes/__init__.py | 8 +- nodes/generate_image_node_v2.py | 5 + nodes/generate_structured_prompt_node_v2.py | 134 ++++++ nodes/refine_image_node_v2.py | 9 +- workflows/LIGHT_Workflow.json | 497 ++++++++++++++++++++ 6 files changed, 664 insertions(+), 3 deletions(-) create mode 100644 nodes/generate_structured_prompt_node_v2.py create mode 100644 workflows/LIGHT_Workflow.json diff --git a/__init__.py b/__init__.py index 0a6e81d..c5a151c 100644 --- a/__init__.py +++ b/__init__.py @@ -15,7 +15,11 @@ from .nodes import ( TailoredPortraitNode, ReimagineNode, GenerateImageNodeV2, + GenerateImageLiteNodeV2, RefineImageNodeV2, + RefineImageLiteNodeV2, + GenerateStructuredPromptNodeV2, + GenerateStructuredPromptLiteNodeV2, ShotByTextAutomaticNode, ShotByImageManualPaddingNode, ShotByImageAutomaticAspectRatioNode, @@ -58,7 +62,11 @@ NODE_CLASS_MAPPINGS = { "ReimagineNode": ReimagineNode, "AttributionByImageNode": AttributionByImageNode, "GenerateImageNodeV2": GenerateImageNodeV2, + "GenerateImageLiteNodeV2": GenerateImageLiteNodeV2, "RefineImageNodeV2": RefineImageNodeV2, + "RefineImageLiteNodeV2": RefineImageLiteNodeV2, + "GenerateStructuredPromptNodeV2": GenerateStructuredPromptNodeV2, + "GenerateStructuredPromptLiteNodeV2": GenerateStructuredPromptLiteNodeV2, } # Map the node display name to the one shown in the ComfyUI node interface NODE_DISPLAY_NAME_MAPPINGS = { @@ -89,5 +97,11 @@ NODE_DISPLAY_NAME_MAPPINGS = { "ReimagineNode": "Bria Reimagine", "AttributionByImageNode": "Attribution By Image Node", "GenerateImageNodeV2": "Generate Image", + "GenerateImageLiteNodeV2": "Generate Image - lite", "RefineImageNodeV2": "Refine and Regenerate Image", + "RefineImageLiteNodeV2": "Refine Image - lite", + "GenerateStructuredPromptNodeV2": "Generate Structured Prompt", + "GenerateStructuredPromptLiteNodeV2": "Generate Structured Prompt - lite", } + + diff --git a/nodes/__init__.py b/nodes/__init__.py index 5350502..0ef7848 100644 --- a/nodes/__init__.py +++ b/nodes/__init__.py @@ -11,8 +11,12 @@ from .text_2_image_base_node import Text2ImageBaseNode from .text_2_image_fast_node import Text2ImageFastNode from .text_2_image_hd_node import Text2ImageHDNode from .reimagine_node import ReimagineNode -from .generate_image_node_v2 import GenerateImageNodeV2 -from .refine_image_node_v2 import RefineImageNodeV2 +from .generate_image_node_v2 import GenerateImageNodeV2, GenerateImageLiteNodeV2 +from .refine_image_node_v2 import RefineImageNodeV2, RefineImageLiteNodeV2 +from .generate_structured_prompt_node_v2 import ( + GenerateStructuredPromptNodeV2, + GenerateStructuredPromptLiteNodeV2, +) from .shot_by_text_node import ShotByTextOriginalNode from .shot_by_text_automatic_aspect_ratio_node import ShotByTextAutomaticAspectRatioNode from .shot_by_text_automatic_node import ShotByTextAutomaticNode diff --git a/nodes/generate_image_node_v2.py b/nodes/generate_image_node_v2.py index 0606e05..0eb2616 100644 --- a/nodes/generate_image_node_v2.py +++ b/nodes/generate_image_node_v2.py @@ -141,3 +141,8 @@ class GenerateImageNodeV2(_BaseGenerateImageNodeV2): """Standard Image Generation Node""" def __init__(self): self.api_url = "https://engine.prod.bria-api.com/v2/image/generate" + +class GenerateImageLiteNodeV2(_BaseGenerateImageNodeV2): + """Lite Image Generation Node""" + def __init__(self): + self.api_url = "https://engine.prod.bria-api.com/v2/image/generate/lite " \ No newline at end of file diff --git a/nodes/generate_structured_prompt_node_v2.py b/nodes/generate_structured_prompt_node_v2.py new file mode 100644 index 0000000..ee79087 --- /dev/null +++ b/nodes/generate_structured_prompt_node_v2.py @@ -0,0 +1,134 @@ +import requests +from .common import ( + deserialize_and_get_comfy_key, + poll_status_until_completed, +) + + +class _BaseGenerateStructuredPromptNodeV2: + """Base class for structured prompt generation nodes (standard & lite).""" + + api_url = None # Each subclass must define its API endpoint + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "api_token": ("STRING", {"default": "BRIA_API_TOKEN"}), + "prompt": ("STRING",), + "structured_prompt": ("STRING",), + }, + "optional": { + "model_version": (["FIBO"], {"default": "FIBO"}), + "negative_prompt": ("STRING", {"default": ""}), + "aspect_ratio": ( + ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9"], + {"default": "1:1"}, + ), + "steps_num": ("INT", {"default": 50, "min": 20, "max": 50}), + "guidance_scale": ("INT", {"default": 5, "min": 3, "max": 5}), + "seed": ("INT", {"default": 123456}), + }, + } + + RETURN_TYPES = ("STRING", "INT") + RETURN_NAMES = ("structured_prompt", "seed") + CATEGORY = "API Nodes" + FUNCTION = "execute" + + def _validate_token(self, api_token: str): + if api_token.strip() == "" or api_token.strip() == "BRIA_API_TOKEN": + raise Exception("Please insert a valid API token.") + + def _build_payload( + self, + prompt, + model_version, + negative_prompt, + aspect_ratio, + steps_num, + guidance_scale, + seed, + structured_prompt + ): + return { + "prompt": prompt, + "model_version": model_version, + "negative_prompt": negative_prompt, + "aspect_ratio": aspect_ratio, + "steps_num": steps_num, + "guidance_scale": guidance_scale, + "seed": seed, + "structured_prompt":structured_prompt + } + + def execute( + self, + api_token, + prompt, + model_version, + negative_prompt, + aspect_ratio, + steps_num, + guidance_scale, + seed, + structured_prompt + ): + self._validate_token(api_token) + payload = self._build_payload( + prompt, + model_version, + negative_prompt, + aspect_ratio, + steps_num, + guidance_scale, + seed, + structured_prompt + ) + api_token = deserialize_and_get_comfy_key(api_token) + + headers = {"Content-Type": "application/json", "api_token": api_token} + + try: + response = requests.post(self.api_url, json=payload, headers=headers) + + if response.status_code in (200, 202): + print( + f"Initial request successful to {self.api_url}, polling for completion..." + ) + response_dict = response.json() + status_url = response_dict.get("status_url") + request_id = response_dict.get("request_id") + + if not status_url: + raise Exception("No status_url returned from API") + + print(f"Request ID: {request_id}, Status URL: {status_url}") + + final_response = poll_status_until_completed(status_url, api_token) + + result = final_response.get("result", {}) + structured_prompt = result.get("structured_prompt", "") + used_seed = result.get("seed", seed) + + return (structured_prompt, used_seed) + + raise Exception( + f"Error: API request failed with status code {response.status_code} {response.text}" + ) + + except Exception as e: + raise Exception(f"{e}") + + +class GenerateStructuredPromptNodeV2(_BaseGenerateStructuredPromptNodeV2): + """Standard Structured Prompt Generation Node""" + def __init__(self): + self.api_url = "https://engine.prod.bria-api.com/v2/structured_prompt/generate" + + +class GenerateStructuredPromptLiteNodeV2(_BaseGenerateStructuredPromptNodeV2): + """Lite Structured Prompt Generation Node""" + def __init__(self): + self.api_url = "https://engine.prod.bria-api.com/v2/structured_prompt/generate/lite" + diff --git a/nodes/refine_image_node_v2.py b/nodes/refine_image_node_v2.py index 3128c1b..e9a6325 100644 --- a/nodes/refine_image_node_v2.py +++ b/nodes/refine_image_node_v2.py @@ -158,4 +158,11 @@ class RefineImageNodeV2(_BaseRefineImageNodeV2): """Standard Refine Image Node""" def __init__(self): self.api_url = "https://engine.prod.bria-api.com/v2/structured_prompt/generate" - self.generate_api_url = "https://engine.prod.bria-api.com/v2/image/generate" \ No newline at end of file + self.generate_api_url = "https://engine.prod.bria-api.com/v2/image/generate" + + +class RefineImageLiteNodeV2(_BaseRefineImageNodeV2): + """Lite Refine Image Node""" + def __init__(self): + self.api_url = "https://engine.prod.bria-api.com/v2/structured_prompt/generate/lite" + self.generate_api_url = "https://engine.prod.bria-api.com/v2/image/generate/lite" \ No newline at end of file diff --git a/workflows/LIGHT_Workflow.json b/workflows/LIGHT_Workflow.json new file mode 100644 index 0000000..7d0ab5e --- /dev/null +++ b/workflows/LIGHT_Workflow.json @@ -0,0 +1,497 @@ +{ + "id": "1c31a92d-1e48-46b0-b4ad-60d537260922", + "revision": 0, + "last_node_id": 17, + "last_link_id": 16, + "nodes": [ + { + "id": 1, + "type": "Note", + "pos": [ + -116.75677490234375, + 84.22367095947266 + ], + "size": [ + 210, + 88 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "If you would like to start with prompt" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2, + "type": "Note", + "pos": [ + -123.22234344482422, + 628.1995849609375 + ], + "size": [ + 210, + 88 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "If you would like to start with reference image + prompt" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 11, + "type": "GenerateImageLiteNodeV2", + "pos": [ + 184.7118682861328, + 82.85485076904297 + ], + "size": [ + 270, + 290 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "images", + "shape": 7, + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 9 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": [ + 10 + ] + }, + { + "name": "seed", + "type": "INT", + "links": [ + 11 + ] + } + ], + "properties": { + "Node name for S&R": "GenerateImageLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "FIBO", + "", + "1:1", + 50, + 5, + 123456, + "randomize" + ] + }, + { + "id": 6, + "type": "PreviewImage", + "pos": [ + 489.3982849121094, + -7.705096244812012 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 9 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 13, + "type": "RefineImageLiteNodeV2", + "pos": [ + 607.6322021484375, + 79.37891387939453 + ], + "size": [ + 270, + 314 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "structured_prompt", + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 10 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 11 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 12 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": null + }, + { + "name": "seed", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "RefineImageLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "", + "FIBO", + "", + "1:1", + 50, + 5, + 123456, + "randomize" + ] + }, + { + "id": 5, + "type": "PreviewImage", + "pos": [ + 954.7874755859375, + 46.877532958984375 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 12 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 15, + "type": "PreviewImage", + "pos": [ + 476.21209716796875, + 475.55596923828125 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 13 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 16, + "type": "RefineImageLiteNodeV2", + "pos": [ + 594.446044921875, + 562.6400756835938 + ], + "size": [ + 270, + 314 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "structured_prompt", + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 14 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 15 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 16 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": null + }, + { + "name": "seed", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "RefineImageLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "", + "FIBO", + "", + "1:1", + 50, + 5, + 123456, + "randomize" + ] + }, + { + "id": 17, + "type": "PreviewImage", + "pos": [ + 941.6011962890625, + 530.138671875 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 16 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 14, + "type": "GenerateImageLiteNodeV2", + "pos": [ + 171.52566528320312, + 566.1160278320312 + ], + "size": [ + 270, + 290 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "images", + "shape": 7, + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 13 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": [ + 14 + ] + }, + { + "name": "seed", + "type": "INT", + "links": [ + 15 + ] + } + ], + "properties": { + "Node name for S&R": "GenerateImageLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "FIBO", + "", + "1:1", + 50, + 5, + 123456, + "randomize" + ] + } + ], + "links": [ + [ + 9, + 11, + 0, + 6, + 0, + "IMAGE" + ], + [ + 10, + 11, + 1, + 13, + 0, + "STRING" + ], + [ + 11, + 11, + 2, + 13, + 1, + "INT" + ], + [ + 12, + 13, + 0, + 5, + 0, + "IMAGE" + ], + [ + 13, + 14, + 0, + 15, + 0, + "IMAGE" + ], + [ + 14, + 14, + 1, + 16, + 0, + "STRING" + ], + [ + 15, + 14, + 2, + 16, + 1, + "INT" + ], + [ + 16, + 16, + 0, + 17, + 0, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.6904379352119753, + "offset": [ + 520.7944217647299, + -13.172589048007652 + ] + }, + "frontendVersion": "1.25.11" + }, + "version": 0.4 +} \ No newline at end of file From dffed52b273d86da53a30831e757e6bf193dbde4 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sun, 23 Nov 2025 20:22:26 +0000 Subject: [PATCH 2/9] WAI-4234 --- nodes/generate_image_node_v2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodes/generate_image_node_v2.py b/nodes/generate_image_node_v2.py index 0eb2616..801f3a8 100644 --- a/nodes/generate_image_node_v2.py +++ b/nodes/generate_image_node_v2.py @@ -145,4 +145,4 @@ class GenerateImageNodeV2(_BaseGenerateImageNodeV2): class GenerateImageLiteNodeV2(_BaseGenerateImageNodeV2): """Lite Image Generation Node""" def __init__(self): - self.api_url = "https://engine.prod.bria-api.com/v2/image/generate/lite " \ No newline at end of file + self.api_url = "https://engine.prod.bria-api.com/v2/image/generate/lite" \ No newline at end of file From 05406c1cef60f91105874d31e2ec65ba81e0e2e5 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 26 Nov 2025 20:17:22 +0000 Subject: [PATCH 3/9] fix Structured prompt generate parameters --- __init__.py | 6 +-- nodes/generate_structured_prompt_node_v2.py | 50 +++++++-------------- 2 files changed, 20 insertions(+), 36 deletions(-) diff --git a/__init__.py b/__init__.py index c5a151c..2950882 100644 --- a/__init__.py +++ b/__init__.py @@ -97,11 +97,11 @@ NODE_DISPLAY_NAME_MAPPINGS = { "ReimagineNode": "Bria Reimagine", "AttributionByImageNode": "Attribution By Image Node", "GenerateImageNodeV2": "Generate Image", - "GenerateImageLiteNodeV2": "Generate Image - lite", + "GenerateImageLiteNodeV2": "Generate Image - Lite", "RefineImageNodeV2": "Refine and Regenerate Image", - "RefineImageLiteNodeV2": "Refine Image - lite", + "RefineImageLiteNodeV2": "Refine Image - Lite", "GenerateStructuredPromptNodeV2": "Generate Structured Prompt", - "GenerateStructuredPromptLiteNodeV2": "Generate Structured Prompt - lite", + "GenerateStructuredPromptLiteNodeV2": "Generate Structured Prompt - Lite", } diff --git a/nodes/generate_structured_prompt_node_v2.py b/nodes/generate_structured_prompt_node_v2.py index ee79087..df7516d 100644 --- a/nodes/generate_structured_prompt_node_v2.py +++ b/nodes/generate_structured_prompt_node_v2.py @@ -1,8 +1,11 @@ import requests from .common import ( deserialize_and_get_comfy_key, + image_to_base64, poll_status_until_completed, + preprocess_image, ) +import torch class _BaseGenerateStructuredPromptNodeV2: @@ -16,17 +19,10 @@ class _BaseGenerateStructuredPromptNodeV2: "required": { "api_token": ("STRING", {"default": "BRIA_API_TOKEN"}), "prompt": ("STRING",), - "structured_prompt": ("STRING",), }, "optional": { - "model_version": (["FIBO"], {"default": "FIBO"}), - "negative_prompt": ("STRING", {"default": ""}), - "aspect_ratio": ( - ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9"], - {"default": "1:1"}, - ), - "steps_num": ("INT", {"default": 50, "min": 20, "max": 50}), - "guidance_scale": ("INT", {"default": 5, "min": 3, "max": 5}), + "structured_prompt": ("STRING",), + "images": ("IMAGE",), "seed": ("INT", {"default": 123456}), }, } @@ -43,47 +39,35 @@ class _BaseGenerateStructuredPromptNodeV2: def _build_payload( self, prompt, - model_version, - negative_prompt, - aspect_ratio, - steps_num, - guidance_scale, seed, - structured_prompt + structured_prompt, + images=None ): - return { + payload = { "prompt": prompt, - "model_version": model_version, - "negative_prompt": negative_prompt, - "aspect_ratio": aspect_ratio, - "steps_num": steps_num, - "guidance_scale": guidance_scale, "seed": seed, "structured_prompt":structured_prompt } + if images is not None: + if isinstance(images, torch.Tensor): + preprocess_images = preprocess_image(images) + payload["images"] = [image_to_base64(preprocess_images)] + return payload def execute( self, api_token, prompt, - model_version, - negative_prompt, - aspect_ratio, - steps_num, - guidance_scale, seed, - structured_prompt + structured_prompt, + images=None, ): self._validate_token(api_token) payload = self._build_payload( prompt, - model_version, - negative_prompt, - aspect_ratio, - steps_num, - guidance_scale, seed, - structured_prompt + structured_prompt, + images ) api_token = deserialize_and_get_comfy_key(api_token) From ff8489b8d3d13720b7638124b0b5f45a91022da2 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 26 Nov 2025 20:23:32 +0000 Subject: [PATCH 4/9] update version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6a3d452..51d159c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "comfyui-bria-api" description = "Custom nodes for ComfyUI using BRIA's API." -version = "2.1.8" +version = "2.1.9" license = {file = "LICENSE"} [project.urls] From 0a81405f6ab43d0b3f8e4193c7c48b6d96be7f36 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sun, 30 Nov 2025 20:29:27 +0000 Subject: [PATCH 5/9] fix Gabi Feedback --- nodes/generate_image_node_v2.py | 48 +- nodes/refine_image_node_v2.py | 50 +- ...=> generate_image_fibo-lite_workflow.json} | 650 ++++++++----- ...json => generate_image_fibo_workflow.json} | 883 ++++++++++-------- 4 files changed, 989 insertions(+), 642 deletions(-) rename workflows/{LIGHT_Workflow.json => generate_image_fibo-lite_workflow.json} (65%) rename workflows/{FIBO_Workflow.json => generate_image_fibo_workflow.json} (63%) diff --git a/nodes/generate_image_node_v2.py b/nodes/generate_image_node_v2.py index 801f3a8..ba65bf3 100644 --- a/nodes/generate_image_node_v2.py +++ b/nodes/generate_image_node_v2.py @@ -14,26 +14,33 @@ class _BaseGenerateImageNodeV2: """Base class for image generation nodes (standard & pro).""" api_url = None # Each subclass must define its API endpoint + supports_negative_prompt = True # Can be overridden by subclasses @classmethod def INPUT_TYPES(cls): + optional_inputs = { + "model_version": (["FIBO"], {"default": "FIBO"}), + "structured_prompt": ("STRING",), + "images": ("IMAGE",), + "aspect_ratio": ( + ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9"], + {"default": "1:1"}, + ), + "steps_num": ("INT", {"default": 50, "min": 20, "max": 50}), + "guidance_scale": ("INT", {"default": 5, "min": 3, "max": 5}), + "seed": ("INT", {"default": 123456}), + } + + # Add negative_prompt only if supported + if cls.supports_negative_prompt: + optional_inputs["negative_prompt"] = ("STRING", {"default": ""}) + return { "required": { "api_token": ("STRING", {"default": "BRIA_API_TOKEN"}), "prompt": ("STRING",), }, - "optional": { - "model_version": (["FIBO"], {"default": "FIBO"}), - "negative_prompt": ("STRING", {"default": ""}), - "images": ("IMAGE",), - "aspect_ratio": ( - ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9"], - {"default": "1:1"}, - ), - "steps_num": ("INT", {"default": 50, "min": 20, "max": 50}), - "guidance_scale": ("INT", {"default": 5, "min": 3, "max": 5}), - "seed": ("INT", {"default": 123456}), - }, + "optional": optional_inputs, } RETURN_TYPES = ("IMAGE", "STRING", "INT") @@ -49,29 +56,33 @@ class _BaseGenerateImageNodeV2: self, prompt, model_version, - negative_prompt, + structured_prompt, aspect_ratio, steps_num, guidance_scale, seed, + negative_prompt=None, images=None, ): payload = { "prompt": prompt, "model_version": model_version, - "negative_prompt": negative_prompt, + "structured_prompt":structured_prompt, "aspect_ratio": aspect_ratio, "steps_num": steps_num, "guidance_scale": guidance_scale, "seed": seed, } + # Add negative_prompt only if supported and provided + if self.supports_negative_prompt and negative_prompt is not None: + payload["negative_prompt"] = negative_prompt + if images is not None: if isinstance(images, torch.Tensor): preprocess_images = preprocess_image(images) payload["images"] = [image_to_base64(preprocess_images)] - return payload def execute( @@ -79,22 +90,24 @@ class _BaseGenerateImageNodeV2: api_token, prompt, model_version, - negative_prompt, + structured_prompt, aspect_ratio, steps_num, guidance_scale, seed, + negative_prompt=None, images=None, ): self._validate_token(api_token) payload = self._build_payload( prompt, model_version, - negative_prompt, + structured_prompt, aspect_ratio, steps_num, guidance_scale, seed, + negative_prompt, images, ) api_token = deserialize_and_get_comfy_key(api_token) @@ -144,5 +157,6 @@ class GenerateImageNodeV2(_BaseGenerateImageNodeV2): class GenerateImageLiteNodeV2(_BaseGenerateImageNodeV2): """Lite Image Generation Node""" + supports_negative_prompt = False def __init__(self): self.api_url = "https://engine.prod.bria-api.com/v2/image/generate/lite" \ No newline at end of file diff --git a/nodes/refine_image_node_v2.py b/nodes/refine_image_node_v2.py index e9a6325..62fe3cf 100644 --- a/nodes/refine_image_node_v2.py +++ b/nodes/refine_image_node_v2.py @@ -7,26 +7,32 @@ class _BaseRefineImageNodeV2: api_url = None # Must be overridden by subclasses generate_api_url = None + supports_negative_prompt = True # Can be overridden by subclasses @classmethod def INPUT_TYPES(cls): + optional_inputs = { + "model_version": (["FIBO"], {"default": "FIBO"}), + "aspect_ratio": ( + ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9"], + {"default": "1:1"}, + ), + "steps_num": ("INT", {"default": 50, "min": 20, "max": 50}), + "guidance_scale": ("INT", {"default": 5, "min": 3, "max": 5}), + "seed": ("INT", {"default": 123456}), + } + + # Add negative_prompt only if supported + if cls.supports_negative_prompt: + optional_inputs["negative_prompt"] = ("STRING", {"default": ""}) + return { "required": { "api_token": ("STRING", {"default": "BRIA_API_TOKEN"}), "prompt": ("STRING",), "structured_prompt": ("STRING",), }, - "optional": { - "model_version": (["FIBO"], {"default": "FIBO"}), - "negative_prompt": ("STRING", {"default": ""}), - "aspect_ratio": ( - ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9"], - {"default": "1:1"}, - ), - "steps_num": ("INT", {"default": 50, "min": 20, "max": 50}), - "guidance_scale": ("INT", {"default": 5, "min": 3, "max": 5}), - "seed": ("INT", {"default": 123456}), - }, + "optional": optional_inputs, } RETURN_TYPES = ("IMAGE", "STRING", "INT") @@ -43,22 +49,26 @@ class _BaseRefineImageNodeV2: prompt, structured_prompt, model_version, - negative_prompt, aspect_ratio, steps_num, guidance_scale, seed, + negative_prompt=None, ): - return { + payload = { "prompt": prompt, "model_version": model_version, - "negative_prompt": negative_prompt, "aspect_ratio": aspect_ratio, "steps_num": steps_num, "guidance_scale": guidance_scale, "seed": seed, "structured_prompt": structured_prompt, } + + if self.supports_negative_prompt and negative_prompt is not None: + payload["negative_prompt"] = negative_prompt + + return payload def execute( self, @@ -66,22 +76,22 @@ class _BaseRefineImageNodeV2: prompt, structured_prompt, model_version, - negative_prompt, aspect_ratio, steps_num, guidance_scale, seed, + negative_prompt=None, ): self._validate_token(api_token) payload = self._build_payload( prompt, structured_prompt, model_version, - negative_prompt, aspect_ratio, steps_num, guidance_scale, seed, + negative_prompt, ) api_token = deserialize_and_get_comfy_key(api_token) headers = {"Content-Type": "application/json", "api_token": api_token} @@ -111,12 +121,16 @@ class _BaseRefineImageNodeV2: "prompt": prompt, "structured_prompt":structured_prompt, "model_version": model_version, - "negative_prompt": negative_prompt, "aspect_ratio": aspect_ratio, "steps_num": steps_num, "guidance_scale": guidance_scale, "seed": used_seed, } + + # Add negative_prompt only if supported and provided + if self.supports_negative_prompt and negative_prompt is not None: + payloadForImageGenetrate["negative_prompt"] = negative_prompt + headers = {"Content-Type": "application/json", "api_token": api_token} response = requests.post(self.generate_api_url, json=payloadForImageGenetrate, headers=headers) @@ -163,6 +177,8 @@ class RefineImageNodeV2(_BaseRefineImageNodeV2): class RefineImageLiteNodeV2(_BaseRefineImageNodeV2): """Lite Refine Image Node""" + supports_negative_prompt = False + def __init__(self): self.api_url = "https://engine.prod.bria-api.com/v2/structured_prompt/generate/lite" self.generate_api_url = "https://engine.prod.bria-api.com/v2/image/generate/lite" \ No newline at end of file diff --git a/workflows/LIGHT_Workflow.json b/workflows/generate_image_fibo-lite_workflow.json similarity index 65% rename from workflows/LIGHT_Workflow.json rename to workflows/generate_image_fibo-lite_workflow.json index 7d0ab5e..b8f51a4 100644 --- a/workflows/LIGHT_Workflow.json +++ b/workflows/generate_image_fibo-lite_workflow.json @@ -1,128 +1,49 @@ { "id": "1c31a92d-1e48-46b0-b4ad-60d537260922", "revision": 0, - "last_node_id": 17, - "last_link_id": 16, + "last_node_id": 23, + "last_link_id": 26, "nodes": [ { - "id": 1, - "type": "Note", - "pos": [ - -116.75677490234375, - 84.22367095947266 - ], - "size": [ - 210, - 88 - ], - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": {}, - "widgets_values": [ - "If you would like to start with prompt" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 2, - "type": "Note", - "pos": [ - -123.22234344482422, - 628.1995849609375 - ], - "size": [ - 210, - 88 - ], - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": {}, - "widgets_values": [ - "If you would like to start with reference image + prompt" - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 11, - "type": "GenerateImageLiteNodeV2", - "pos": [ - 184.7118682861328, - 82.85485076904297 - ], - "size": [ - 270, - 290 - ], - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "images", - "shape": 7, - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 9 - ] - }, - { - "name": "structured_prompt", - "type": "STRING", - "links": [ - 10 - ] - }, - { - "name": "seed", - "type": "INT", - "links": [ - 11 - ] - } - ], - "properties": { - "Node name for S&R": "GenerateImageLiteNodeV2" - }, - "widgets_values": [ - "BRIA_API_TOKEN", - "", - "FIBO", - "", - "1:1", - 50, - 5, - 123456, - "randomize" - ] - }, - { - "id": 6, + "id": 5, "type": "PreviewImage", "pos": [ - 489.3982849121094, - -7.705096244812012 + 1235.1895751953125, + 10.958272933959961 ], "size": [ 140, 26 ], "flags": {}, - "order": 4, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 21 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 6, + "type": "PreviewImage", + "pos": [ + 774.4347534179688, + -58.6872444152832 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 6, "mode": 0, "inputs": [ { @@ -138,79 +59,106 @@ "widgets_values": [] }, { - "id": 13, - "type": "RefineImageLiteNodeV2", + "id": 20, + "type": "GenerateStructuredPromptLiteNodeV2", "pos": [ - 607.6322021484375, - 79.37891387939453 + 68.9760971069336, + 82.11421966552734 ], "size": [ - 270, - 314 + 310.7749938964844, + 174 ], "flags": {}, - "order": 5, + "order": 0, "mode": 0, "inputs": [ { - "name": "structured_prompt", - "type": "STRING", - "widget": { - "name": "structured_prompt" - }, - "link": 10 - }, - { - "name": "seed", + "name": "images", "shape": 7, - "type": "INT", - "widget": { - "name": "seed" - }, - "link": 11 + "type": "IMAGE", + "link": null } ], "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 12 - ] - }, { "name": "structured_prompt", "type": "STRING", - "links": null + "links": [ + 17 + ] }, { "name": "seed", "type": "INT", - "links": null + "links": [ + 18 + ] } ], "properties": { - "Node name for S&R": "RefineImageLiteNodeV2" + "Node name for S&R": "GenerateStructuredPromptLiteNodeV2" }, "widgets_values": [ "BRIA_API_TOKEN", "", "", - "FIBO", - "", - "1:1", - 50, - 5, 123456, "randomize" ] }, { - "id": 5, + "id": 1, + "type": "Note", + "pos": [ + -175.84976196289062, + 102.76270294189453 + ], + "size": [ + 210, + 88 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "If you would like to start with prompt" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2, + "type": "Note", + "pos": [ + -225.1866455078125, + 624.7235107421875 + ], + "size": [ + 210, + 88 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "If you would like to start with reference image + prompt" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 15, "type": "PreviewImage", "pos": [ - 954.7874755859375, - 46.877532958984375 + 719.5359497070312, + 443.11285400390625 ], "size": [ 140, @@ -219,33 +167,6 @@ "flags": {}, "order": 8, "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 12 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, - { - "id": 15, - "type": "PreviewImage", - "pos": [ - 476.21209716796875, - 475.55596923828125 - ], - "size": [ - 140, - 26 - ], - "flags": {}, - "order": 6, - "mode": 0, "inputs": [ { "name": "images", @@ -260,15 +181,91 @@ "widgets_values": [] }, { - "id": 16, + "id": 17, + "type": "PreviewImage", + "pos": [ + 1132.783935546875, + 517.3931884765625 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 26 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 21, + "type": "GenerateStructuredPromptLiteNodeV2", + "pos": [ + 0.6137512922286987, + 587.301025390625 + ], + "size": [ + 310.7749938964844, + 174 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "images", + "shape": 7, + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "structured_prompt", + "type": "STRING", + "links": [ + 19 + ] + }, + { + "name": "seed", + "type": "INT", + "links": [ + 20 + ] + } + ], + "properties": { + "Node name for S&R": "GenerateStructuredPromptLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "", + 123456, + "randomize" + ] + }, + { + "id": 23, "type": "RefineImageLiteNodeV2", "pos": [ - 594.446044921875, - 562.6400756835938 + 873.1033325195312, + 46.19507598876953 ], "size": [ 270, - 314 + 290 ], "flags": {}, "order": 7, @@ -280,7 +277,7 @@ "widget": { "name": "structured_prompt" }, - "link": 14 + "link": 22 }, { "name": "seed", @@ -289,7 +286,7 @@ "widget": { "name": "seed" }, - "link": 15 + "link": 23 } ], "outputs": [ @@ -297,7 +294,7 @@ "name": "image", "type": "IMAGE", "links": [ - 16 + 21 ] }, { @@ -319,6 +316,83 @@ "", "", "FIBO", + "1:1", + 50, + 5, + 123456, + "randomize" + ] + }, + { + "id": 11, + "type": "GenerateImageLiteNodeV2", + "pos": [ + 475.5416564941406, + 56.20505905151367 + ], + "size": [ + 270, + 290 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "images", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "structured_prompt", + "shape": 7, + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 17 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 18 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 9 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": [ + 22 + ] + }, + { + "name": "seed", + "type": "INT", + "links": [ + 23 + ] + } + ], + "properties": { + "Node name for S&R": "GenerateImageLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "FIBO", "", "1:1", 50, @@ -327,46 +401,19 @@ "randomize" ] }, - { - "id": 17, - "type": "PreviewImage", - "pos": [ - 941.6011962890625, - 530.138671875 - ], - "size": [ - 140, - 26 - ], - "flags": {}, - "order": 9, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 16 - } - ], - "outputs": [], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "widgets_values": [] - }, { "id": 14, "type": "GenerateImageLiteNodeV2", "pos": [ - 171.52566528320312, - 566.1160278320312 + 402.1038513183594, + 569.592041015625 ], "size": [ 270, 290 ], "flags": {}, - "order": 3, + "order": 5, "mode": 0, "inputs": [ { @@ -374,6 +421,24 @@ "shape": 7, "type": "IMAGE", "link": null + }, + { + "name": "structured_prompt", + "shape": 7, + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 19 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 20 } ], "outputs": [ @@ -388,14 +453,14 @@ "name": "structured_prompt", "type": "STRING", "links": [ - 14 + 24 ] }, { "name": "seed", "type": "INT", "links": [ - 15 + 25 ] } ], @@ -413,6 +478,73 @@ 123456, "randomize" ] + }, + { + "id": 22, + "type": "RefineImageLiteNodeV2", + "pos": [ + 751.44189453125, + 554.8574829101562 + ], + "size": [ + 270, + 290 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "structured_prompt", + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 24 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 25 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 26 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": null + }, + { + "name": "seed", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "RefineImageLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "", + "FIBO", + "1:1", + 50, + 5, + 123456, + "randomize" + ] } ], "links": [ @@ -425,56 +557,88 @@ "IMAGE" ], [ - 10, + 13, + 14, + 0, + 15, + 0, + "IMAGE" + ], + [ + 17, + 20, + 0, 11, 1, - 13, - 0, "STRING" ], [ - 11, + 18, + 20, + 1, 11, 2, - 13, - 1, "INT" ], [ - 12, - 13, + 19, + 21, + 0, + 14, + 1, + "STRING" + ], + [ + 20, + 21, + 1, + 14, + 2, + "INT" + ], + [ + 21, + 23, 0, 5, 0, "IMAGE" ], [ - 13, - 14, - 0, - 15, - 0, - "IMAGE" - ], - [ - 14, - 14, + 22, + 11, 1, - 16, + 23, 0, "STRING" ], [ - 15, - 14, + 23, + 11, 2, - 16, + 23, 1, "INT" ], [ - 16, - 16, + 24, + 14, + 1, + 22, + 0, + "STRING" + ], + [ + 25, + 14, + 2, + 22, + 1, + "INT" + ], + [ + 26, + 22, 0, 17, 0, @@ -487,8 +651,8 @@ "ds": { "scale": 0.6904379352119753, "offset": [ - 520.7944217647299, - -13.172589048007652 + 474.44702633928136, + 63.30066202433597 ] }, "frontendVersion": "1.25.11" diff --git a/workflows/FIBO_Workflow.json b/workflows/generate_image_fibo_workflow.json similarity index 63% rename from workflows/FIBO_Workflow.json rename to workflows/generate_image_fibo_workflow.json index 8240df1..0189129 100644 --- a/workflows/FIBO_Workflow.json +++ b/workflows/generate_image_fibo_workflow.json @@ -1,22 +1,51 @@ { "id": "3875cd62-7a0e-4c8c-8951-22ec8a63dd8d", "revision": 0, - "last_node_id": 14, - "last_link_id": 8, + "last_node_id": 18, + "last_link_id": 19, "nodes": [ { - "id": 3, + "id": 4, "type": "PreviewImage", "pos": [ - 632.3427124023438, - 32.13115310668945 + 1284.572509765625, + 229.44073486328125 ], "size": [ 140, 26 ], "flags": {}, - "order": 4, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 16 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage", + "cnr_id": "comfy-core", + "ver": "0.3.62" + }, + "widgets_values": [] + }, + { + "id": 3, + "type": "PreviewImage", + "pos": [ + 809.5054321289062, + 38.50392150878906 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 6, "mode": 0, "inputs": [ { @@ -27,102 +56,119 @@ ], "outputs": [], "properties": { + "Node name for S&R": "PreviewImage", "cnr_id": "comfy-core", - "ver": "0.3.62", - "Node name for S&R": "PreviewImage" - } + "ver": "0.3.62" + }, + "widgets_values": [] }, { - "id": 2, - "type": "RefineImageNodeV2", + "id": 5, + "type": "Note", "pos": [ - 704.8090209960938, - 218.65850830078125 + -143.02835083007812, + 277.0796203613281 ], "size": [ - 287.4712829589844, - 314 + 210, + 88 ], "flags": {}, - "order": 5, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "If you would like to start with prompt" + ], + "color": "#c09430", + "bgcolor": "rgba(24,24,27,.9)" + }, + { + "id": 16, + "type": "GenerateStructuredPromptNodeV2", + "pos": [ + 110.83424377441406, + 260.3714294433594 + ], + "size": [ + 275.7613220214844, + 174 + ], + "flags": {}, + "order": 1, "mode": 0, "inputs": [ { - "name": "structured_prompt", - "type": "STRING", - "widget": { - "name": "structured_prompt" - }, - "link": 3 - }, - { - "name": "seed", + "name": "images", "shape": 7, - "type": "INT", - "widget": { - "name": "seed" - }, - "link": 2 + "type": "IMAGE", + "link": null } ], "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 4 - ] - }, { "name": "structured_prompt", "type": "STRING", - "links": null + "links": [ + 9 + ] }, { "name": "seed", "type": "INT", - "links": null + "links": [ + 10 + ] } ], "properties": { - "cnr_id": "comfyui-bria-api", - "ver": "2.1.4", - "Node name for S&R": "RefineImageNodeV2", - "ue_properties": { - "widget_ue_connectable": { - "api_token": true, - "prompt": true, - "structured_prompt": true, - "model_version": true, - "negative_prompt": true, - "aspect_ratio": true, - "steps_num": true, - "guidance_scale": true, - "seed": true - }, - "version": "7.1", - "input_ue_unconnectable": {} - } + "Node name for S&R": "GenerateStructuredPromptNodeV2" }, "widgets_values": [ "BRIA_API_TOKEN", "", "", - "FIBO", - "", - "1:1", - 50, - 5, 123456, "randomize" ] }, { - "id": 4, + "id": 10, "type": "PreviewImage", "pos": [ - 1153.29345703125, - 270.2264404296875 + 1261.5439453125, + 996.5408935546875 + ], + "size": [ + 140, + 26 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 19 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage", + "cnr_id": "comfy-core", + "ver": "0.3.62" + }, + "widgets_values": [] + }, + { + "id": 14, + "type": "PreviewImage", + "pos": [ + 751.5670166015625, + 845.8276977539062 ], "size": [ 140, @@ -135,219 +181,23 @@ { "name": "images", "type": "IMAGE", - "link": 4 + "link": 8 } ], "outputs": [], "properties": { + "Node name for S&R": "PreviewImage", "cnr_id": "comfy-core", - "ver": "0.3.62", - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 1, - "type": "GenerateImageNodeV2", - "pos": [ - 272.6366882324219, - 227.9468231201172 - ], - "size": [ - 270, - 290 - ], - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [ - { - "name": "images", - "shape": 7, - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 1 - ] - }, - { - "name": "structured_prompt", - "type": "STRING", - "links": [ - 3 - ] - }, - { - "name": "seed", - "type": "INT", - "links": [ - 2 - ] - } - ], - "properties": { - "cnr_id": "comfyui-bria-api", - "ver": "2.1.4", - "Node name for S&R": "GenerateImageNodeV2", - "ue_properties": { - "widget_ue_connectable": { - "api_token": true, - "prompt": true, - "model_version": true, - "negative_prompt": true, - "aspect_ratio": true, - "steps_num": true, - "guidance_scale": true, - "seed": true - }, - "version": "7.1", - "input_ue_unconnectable": {} - } + "ver": "0.3.62" }, - "widgets_values": [ - "BRIA_API_TOKEN", - "", - "FIBO", - "", - "1:1", - 50, - 5, - 123456, - "randomize" - ] - }, - { - "id": 5, - "type": "Note", - "pos": [ - -43.613197326660156, - 324.2381896972656 - ], - "size": [ - 210, - 88 - ], - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [], - "outputs": [], - "properties": {}, - "widgets_values": [ - "If you would like to start with prompt" - ], - "color": "#c09430", - "bgcolor": "rgba(24,24,27,.9)" - }, - { - "id": 10, - "type": "PreviewImage", - "pos": [ - 1182.5216064453125, - 1006.7373657226562 - ], - "size": [ - 140, - 26 - ], - "flags": {}, - "order": 9, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 7 - } - ], - "outputs": [], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.62", - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 9, - "type": "RefineImageNodeV2", - "pos": [ - 703.2684326171875, - 1034.9910888671875 - ], - "size": [ - 287.4712829589844, - 314 - ], - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "structured_prompt", - "type": "STRING", - "widget": { - "name": "structured_prompt" - }, - "link": 5 - }, - { - "name": "seed", - "shape": 7, - "type": "INT", - "widget": { - "name": "seed" - }, - "link": 6 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 7 - ] - }, - { - "name": "structured_prompt", - "type": "STRING", - "links": null - }, - { - "name": "seed", - "type": "INT", - "links": null - } - ], - "properties": { - "cnr_id": "comfyui-bria-api", - "ver": "2.1.5", - "Node name for S&R": "RefineImageNodeV2" - }, - "widgets_values": [ - "BRIA_API_TOKEN", - "", - "", - "FIBO", - "", - "1:1", - 50, - 5, - 123456, - "randomize" - ] + "widgets_values": [] }, { "id": 6, "type": "Note", "pos": [ - -47.50065612792969, - 1042.9178466796875 + -135.44485473632812, + 1056.937744140625 ], "size": [ 210, @@ -366,43 +216,15 @@ "bgcolor": "rgba(24,24,27,.9)" }, { - "id": 14, - "type": "PreviewImage", + "id": 15, + "type": "GenerateStructuredPromptNodeV2", "pos": [ - 593.5224609375, - 844.5531616210938 + 117.20681762695312, + 1049.3199462890625 ], "size": [ - 140, - 26 - ], - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 8 - } - ], - "outputs": [], - "properties": { - "cnr_id": "comfy-core", - "ver": "0.3.62", - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 7, - "type": "GenerateImageNodeV2", - "pos": [ - 262.3690490722656, - 1041.67431640625 - ], - "size": [ - 270, - 290 + 275.7613220214844, + 174 ], "flags": {}, "order": 3, @@ -416,32 +238,113 @@ } ], "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 8 - ] - }, { "name": "structured_prompt", "type": "STRING", "links": [ - 5 + 11 ] }, { "name": "seed", "type": "INT", "links": [ - 6 + 12 ] } ], "properties": { + "Node name for S&R": "GenerateStructuredPromptNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "", + 123456, + "randomize" + ] + }, + { + "id": 1, + "type": "GenerateImageNodeV2", + "pos": [ + 482.9381103515625, + 222.8486785888672 + ], + "size": [ + 270, + 314 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "images", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "structured_prompt", + "shape": 7, + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 9 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 10 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 1 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": [ + 13 + ] + }, + { + "name": "seed", + "type": "INT", + "links": [ + 15 + ] + } + ], + "properties": { + "Node name for S&R": "GenerateImageNodeV2", "cnr_id": "comfyui-bria-api", - "ver": "2.1.5", - "Node name for S&R": "GenerateImageNodeV2" + "ver": "2.1.4", + "ue_properties": { + "widget_ue_connectable": { + "api_token": true, + "prompt": true, + "model_version": true, + "negative_prompt": true, + "aspect_ratio": true, + "steps_num": true, + "guidance_scale": true, + "seed": true + }, + "version": "7.1", + "input_ue_unconnectable": {} + } }, "widgets_values": [ "BRIA_API_TOKEN", @@ -452,8 +355,226 @@ 50, 5, 123456, + "randomize", "randomize" ] + }, + { + "id": 17, + "type": "RefineImageNodeV2", + "pos": [ + 876.5194091796875, + 234.5377655029297 + ], + "size": [ + 287.4712829589844, + 314 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "structured_prompt", + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 13 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 15 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 16 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": null + }, + { + "name": "seed", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "RefineImageNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "", + "FIBO", + "1:1", + 50, + 5, + 123456, + "randomize", + "" + ] + }, + { + "id": 7, + "type": "GenerateImageNodeV2", + "pos": [ + 482.86688232421875, + 1034.027099609375 + ], + "size": [ + 270, + 314 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "images", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "structured_prompt", + "shape": 7, + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 11 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 12 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 8 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": [ + 17 + ] + }, + { + "name": "seed", + "type": "INT", + "links": [ + 18 + ] + } + ], + "properties": { + "Node name for S&R": "GenerateImageNodeV2", + "cnr_id": "comfyui-bria-api", + "ver": "2.1.5" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "FIBO", + "", + "1:1", + 50, + 5, + 123456, + "randomize", + "randomize" + ] + }, + { + "id": 18, + "type": "RefineImageNodeV2", + "pos": [ + 915.1214599609375, + 1000.7938842773438 + ], + "size": [ + 287.4712829589844, + 314 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "structured_prompt", + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 17 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 18 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 19 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": null + }, + { + "name": "seed", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "RefineImageNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "", + "FIBO", + "1:1", + 50, + 5, + 123456, + "randomize", + "" + ] } ], "links": [ @@ -465,54 +586,6 @@ 0, "IMAGE" ], - [ - 2, - 1, - 2, - 2, - 1, - "INT" - ], - [ - 3, - 1, - 1, - 2, - 0, - "STRING" - ], - [ - 4, - 2, - 0, - 4, - 0, - "IMAGE" - ], - [ - 5, - 7, - 1, - 9, - 0, - "STRING" - ], - [ - 6, - 7, - 2, - 9, - 1, - "INT" - ], - [ - 7, - 9, - 0, - 10, - 0, - "IMAGE" - ], [ 8, 7, @@ -520,20 +593,100 @@ 14, 0, "IMAGE" + ], + [ + 9, + 16, + 0, + 1, + 1, + "STRING" + ], + [ + 10, + 16, + 1, + 1, + 2, + "INT" + ], + [ + 11, + 15, + 0, + 7, + 1, + "STRING" + ], + [ + 12, + 15, + 1, + 7, + 2, + "INT" + ], + [ + 13, + 1, + 1, + 17, + 0, + "STRING" + ], + [ + 15, + 1, + 2, + 17, + 1, + "INT" + ], + [ + 16, + 17, + 0, + 4, + 0, + "IMAGE" + ], + [ + 17, + 7, + 1, + 18, + 0, + "STRING" + ], + [ + 18, + 7, + 2, + 18, + 1, + "INT" + ], + [ + 19, + 18, + 0, + 10, + 0, + "IMAGE" ] ], "groups": [], "config": {}, "extra": { - "ue_links": [], "ds": { - "scale": 0.3897342147473183, + "scale": 0.6904379352119744, "offset": [ - 658.5745748406673, - 99.37411299539059 + 213.80311902834225, + -667.3066536880174 ] }, - "frontendVersion": "1.28.4", + "frontendVersion": "1.25.11", + "ue_links": [], "VHS_latentpreview": false, "VHS_latentpreviewrate": 0, "VHS_MetadataImage": true, From 98322c3c9606c4cfb92636510608bfb1af9c4538 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 10 Dec 2025 07:20:19 +0000 Subject: [PATCH 6/9] update default steps for fibo lite --- nodes/generate_image_node_v2.py | 16 +++++++++++++++- nodes/refine_image_node_v2.py | 18 ++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/nodes/generate_image_node_v2.py b/nodes/generate_image_node_v2.py index ba65bf3..8bf2add 100644 --- a/nodes/generate_image_node_v2.py +++ b/nodes/generate_image_node_v2.py @@ -15,6 +15,10 @@ class _BaseGenerateImageNodeV2: api_url = None # Each subclass must define its API endpoint supports_negative_prompt = True # Can be overridden by subclasses + # STEP SETTINGS (defaults for standard API) + default_steps = 50 + min_steps = 20 + max_steps = 50 @classmethod def INPUT_TYPES(cls): @@ -26,7 +30,14 @@ class _BaseGenerateImageNodeV2: ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9"], {"default": "1:1"}, ), - "steps_num": ("INT", {"default": 50, "min": 20, "max": 50}), + "steps_num": ( + "INT", + { + "default": cls.default_steps, + "min": cls.min_steps, + "max": cls.max_steps, + }, + ), "guidance_scale": ("INT", {"default": 5, "min": 3, "max": 5}), "seed": ("INT", {"default": 123456}), } @@ -158,5 +169,8 @@ class GenerateImageNodeV2(_BaseGenerateImageNodeV2): class GenerateImageLiteNodeV2(_BaseGenerateImageNodeV2): """Lite Image Generation Node""" supports_negative_prompt = False + default_steps = 8 + min_steps = 4 + max_steps = 30 def __init__(self): self.api_url = "https://engine.prod.bria-api.com/v2/image/generate/lite" \ No newline at end of file diff --git a/nodes/refine_image_node_v2.py b/nodes/refine_image_node_v2.py index 62fe3cf..babc264 100644 --- a/nodes/refine_image_node_v2.py +++ b/nodes/refine_image_node_v2.py @@ -8,7 +8,10 @@ class _BaseRefineImageNodeV2: api_url = None # Must be overridden by subclasses generate_api_url = None supports_negative_prompt = True # Can be overridden by subclasses - + # STEP SETTINGS (defaults for standard API) + default_steps = 50 + min_steps = 20 + max_steps = 50 @classmethod def INPUT_TYPES(cls): optional_inputs = { @@ -17,7 +20,14 @@ class _BaseRefineImageNodeV2: ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9"], {"default": "1:1"}, ), - "steps_num": ("INT", {"default": 50, "min": 20, "max": 50}), + "steps_num": ( + "INT", + { + "default": cls.default_steps, + "min": cls.min_steps, + "max": cls.max_steps, + }, + ), "guidance_scale": ("INT", {"default": 5, "min": 3, "max": 5}), "seed": ("INT", {"default": 123456}), } @@ -178,6 +188,10 @@ class RefineImageNodeV2(_BaseRefineImageNodeV2): class RefineImageLiteNodeV2(_BaseRefineImageNodeV2): """Lite Refine Image Node""" supports_negative_prompt = False + supports_negative_prompt = False + default_steps = 8 + min_steps = 4 + max_steps = 30 def __init__(self): self.api_url = "https://engine.prod.bria-api.com/v2/structured_prompt/generate/lite" From 51e75b8f9e80b4a414cf78cf7e7af59e350340bf Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 10 Dec 2025 07:27:23 +0000 Subject: [PATCH 7/9] update fibo lite flow --- .../generate_image_fibo-lite_workflow.json | 584 +++++++++--------- 1 file changed, 292 insertions(+), 292 deletions(-) diff --git a/workflows/generate_image_fibo-lite_workflow.json b/workflows/generate_image_fibo-lite_workflow.json index b8f51a4..b83d037 100644 --- a/workflows/generate_image_fibo-lite_workflow.json +++ b/workflows/generate_image_fibo-lite_workflow.json @@ -1,8 +1,8 @@ { "id": "1c31a92d-1e48-46b0-b4ad-60d537260922", "revision": 0, - "last_node_id": 23, - "last_link_id": 26, + "last_node_id": 27, + "last_link_id": 46, "nodes": [ { "id": 5, @@ -22,7 +22,7 @@ { "name": "images", "type": "IMAGE", - "link": 21 + "link": 43 } ], "outputs": [], @@ -49,7 +49,7 @@ { "name": "images", "type": "IMAGE", - "link": 9 + "link": 29 } ], "outputs": [], @@ -58,55 +58,6 @@ }, "widgets_values": [] }, - { - "id": 20, - "type": "GenerateStructuredPromptLiteNodeV2", - "pos": [ - 68.9760971069336, - 82.11421966552734 - ], - "size": [ - 310.7749938964844, - 174 - ], - "flags": {}, - "order": 0, - "mode": 0, - "inputs": [ - { - "name": "images", - "shape": 7, - "type": "IMAGE", - "link": null - } - ], - "outputs": [ - { - "name": "structured_prompt", - "type": "STRING", - "links": [ - 17 - ] - }, - { - "name": "seed", - "type": "INT", - "links": [ - 18 - ] - } - ], - "properties": { - "Node name for S&R": "GenerateStructuredPromptLiteNodeV2" - }, - "widgets_values": [ - "BRIA_API_TOKEN", - "", - "", - 123456, - "randomize" - ] - }, { "id": 1, "type": "Note", @@ -119,7 +70,7 @@ 88 ], "flags": {}, - "order": 1, + "order": 0, "mode": 0, "inputs": [], "outputs": [], @@ -142,7 +93,7 @@ 88 ], "flags": {}, - "order": 2, + "order": 1, "mode": 0, "inputs": [], "outputs": [], @@ -171,7 +122,7 @@ { "name": "images", "type": "IMAGE", - "link": 13 + "link": 36 } ], "outputs": [], @@ -198,7 +149,7 @@ { "name": "images", "type": "IMAGE", - "link": 26 + "link": 44 } ], "outputs": [], @@ -208,18 +159,18 @@ "widgets_values": [] }, { - "id": 21, + "id": 20, "type": "GenerateStructuredPromptLiteNodeV2", "pos": [ - 0.6137512922286987, - 587.301025390625 + 68.9760971069336, + 82.11421966552734 ], "size": [ 310.7749938964844, 174 ], "flags": {}, - "order": 3, + "order": 2, "mode": 0, "inputs": [ { @@ -234,14 +185,14 @@ "name": "structured_prompt", "type": "STRING", "links": [ - 19 + 27 ] }, { "name": "seed", "type": "INT", "links": [ - 20 + 28 ] } ], @@ -257,78 +208,11 @@ ] }, { - "id": 23, - "type": "RefineImageLiteNodeV2", - "pos": [ - 873.1033325195312, - 46.19507598876953 - ], - "size": [ - 270, - 290 - ], - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "structured_prompt", - "type": "STRING", - "widget": { - "name": "structured_prompt" - }, - "link": 22 - }, - { - "name": "seed", - "shape": 7, - "type": "INT", - "widget": { - "name": "seed" - }, - "link": 23 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 21 - ] - }, - { - "name": "structured_prompt", - "type": "STRING", - "links": null - }, - { - "name": "seed", - "type": "INT", - "links": null - } - ], - "properties": { - "Node name for S&R": "RefineImageLiteNodeV2" - }, - "widgets_values": [ - "BRIA_API_TOKEN", - "", - "", - "FIBO", - "1:1", - 50, - 5, - 123456, - "randomize" - ] - }, - { - "id": 11, + "id": 24, "type": "GenerateImageLiteNodeV2", "pos": [ - 475.5416564941406, - 56.20505905151367 + 460.6510314941406, + 44.938873291015625 ], "size": [ 270, @@ -351,7 +235,7 @@ "widget": { "name": "structured_prompt" }, - "link": 17 + "link": 27 }, { "name": "seed", @@ -360,7 +244,7 @@ "widget": { "name": "seed" }, - "link": 18 + "link": 28 } ], "outputs": [ @@ -368,21 +252,21 @@ "name": "image", "type": "IMAGE", "links": [ - 9 + 29 ] }, { "name": "structured_prompt", "type": "STRING", "links": [ - 22 + 41 ] }, { "name": "seed", "type": "INT", "links": [ - 23 + 42 ] } ], @@ -395,103 +279,25 @@ "FIBO", "", "1:1", - 50, + 8, 5, 123456, "randomize" ] }, { - "id": 14, - "type": "GenerateImageLiteNodeV2", - "pos": [ - 402.1038513183594, - 569.592041015625 - ], - "size": [ - 270, - 290 - ], - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "images", - "shape": 7, - "type": "IMAGE", - "link": null - }, - { - "name": "structured_prompt", - "shape": 7, - "type": "STRING", - "widget": { - "name": "structured_prompt" - }, - "link": 19 - }, - { - "name": "seed", - "shape": 7, - "type": "INT", - "widget": { - "name": "seed" - }, - "link": 20 - } - ], - "outputs": [ - { - "name": "image", - "type": "IMAGE", - "links": [ - 13 - ] - }, - { - "name": "structured_prompt", - "type": "STRING", - "links": [ - 24 - ] - }, - { - "name": "seed", - "type": "INT", - "links": [ - 25 - ] - } - ], - "properties": { - "Node name for S&R": "GenerateImageLiteNodeV2" - }, - "widgets_values": [ - "BRIA_API_TOKEN", - "", - "FIBO", - "", - "1:1", - 50, - 5, - 123456, - "randomize" - ] - }, - { - "id": 22, + "id": 26, "type": "RefineImageLiteNodeV2", "pos": [ - 751.44189453125, - 554.8574829101562 + 834.9641723632812, + 46.47432327270508 ], "size": [ 270, 290 ], "flags": {}, - "order": 9, + "order": 7, "mode": 0, "inputs": [ { @@ -500,7 +306,7 @@ "widget": { "name": "structured_prompt" }, - "link": 24 + "link": 41 }, { "name": "seed", @@ -509,7 +315,7 @@ "widget": { "name": "seed" }, - "link": 25 + "link": 42 } ], "outputs": [ @@ -517,7 +323,7 @@ "name": "image", "type": "IMAGE", "links": [ - 26 + 43 ] }, { @@ -540,119 +346,313 @@ "", "FIBO", "1:1", - 50, + 8, 5, 123456, "randomize" ] + }, + { + "id": 25, + "type": "GenerateImageLiteNodeV2", + "pos": [ + 404.58843994140625, + 532.5309448242188 + ], + "size": [ + 270, + 290 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "images", + "shape": 7, + "type": "IMAGE", + "link": null + }, + { + "name": "structured_prompt", + "shape": 7, + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 34 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 35 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 36 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": [ + 45 + ] + }, + { + "name": "seed", + "type": "INT", + "links": [ + 46 + ] + } + ], + "properties": { + "Node name for S&R": "GenerateImageLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "FIBO", + "", + "1:1", + 8, + 5, + 123456, + "randomize" + ] + }, + { + "id": 27, + "type": "RefineImageLiteNodeV2", + "pos": [ + 820.26611328125, + 558.9785766601562 + ], + "size": [ + 270, + 290 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "structured_prompt", + "type": "STRING", + "widget": { + "name": "structured_prompt" + }, + "link": 45 + }, + { + "name": "seed", + "shape": 7, + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 46 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 44 + ] + }, + { + "name": "structured_prompt", + "type": "STRING", + "links": null + }, + { + "name": "seed", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "RefineImageLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "", + "FIBO", + "1:1", + 8, + 5, + 123456, + "randomize" + ] + }, + { + "id": 21, + "type": "GenerateStructuredPromptLiteNodeV2", + "pos": [ + 3.162916421890259, + 587.301025390625 + ], + "size": [ + 310.7749938964844, + 174 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "images", + "shape": 7, + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "structured_prompt", + "type": "STRING", + "links": [ + 34 + ] + }, + { + "name": "seed", + "type": "INT", + "links": [ + 35 + ] + } + ], + "properties": { + "Node name for S&R": "GenerateStructuredPromptLiteNodeV2" + }, + "widgets_values": [ + "BRIA_API_TOKEN", + "", + "", + 123456, + "randomize" + ] } ], "links": [ [ - 9, - 11, + 27, + 20, + 0, + 24, + 1, + "STRING" + ], + [ + 28, + 20, + 1, + 24, + 2, + "INT" + ], + [ + 29, + 24, 0, 6, 0, "IMAGE" ], [ - 13, - 14, + 34, + 21, + 0, + 25, + 1, + "STRING" + ], + [ + 35, + 21, + 1, + 25, + 2, + "INT" + ], + [ + 36, + 25, 0, 15, 0, "IMAGE" ], [ - 17, - 20, - 0, - 11, + 41, + 24, 1, + 26, + 0, "STRING" ], [ - 18, - 20, - 1, - 11, + 42, + 24, 2, + 26, + 1, "INT" ], [ - 19, - 21, - 0, - 14, - 1, - "STRING" - ], - [ - 20, - 21, - 1, - 14, - 2, - "INT" - ], - [ - 21, - 23, + 43, + 26, 0, 5, 0, "IMAGE" ], [ - 22, - 11, - 1, - 23, - 0, - "STRING" - ], - [ - 23, - 11, - 2, - 23, - 1, - "INT" - ], - [ - 24, - 14, - 1, - 22, - 0, - "STRING" - ], - [ - 25, - 14, - 2, - 22, - 1, - "INT" - ], - [ - 26, - 22, + 44, + 27, 0, 17, 0, "IMAGE" + ], + [ + 45, + 25, + 1, + 27, + 0, + "STRING" + ], + [ + 46, + 25, + 2, + 27, + 1, + "INT" ] ], "groups": [], "config": {}, "extra": { "ds": { - "scale": 0.6904379352119753, + "scale": 0.6276708501927047, "offset": [ - 474.44702633928136, - 63.30066202433597 + 650.5506889681789, + 132.55696596915172 ] }, "frontendVersion": "1.25.11" From 15b69d2a03266acd125e1c827793043fdc3c1331 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Thu, 11 Dec 2025 14:01:19 +0000 Subject: [PATCH 8/9] fix_fibo_lite_steps --- nodes/generate_image_node_v2.py | 2 +- nodes/refine_image_node_v2.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nodes/generate_image_node_v2.py b/nodes/generate_image_node_v2.py index 8bf2add..519495f 100644 --- a/nodes/generate_image_node_v2.py +++ b/nodes/generate_image_node_v2.py @@ -170,7 +170,7 @@ class GenerateImageLiteNodeV2(_BaseGenerateImageNodeV2): """Lite Image Generation Node""" supports_negative_prompt = False default_steps = 8 - min_steps = 4 + min_steps = 8 max_steps = 30 def __init__(self): self.api_url = "https://engine.prod.bria-api.com/v2/image/generate/lite" \ No newline at end of file diff --git a/nodes/refine_image_node_v2.py b/nodes/refine_image_node_v2.py index babc264..e4210d7 100644 --- a/nodes/refine_image_node_v2.py +++ b/nodes/refine_image_node_v2.py @@ -190,7 +190,7 @@ class RefineImageLiteNodeV2(_BaseRefineImageNodeV2): supports_negative_prompt = False supports_negative_prompt = False default_steps = 8 - min_steps = 4 + min_steps = 8 max_steps = 30 def __init__(self): From 00de95a160240be72558bd6ff24050b92c51ada2 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Thu, 11 Dec 2025 20:35:51 +0000 Subject: [PATCH 9/9] update min steps for fibo --- nodes/generate_image_node_v2.py | 2 +- nodes/refine_image_node_v2.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nodes/generate_image_node_v2.py b/nodes/generate_image_node_v2.py index 519495f..ca75c65 100644 --- a/nodes/generate_image_node_v2.py +++ b/nodes/generate_image_node_v2.py @@ -17,7 +17,7 @@ class _BaseGenerateImageNodeV2: supports_negative_prompt = True # Can be overridden by subclasses # STEP SETTINGS (defaults for standard API) default_steps = 50 - min_steps = 20 + min_steps = 35 max_steps = 50 @classmethod diff --git a/nodes/refine_image_node_v2.py b/nodes/refine_image_node_v2.py index e4210d7..551ad62 100644 --- a/nodes/refine_image_node_v2.py +++ b/nodes/refine_image_node_v2.py @@ -10,7 +10,7 @@ class _BaseRefineImageNodeV2: supports_negative_prompt = True # Can be overridden by subclasses # STEP SETTINGS (defaults for standard API) default_steps = 50 - min_steps = 20 + min_steps = 35 max_steps = 50 @classmethod def INPUT_TYPES(cls):