zhenzhen-bria-fibo-edit-fal
Instruction editing that respects your mask (when you want one)
- image
- mask
- images
- response
- image_urls
BRIA is the commercial image-editing house that keeps a low profile - no hype threads, just dependable hosted editing APIs that e-commerce and stock teams actually pay for. Fibo is their instruction-following image editor: you type "change lighting to starlight nighttime" and the whole frame re-renders to match. This node wraps bria/fibo-edit/edit through the Zhenzhen API, so you get BRIA's editor without a BRIA account, paying per image in workshop credits instead.
The thing that sets Fibo apart from Bernini-style editing is the optional mask. Bernini edits the whole frame and hopes you like it. Fibo can do the same whole-frame instruction edit, or you can wire in a mask so the instruction only touches the region you care about - the classic recipe for "change the background but leave the product untouched." That makes it a genuinely useful middle ground between maskless editing and full inpaint pipelines.
How it works
Standard Zhenzhen FAL flow under the hood: the node POSTs your image (base64 by default) plus your instruction to the proxy, polls every few seconds until the job finishes, downloads the result, and returns an IMAGE. The sync_mode toggle exists if you'd rather the request block inline than poll. There's no local compute and no mask segmentation happening on your machine - if you're generating a mask from a MASK tensor, you'll need a mask-to-image converter (e.g. a Mask→Image node) in front, because the input slot takes an IMAGE.
Inputs and outputs that matter
The required input is instruction - a natural-language edit command, and the default "change lighting to starlight nighttime" is a decent template for how to phrase them. Then:
image- your sourceIMAGEtensor (orimage_url). Required in practice; the node errors without it.mask- optionalIMAGE. When supplied, the edit is confined to it. This is Fibo's superpower and the reason to pick it over the maskless edit nodes.guidance_scale- 5.0 default. Adherence knob; 7-8 for strong instructions, lower if edits feel over-applied.steps_num- 30 default (20-100). More steps, finer result, more cost.negative_prompt- optional; useful for steering away from artifacts in whole-frame edits.seed- default is 5555, not 0, so output is reproducible until you change it. FAL caps at 65535.skip_error- on, a failed call returns a placeholder instead of killing your batch.
Outputs: images (the edited IMAGE), response (raw JSON), image_urls (hosted result URLs).
Installing it
One pack, one clone:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
Restart ComfyUI, or install "Comfyui-zhenzhen" via ComfyUI Manager. No model downloads - this pack is pure HTTP plumbing.
Common issues
The pack-level gotchas: you need a Zhenzhen account with credit, the overseas API can throw 443 from some networks (VPN with TUN mode), and 500s on first run are usually upstream - re-run before debugging. For Fibo specifically, the most common mistake is treating it like a masked inpaint model and expecting the mask to come from a MASK tensor directly - it takes an IMAGE, so convert first. And if whole-frame edits come out too strong, lower guidance_scale before you blame the prompt; this model will happily over-apply.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| instruction | STRING | change lighting to starlight nighttime | — |
| imageopt | IMAGE | — | |
| maskopt | IMAGE | — | |
| image_urlopt | STRING | — | |
| mask_urlopt | STRING | — | |
| api_keyopt | STRING | — | |
| seedopt | INT | 55550–65535 | 0 = random seed. FAL seed max is 65535. |
| steps_numopt | INT | 3020–100 | — |
| negative_promptopt | STRING | — | |
| guidance_scaleopt | FLOAT | 5.00–30 | — |
| sync_modeopt | BOOLEAN | false | — |
| image_wayopt | COMBO | base64 | 2 options: base64, image_url |
| poll_intervalopt | INT | 61–60 | — |
| max_poll_attemptsopt | INT | 60010–3600 | Default 600*6s = 3600s timeout. |
| skip_erroropt | BOOLEAN | false | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| response | STRING | — |
| image_urls | STRING | — |