ComfyUI/comfy_api_nodes/apis/bria.py

220 lines
7.9 KiB
Python

from typing import TypedDict
from pydantic import BaseModel, Field
class InputModerationSettings(TypedDict):
prompt_content_moderation: bool
visual_input_moderation: bool
visual_output_moderation: bool
class BriaEditImageRequest(BaseModel):
instruction: str | None = Field(...)
structured_instruction: str | None = Field(
...,
description="Use this instead of instruction for precise, programmatic control.",
)
images: list[str] = Field(
...,
description="Required. Publicly available URL or Base64-encoded. Must contain exactly one item.",
)
mask: str | None = Field(
None,
description="Mask image (black and white). Black areas will be preserved, white areas will be edited. "
"If omitted, the edit applies to the entire image. "
"The input image and the input mask must be of the same size.",
)
negative_prompt: str | None = Field(None)
guidance_scale: float = Field(...)
model_version: str = Field(...)
steps_num: int = Field(...)
seed: int = Field(...)
ip_signal: bool = Field(
False,
description="If true, returns a warning for potential IP content in the instruction.",
)
prompt_content_moderation: bool = Field(
False, description="If true, returns 422 on instruction moderation failure."
)
visual_input_content_moderation: bool = Field(
False, description="If true, returns 422 on images or mask moderation failure."
)
visual_output_content_moderation: bool = Field(
False, description="If true, returns 422 on visual output moderation failure."
)
class BriaRemoveBackgroundRequest(BaseModel):
image: str = Field(...)
sync: bool = Field(False)
visual_input_content_moderation: bool = Field(
False, description="If true, returns 422 on input image moderation failure."
)
visual_output_content_moderation: bool = Field(
False, description="If true, returns 422 on visual output moderation failure."
)
seed: int = Field(...)
class BriaGenFillRequest(BaseModel):
image: str = Field(...)
mask: str = Field(
...,
description="Binary mask defining the region to fill: white (255) pixels are generated, "
"black (0) pixels are preserved. Must have the same aspect ratio as the image.",
)
prompt: str = Field(...)
negative_prompt: str | None = Field(None)
refine_prompt: bool = Field(True)
seed: int = Field(...)
prompt_content_moderation: bool = Field(False, description="If true, returns 422 on prompt moderation failure.")
visual_input_content_moderation: bool = Field(
False, description="If true, returns 422 on image or mask moderation failure."
)
visual_output_content_moderation: bool = Field(
False, description="If true, returns 422 on visual output moderation failure."
)
class BriaEraseRequest(BaseModel):
image: str = Field(...)
mask: str = Field(
...,
description="Binary mask defining the region to erase: white (255) pixels are removed, "
"black (0) pixels are preserved. Must have the same aspect ratio as the image.",
)
mask_type: str = Field("manual", description="'manual' for hand-drawn masks, 'automatic' for segmentation masks.")
visual_input_content_moderation: bool = Field(
False, description="If true, returns 422 on image or mask moderation failure."
)
visual_output_content_moderation: bool = Field(
False, description="If true, returns 422 on visual output moderation failure."
)
class BriaExpandRequest(BaseModel):
image: str = Field(...)
aspect_ratio: str | float | None = Field(
None,
description="Target ratio: a preset string (1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9) "
"or a float between 0.5 and 3.0. When set, the canvas/placement fields are ignored.",
)
canvas_size: list[int] | None = Field(None, description="Output canvas [width, height]; area up to 5000x5000.")
original_image_size: list[int] | None = Field(
None, description="Size [width, height] of the original image inside the canvas."
)
original_image_location: list[int] | None = Field(
None,
description="Top-left corner [x, y] of the original image inside the canvas; "
"values may fall outside the canvas, cropping the image.",
)
prompt: str | None = Field(None, description="If omitted, Bria auto-generates a prompt from the image.")
negative_prompt: str | None = Field(None)
seed: int = Field(...)
prompt_content_moderation: bool = Field(False, description="If true, returns 422 on prompt moderation failure.")
visual_input_content_moderation: bool = Field(
False, description="If true, returns 422 on image moderation failure."
)
visual_output_content_moderation: bool = Field(
False, description="If true, returns 422 on visual output moderation failure."
)
class BriaIncreaseResolutionRequest(BaseModel):
image: str = Field(...)
desired_increase: int = Field(..., description="Resolution multiplier, 2 or 4.")
visual_input_content_moderation: bool = Field(
False, description="If true, returns 422 on image moderation failure."
)
visual_output_content_moderation: bool = Field(
False, description="If true, returns 422 on visual output moderation failure."
)
class BriaStatusResponse(BaseModel):
request_id: str = Field(...)
status_url: str = Field(...)
warning: str | None = Field(None)
class BriaRemoveBackgroundResult(BaseModel):
image_url: str = Field(...)
class BriaRemoveBackgroundResponse(BaseModel):
status: str = Field(...)
result: BriaRemoveBackgroundResult | None = Field(None)
class BriaImageResult(BaseModel):
image_url: str = Field(...)
class BriaImageResultResponse(BaseModel):
status: str = Field(...)
result: BriaImageResult | None = Field(None)
class BriaExpandResult(BaseModel):
image_url: str = Field(...)
prompt: str | None = Field(None)
seed: int | None = Field(None)
class BriaExpandResponse(BaseModel):
status: str = Field(...)
result: BriaExpandResult | None = Field(None)
class BriaImageEditResult(BaseModel):
structured_prompt: str = Field(...)
image_url: str = Field(...)
class BriaImageEditResponse(BaseModel):
status: str = Field(...)
result: BriaImageEditResult | None = Field(None)
class BriaRemoveVideoBackgroundRequest(BaseModel):
video: str = Field(...)
background_color: str = Field(default="transparent", description="Background color for the output video.")
output_container_and_codec: str = Field(...)
preserve_audio: bool = Field(True)
seed: int = Field(...)
class BriaRemoveVideoBackgroundResult(BaseModel):
video_url: str = Field(...)
class BriaRemoveVideoBackgroundResponse(BaseModel):
status: str = Field(...)
result: BriaRemoveVideoBackgroundResult | None = Field(None)
class BriaVideoGreenScreenRequest(BaseModel):
video: str = Field(..., description="Publicly accessible URL of the input video.")
green_shade: str = Field(
default="broadcast_green",
description="Solid chroma-key shade applied behind the foreground "
"(broadcast_green, chroma_green, or blue_screen).",
)
output_container_and_codec: str = Field(...)
preserve_audio: bool = Field(True)
seed: int = Field(...)
class BriaVideoReplaceBackgroundRequest(BaseModel):
video: str = Field(..., description="Publicly accessible URL of the input (foreground) video.")
background_url: str = Field(
...,
description="Publicly accessible URL of the background image or video to composite behind "
"the foreground. Stretched to the foreground frame; match its aspect ratio for "
"undistorted results.",
)
output_container_and_codec: str = Field(...)
preserve_audio: bool = Field(True)
seed: int = Field(...)