feat: Add Bria Image Replace Background provider settings

- Added new Bria provider settings for Background Replace feature (bria:11@1)
- Implemented 5 new parameters: mode, enhanceReferenceImages, refinePrompt, originalQuality, forceBackgroundDetection
- Added useParams for all 12 Bria parameters to control parameter inclusion
- Implemented UI enable/disable toggle handler for better UX
- Updated clientlibs to handle Bria provider settings in UI
- Added workflow examples and model search updates
This commit is contained in:
Sirshendu Ganguly
2025-11-14 18:30:10 -05:00
parent 8a1ff27e43
commit 8c4cbd5ee6
7 changed files with 282 additions and 35 deletions
@@ -14,43 +14,119 @@ class RunwareBriaProviderSettings:
return {
"required": {},
"optional": {
"useMedium": ("BOOLEAN", {
"tooltip": "Enable to include medium parameter in API request. Disable if not needed.",
"default": False,
}),
"medium": (["None", "photography", "art"], {
"tooltip": "Select the medium type for image generation",
"tooltip": "Select the medium type for image generation. Only used when 'Use Medium' is enabled.",
"default": "photography",
}),
"usePromptEnhancement": ("BOOLEAN", {
"tooltip": "Enable to include promptEnhancement parameter in API request.",
"default": False,
}),
"promptEnhancement": ("BOOLEAN", {
"tooltip": "When set to true, enhances the provided prompt by generating additional, more descriptive variations, resulting in more diverse and creative output images. Note that turning this flag on may result in a few additional seconds to the inference time.",
"tooltip": "When set to true, enhances the provided prompt by generating additional, more descriptive variations, resulting in more diverse and creative output images. Note that turning this flag on may result in a few additional seconds to the inference time. Only used when 'Use Prompt Enhancement' is enabled.",
"default": False,
"label_on": "Enabled",
"label_off": "Disabled",
}),
"useEnhanceImage": ("BOOLEAN", {
"tooltip": "Enable to include enhanceImage parameter in API request.",
"default": False,
}),
"enhanceImage": ("BOOLEAN", {
"tooltip": "When set to true, generates images with richer details, sharper textures, and enhanced clarity. Slightly increases generation time per image.",
"tooltip": "When set to true, generates images with richer details, sharper textures, and enhanced clarity. Slightly increases generation time per image. Only used when 'Use Enhance Image' is enabled.",
"default": False,
"label_on": "Enabled",
"label_off": "Disabled",
}),
"usePromptContentModeration": ("BOOLEAN", {
"tooltip": "Enable to include promptContentModeration parameter in API request.",
"default": False,
}),
"promptContentModeration": ("BOOLEAN", {
"tooltip": "When enabled (default: true), the input prompt is scanned for NSFW or ethically restricted terms before image generation. If the prompt violates Bria's ethical guidelines, the request will be rejected with a 408 error.",
"tooltip": "When enabled (default: true), the input prompt is scanned for NSFW or ethically restricted terms before image generation. If the prompt violates Bria's ethical guidelines, the request will be rejected with a 408 error. Only used when 'Use Prompt Content Moderation' is enabled.",
"default": True,
"label_on": "Enabled",
"label_off": "Disabled",
}),
"useContentModeration": ("BOOLEAN", {
"tooltip": "Enable to include contentModeration parameter in API request.",
"default": False,
}),
"contentModeration": ("BOOLEAN", {
"tooltip": "When enabled, applies content moderation to both input visuals and generated outputs.",
"tooltip": "When enabled, applies content moderation to both input visuals and generated outputs. Only used when 'Use Content Moderation' is enabled.",
"default": True,
"label_on": "Enabled",
"label_off": "Disabled",
}),
"useIpSignal": ("BOOLEAN", {
"tooltip": "Enable to include ipSignal parameter in API request.",
"default": False,
}),
"ipSignal": ("BOOLEAN", {
"tooltip": "Flags prompts with potential IP content. If detected, a warning will be included in the response.",
"tooltip": "Flags prompts with potential IP content. If detected, a warning will be included in the response. Only used when 'Use IP Signal' is enabled.",
"default": False,
"label_on": "Enabled",
"label_off": "Disabled",
}),
"usePreserveAlpha": ("BOOLEAN", {
"tooltip": "Enable to include preserveAlpha parameter in API request.",
"default": False,
}),
"preserveAlpha": ("BOOLEAN", {
"tooltip": "Preserve alpha channel in the image.",
"default": None,
"tooltip": "Preserve alpha channel in the image. Only used when 'Use Preserve Alpha' is enabled.",
"default": False,
"label_on": "Enabled",
"label_off": "Disabled",
}),
"useMode": ("BOOLEAN", {
"tooltip": "Enable to include mode parameter in API request for Background Replace.",
"default": False,
}),
"mode": (["None", "base", "high_control", "fast"], {
"tooltip": "Selects the background-generation mode for Background Replace. Base: clean, high quality backgrounds. High_control: stronger prompt adherence and scene context, finer control over layout and details. Fast: same core capabilities as base, optimal speed and quality balance. Only used when 'Use Mode' is enabled.",
"default": "base",
}),
"useEnhanceReferenceImages": ("BOOLEAN", {
"tooltip": "Enable to include enhanceReferenceImages parameter in API request.",
"default": False,
}),
"enhanceReferenceImages": ("BOOLEAN", {
"tooltip": "When set to true, additional logic processes the included reference image to make adjustments for optimal results. Only used when 'Use Enhance Reference Images' is enabled.",
"default": True,
"label_on": "Enabled",
"label_off": "Disabled",
}),
"useRefinePrompt": ("BOOLEAN", {
"tooltip": "Enable to include refinePrompt parameter in API request.",
"default": False,
}),
"refinePrompt": ("BOOLEAN", {
"tooltip": "When true, an additional logic takes the prompt that was included and adjusts it to achieve optimal results. Only used when 'Use Refine Prompt' is enabled.",
"default": True,
"label_on": "Enabled",
"label_off": "Disabled",
}),
"useOriginalQuality": ("BOOLEAN", {
"tooltip": "Enable to include originalQuality parameter in API request.",
"default": False,
}),
"originalQuality": ("BOOLEAN", {
"tooltip": "When true, the output image retains the original input image's size; otherwise, the image is scaled to 1 megapixel (1MP) while preserving its aspect ratio. Only used when 'Use Original Quality' is enabled.",
"default": True,
"label_on": "Enabled",
"label_off": "Disabled",
}),
"useForceBackgroundDetection": ("BOOLEAN", {
"tooltip": "Enable to include forceBackgroundDetection parameter in API request.",
"default": False,
}),
"forceBackgroundDetection": ("BOOLEAN", {
"tooltip": "When true, forces background detection and removal, even if the original image already contains an alpha channel. Useful for refining existing foreground/background separation or ignoring unnecessary alpha channels. Only used when 'Use Force Background Detection' is enabled.",
"default": False,
"label_on": "Enabled",
"label_off": "Disabled",
}),
@@ -61,51 +137,90 @@ class RunwareBriaProviderSettings:
RETURN_NAMES = ("providerSettings",)
FUNCTION = "create_provider_settings"
CATEGORY = "Runware/Provider Settings"
DESCRIPTION = "Configure Bria-specific provider settings for image generation including medium type, prompt enhancement, image enhancement, and content moderation options."
DESCRIPTION = "Configure Bria-specific provider settings for image generation and background replacement including medium type, prompt enhancement, image enhancement, content moderation options, and background replace mode settings."
def create_provider_settings(self, **kwargs) -> tuple[Dict[str, Any]]:
"""Create Bria provider settings"""
# Get parameters
# Get use parameters
useMedium = kwargs.get("useMedium", False)
usePromptEnhancement = kwargs.get("usePromptEnhancement", False)
useEnhanceImage = kwargs.get("useEnhanceImage", False)
usePromptContentModeration = kwargs.get("usePromptContentModeration", False)
useContentModeration = kwargs.get("useContentModeration", False)
useIpSignal = kwargs.get("useIpSignal", False)
usePreserveAlpha = kwargs.get("usePreserveAlpha", False)
useMode = kwargs.get("useMode", False)
useEnhanceReferenceImages = kwargs.get("useEnhanceReferenceImages", False)
useRefinePrompt = kwargs.get("useRefinePrompt", False)
useOriginalQuality = kwargs.get("useOriginalQuality", False)
useForceBackgroundDetection = kwargs.get("useForceBackgroundDetection", False)
# Get actual parameters
medium = kwargs.get("medium", "photography")
promptEnhancement = kwargs.get("promptEnhancement", False)
enhanceImage = kwargs.get("enhanceImage", False)
promptContentModeration = kwargs.get("promptContentModeration", True)
contentModeration = kwargs.get("contentModeration", True)
ipSignal = kwargs.get("ipSignal", False)
preserveAlpha = kwargs.get("preserveAlpha", None)
preserveAlpha = kwargs.get("preserveAlpha", False)
mode = kwargs.get("mode", "base")
enhanceReferenceImages = kwargs.get("enhanceReferenceImages", True)
refinePrompt = kwargs.get("refinePrompt", True)
originalQuality = kwargs.get("originalQuality", True)
forceBackgroundDetection = kwargs.get("forceBackgroundDetection", False)
# Build settings dictionary
settings = {}
# Add medium
if medium is not None and medium != "None":
# Add medium only if useMedium is enabled
if useMedium and medium is not None and medium != "None":
settings["medium"] = medium
# Add promptEnhancement
if promptEnhancement is not None:
# Add promptEnhancement only if usePromptEnhancement is enabled
if usePromptEnhancement:
settings["promptEnhancement"] = promptEnhancement
# Add enhanceImage
if enhanceImage is not None:
# Add enhanceImage only if useEnhanceImage is enabled
if useEnhanceImage:
settings["enhanceImage"] = enhanceImage
# Add promptContentModeration
if promptContentModeration is not None:
# Add promptContentModeration only if usePromptContentModeration is enabled
if usePromptContentModeration:
settings["promptContentModeration"] = promptContentModeration
# Add contentModeration
if contentModeration is not None:
# Add contentModeration only if useContentModeration is enabled
if useContentModeration:
settings["contentModeration"] = contentModeration
# Add ipSignal
if ipSignal is not None:
# Add ipSignal only if useIpSignal is enabled
if useIpSignal:
settings["ipSignal"] = ipSignal
# Add preserveAlpha
if preserveAlpha is not None:
# Add preserveAlpha only if usePreserveAlpha is enabled
if usePreserveAlpha:
settings["preserveAlpha"] = preserveAlpha
# Add mode only if useMode is enabled (for Background Replace)
if useMode and mode is not None and mode != "None":
settings["mode"] = mode
# Add enhanceReferenceImages only if useEnhanceReferenceImages is enabled
if useEnhanceReferenceImages:
settings["enhanceReferenceImages"] = enhanceReferenceImages
# Add refinePrompt only if useRefinePrompt is enabled
if useRefinePrompt:
settings["refinePrompt"] = refinePrompt
# Add originalQuality only if useOriginalQuality is enabled
if useOriginalQuality:
settings["originalQuality"] = originalQuality
# Add forceBackgroundDetection only if useForceBackgroundDetection is enabled
if useForceBackgroundDetection:
settings["forceBackgroundDetection"] = forceBackgroundDetection
# Clean up None values
settings = {k: v for k, v in settings.items() if v is not None}
+1 -1
View File
@@ -158,7 +158,7 @@ def getCustomEndpoint():
custom_endpoint = os.getenv("RUNWARE_CUSTOM_ENDPOINT")
if custom_endpoint and isinstance(custom_endpoint, str):
return custom_endpoint
return "https://api.runware.dev/v1"
return "https://api.runware.ai/v1"
SESSION_TIMEOUT = getTimeout()
RUNWARE_API_KEY = getAPIKey()
+4 -7
View File
@@ -252,15 +252,12 @@ class videoModelSearch:
dimensions = self.MODEL_DIMENSIONS.get(modelAirCode, self.DEFAULT_DIMENSIONS)
if useResolution:
width = customWidth if customWidth > 0 else dimensions["width"]
height = customHeight if customHeight > 0 else dimensions["height"]
width = dimensions["width"]
height = dimensions["height"]
if width == 0 and height == 0:
width = None
height = None
else:
width = 0
height = 0
width = None
height = None
return ({
"model": modelAirCode,