Concurrent Submit | zhenzhen-bria-genfill-v2-fal
30 mask-guided inpaints, one pool
- image
- mask
- task
BRIA GenFill v2 is the masked-inpaint specialist: only the region inside your mask gets regenerated, everything else stays bit-for-bit intact - the property that whole-frame instruction editors can't give you. Its blocking sibling, zhenzhen-bria-genfill-v2-fal, does one fill at a time. This submit node is the parallel version: same bria/genfill/v2 endpoint, same image-plus-mask contract, but each job drops into the shared 30-worker image pool and hands you a task instead of a picture.
If you've ever fixed the same defect across a folder - an errant logo, a watermark, a recurring background blemish on product shots - you know the serial pain. This is the workflow that makes the fix a single submit loop: image + mask pairs go into the pool, and the collector hands back all the fixed images in the same order. It's the most obvious "concurrent" win in the pack, because the masks make each job independent in a way text generation isn't.
How it works
The concurrent system auto-generates a submit class for every image node in the pack. This one wraps GenFill's process() in a bounded ThreadPoolExecutor (30 workers by default, set via COMFLY_IMAGE_CONCURRENCY) and returns a COMFLY_IMAGE_FUTURE. You collect with ComflyConcurrent_Image_Await ("Concurrent Collect Images (30)"), which waits for the whole batch and returns IMAGE tensors in slot order.
Inputs are identical to the base node: instruction (required - describe what appears in the masked area), image/image_url, mask/mask_url, api_key, steps_num (20-50 here), seed (default 5555), sync_mode, image_way, poll settings, and skip_error. Same trap as the base node: the mask slot takes an IMAGE, so convert MASK tensors first.
Installing it
One clone, whole pack:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
Restart ComfyUI, or install "Comfyui-zhenzhen" via ComfyUI Manager. No model downloads - the fills run on BRIA's servers.
Common issues
Pack-level: account + credit required, 443 errors mean VPN with TUN mode, first-run 500s are usually upstream - re-run. Batch-specific: masks are authoritative, so if ten of your thirty fills come back wrong, the odds are your masks are the problem, not the model - inspect one result before re-firing the batch. Soft mask edges give soft fills; for hard-edged product swaps, erode masks deliberately. And skip_error on means one bad pair doesn't torch the other 29. The meter note applies as always: 30 concurrent fills are 30 paid calls.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| instruction | STRING | A beautiful colorful butterfly | — |
| 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–50 | — |
| 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 (1)
| Name | Type | Description |
|---|---|---|
| task | COMFLY_IMAGE_FUTURE | — |