Bria FIBO Edit
Iterative image editing the way FIBO was meant to be used
- image
- advancedFeatures.watermark.image
- mask
- image
The interesting part of Bria FIBO was never text-to-image. It's that the model was trained on long structured captions specifically so you could go back and edit one attribute of a generated image - change the lighting, swap the framing, age the subject - without regenerating everything else. This node is that feature, packaged: you hand it an image, tell it what to change, and get an edited image back. And because it runs on Runware's cloud, you don't need the 16 GB transformer sitting in your models folder to do it.
This is also where the mask-based editing story still matters. The 2026 inpainting discourse has mostly moved to instruction-editing models - describe the fix, get a whole new image - because they're easier, and the catch is that unmasked regions drift a little on every pass. A mask pins the edit down so everything outside the region stays put. That's the exact job this node's optional mask input is for.
Inputs that matter
- image - required IMAGE. Your starting point.
- positivePrompt - required, multiline. Describe what to change. FIBO's long-caption training means it handles specific, structured edit instructions better than a model that only ever saw "a cat."
- mask - optional, and note the type: it's IMAGE, not the usual MASK. You'll often generate a mask with a segmentation or draw-it-yourself node and feed it as an image. It tells the model where the edit is allowed to happen, which is your defense against the whole image getting re-lit.
- steps (20–50), CFGScale (only 3/4/5 - FIBO is a low-guidance model, the node won't let you overshoot), seed, numberResults. Same family as the plain FIBO node.
Output is a single IMAGE socket. Into Preview Image or Save Image, as usual. If you're iterating - generate, edit, edit again - just feed this node's output back into its own image input next time. That loop is the whole workflow, and it's one of the few places in ComfyUI where an edit chain doesn't feel like you're wrestling the graph.
Install
Same pack as the rest of these: ComfyUI Manager → search Runware, or
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Restart, then set your Runware API key in Settings → Runware API key (or RUNWARE_API_KEY). No models to download - the request goes to Runware's servers and comes back as a native IMAGE tensor. Costs print on the node's title bar after each run, and numberResults is where the bill multiplies, so keep it at 1 while you're iterating.
The gotcha
Remember the license before you ship anything: FIBO weights and code are under a non-commercial Creative Commons license, and Bria got flak for calling it open source. For personal use, none of that matters and this node is genuinely the smoothest way to do targeted edits on the cloud. For a commercial product, check the terms before you build your pipeline on it.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| advancedFeatures.watermark.imageopt | IMAGE | — | |
| maskopt | IMAGE | — | |
| negativePromptopt | STRING | Prompt to guide what to exclude from generation. Ignored when guidance is disabled (CFGScale ≤ 1). | |
| seedopt | INT | 11–2147483647 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| stepsopt | INT | 5020–50 | Total number of denoising steps. Higher values generally produce more detailed results but take longer. |
| CFGScaleopt | COMBO | 5 | Guidance scale representing how closely the output will resemble the prompt. Higher values produce results more aligned with the prompt. |
| numberResultsopt | INT | 11–20 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| advancedFeaturesopt | BOOLEAN | false | Enable to set advancedFeatures. Off uses the model's default. |
| advancedFeatures.watermark.bgColoropt | STRING | Background color in hex format. | |
| advancedFeatures.watermark.displayPositionopt | COMBO | (default) | Watermark position. |
| advancedFeatures.watermark.fontColoropt | STRING | Text color in hex format. | |
| advancedFeatures.watermark.opacityopt | BOOLEAN | false | Enable to set advancedFeatures.watermark.opacity. Off uses the model's default. |
| advancedFeatures.watermark.opacity_valueopt | FLOAT | 0.100.1–1 | Watermark opacity. |
| advancedFeatures.watermark.textopt | STRING | Watermark text. | |
| providerSettings.bria.ipSignalopt | BOOLEAN | false | Flag potential IP-related content in prompt or output. |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | JPG | File format for the generated image. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |