WebUI Prompt Bridge
Missing the A1111 prompt box? This node brings it to ComfyUI
- model
- clip
- regional_mask
- model
- clip
- positive
- negative
- positive_text
- negative_text
- lora_info
- module_config
- image
- mask
- img2img_denoise
- img2img_mode
If you came over from AUTOMATIC1111 or Forge, the first thing ComfyUI makes you give up is the prompt box. ComfyUI's plain text fields are great at wiring nodes together and terrible at editing a hundred tags. The WebUI Prompt Bridge is the direct answer to that: it's a full WebUI-style prompt workspace that lives inside one ComfyUI node - tag chips you can drag and reorder, autocomplete with Chinese explanations, translation, favorites, prompt history, styles, a LoRA browser, regional prompts and generation-parameter takeover.
Before anything else, kill the obvious worry: the name is a lie in the good way. It doesn't call any API, it doesn't need a WebUI running, and there's no key. It will happily read tags and styles from a local A1111/Forge install if you point it at one, but out of the box it ships its own complete Danbooru tag data and autocomplete, fully offline. The "bridge" is between the two tools' strengths: WebUI does the prompt editing, ComfyUI does the workflow.
How it works
It's a real node, not a passthrough. You feed it model and clip, and it does the LoRA loading, the conditioning encoding, and - if you turn the modules on - the whole img2img and detailer configuration in one pass.
The interesting part is LoRA. You write <lora:my-style:0.75> in the prompt and the node parses it, resolves the file against your models/loras folder, calls ComfyUI's own LoRA loading logic (load_lora_for_models), strips the tag from the text that actually reaches the text encoder, and hands you back the LoRA-modified model and clip. That fixes the classic failure where your prompt says a LoRA is applied but the sampler never loaded it. fail_on_missing_lora defaults to true, so a typo'd LoRA name stops the run with an error instead of silently generating without it.
Inputs and outputs that matter
Required inputs are just model and clip. After that you mostly live in positive_prompt and negative_prompt, plus a few knobs:
fail_on_missing_lora- keep it true. It's the difference between finding out a LoRA is missing now vs. after a wasted render.regional_enabled/regional_split/regional_ratios- turn on WebUI-style regional prompting (BREAK-based matrix regions, split vertical/horizontal/grid).- The
module_*family (adetailer, controlnet, sam, upscale, img2img) - these are the settings that the pack's helper nodes consume. - The
generation_*family - let the Bridge own width, height, steps and seed when you don't have upstream constants.
Outputs: positive and negative conditioning go to your KSampler; model/clip carry the applied LoRAs; positive_text/negative_text are the cleaned prompts; module_config is a JSON blob the other Bridge nodes read; and image, mask, img2img_denoise, img2img_mode feed the img2img path.
How to install
Install the whole pack, this node comes with it. In ComfyUI-Manager search ComfyUI WebUI Prompt Bridge (registry id comfyui-webui-prompt-bridge) and install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/dianfangsihuo/ComfyUI-WebUI-Prompt-Bridge.git
pip install -r ComfyUI-WebUI-Prompt-Bridge/requirements.txt
Restart ComfyUI and add it under conditioning/webui → WebUI Prompt Bridge. No model files are bundled - the pack only ships nodes and sample workflows. The bundled example workflow targets the Anima/Qwen split-model setup, but it works fine with an ordinary SDXL/Pony/Illustrious checkpoint via CheckpointLoaderSimple.
Common issues
The classic trap is wiring LoRA wrong: the Bridge can only apply a LoRA if its model output actually reaches the sampler's model input. If you ignore the output and keep your original model wired, "LoRA matched" doesn't mean "LoRA used." Relatedly, switching a Qwen/Anima split-model workflow to a normal SDXL checkpoint means turning off the Qwen-specific reference/pose branches first. And if translations come out stubbed, you're on the built-in fallback - pointing the config at a WebUI with the Prompt All in One extension gets you the real thing. It's a Chinese-first project, so the docs and status strings are partly in Chinese; the core workflow is easy enough to follow once you know where the wires go.
Inputs (77)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| positive_prompt | STRING | masterpiece, best quality, anime style, 1girl, <lora:anima-highres-aesthetic-boost:0.65> | — |
| negative_prompt | STRING | worst quality, low quality, blurry, bad anatomy, extra fingers | — |
| default_clip_strength | FLOAT | 1.00-10–10 | — |
| fail_on_missing_lora | BOOLEAN | true | — |
| regional_enabled | BOOLEAN | false | — |
| regional_mode | COMBO | matrix | 1 options: matrix |
| regional_split | COMBO | vertical | 3 options: vertical, horizontal, grid |
| regional_ratios | STRING | 1,1 | — |
| regional_base_enabled | BOOLEAN | false | — |
| regional_common_enabled | BOOLEAN | false | — |
| regional_base_ratio | FLOAT | 0.200–1 | — |
| regional_strength | FLOAT | 1.000–10 | — |
| regional_canvas_auto | BOOLEAN | true | — |
| regional_canvas_width | INT | 102464–16384 | — |
| regional_canvas_height | INT | 102464–16384 | — |
| module_table_enabled | BOOLEAN | false | — |
| module_mask_enabled | BOOLEAN | false | — |
| module_mask_strength | FLOAT | 1.000–10 | — |
| module_mask_set_area_to_bounds | BOOLEAN | false | — |
| module_negative_common_enabled | BOOLEAN | false | — |
| module_negative_common_prompt | STRING | — | |
| module_flip_enabled | BOOLEAN | false | — |
| module_flip_axis | COMBO | auto | 3 options: auto, horizontal, vertical |
| module_presets_enabled | BOOLEAN | false | — |
| module_adetailer_enabled | BOOLEAN | false | — |
| module_adetailer_model | COMBO | face_yolov8m.pt | 9 options: face_yolov8m.pt, face_yolov8n.pt, face_yolov8s.pt, hand_yolov8s.pt, hand_yolov8n.pt, person_yolov8m-seg.pt, +3 |
| module_adetailer_prompt | STRING | detailed face, detailed eyes, detailed hands | — |
| module_adetailer_negative_prompt | STRING | bad anatomy, deformed, blurry, extra fingers | — |
| module_adetailer_confidence | FLOAT | 0.300–1 | — |
| module_adetailer_mask_blur | INT | 40–64 | — |
| module_adetailer_denoise | FLOAT | 0.400–1 | — |
| module_adetailer_inpaint_only_masked | BOOLEAN | true | — |
| module_adetailer_cycles | INT | 11–8 | — |
| module_controlnet_enabled | BOOLEAN | false | — |
| module_controlnet_preprocessor | COMBO | canny | 10 options: none, canny, depth, openpose, lineart, softedge, +4 |
| module_controlnet_model | STRING | — | |
| module_controlnet_weight | FLOAT | 1.000–2 | — |
| module_controlnet_start | FLOAT | 0.000–1 | — |
| module_controlnet_end | FLOAT | 1.000–1 | — |
| module_controlnet_resize_mode | COMBO | just_resize | 3 options: just_resize, crop_and_resize, resize_and_fill |
| module_controlnet_control_mode | COMBO | balanced | 3 options: balanced, prompt, control |
| module_controlnet_pixel_perfect | BOOLEAN | true | — |
| module_sam_enabled | BOOLEAN | false | — |
| module_sam_model | COMBO | sam_vit_b | 6 options: sam_vit_b, sam_vit_l, sam_vit_h, sam_hq_vit_h, mobile_sam, custom |
| module_sam_prompt_mode | COMBO | auto | 4 options: auto, point, box, mask |
| module_sam_confidence | FLOAT | 0.500–1 | — |
| module_sam_mask_blur | INT | 40–64 | — |
| module_sam_dilate | INT | 0-64–64 | — |
| module_sam_inpaint_denoise | FLOAT | 0.450–1 | — |
| module_sam_inpaint_area | COMBO | only_masked | 2 options: whole_picture, only_masked |
| module_sam_padding | INT | 320–512 | — |
| module_upscale_enabled | BOOLEAN | false | — |
| module_upscale_mode | COMBO | hires_fix | 4 options: hires_fix, ultimate_sd_upscale, latent_upscale, tile |
| module_upscale_by | FLOAT | 2.001–8 | — |
| module_upscale_upscaler | STRING | nearest-exact | — |
| module_upscale_steps | INT | 180–150 | — |
| module_upscale_denoise | FLOAT | 0.480–1 | — |
| module_upscale_tile_width | INT | 768128–4096 | — |
| module_upscale_tile_height | INT | 768128–4096 | — |
| module_upscale_overlap | INT | 640–1024 | — |
| module_regional_lora_enabled | BOOLEAN | false | — |
| module_img2img_image | STRING | — | |
| module_img2img_mask | STRING | — | |
| module_img2img_mode | COMBO | img2img | 2 options: img2img, inpaint |
| module_img2img_denoise | FLOAT | 0.550–1 | — |
| module_img2img_enabled | BOOLEAN | false | — |
| generation_size_enabled | BOOLEAN | false | — |
| generation_width | INT | 102464–16384 | — |
| generation_height | INT | 102464–16384 | — |
| generation_seed_enabled | BOOLEAN | false | — |
| generation_seed | INT | 10–18446744073709550000 | — |
| generation_steps_enabled | BOOLEAN | false | — |
| generation_steps | INT | 301–10000 | — |
| generation_seed_mode | COMBO | fixed | 4 options: fixed, increment, decrement, randomize |
| regional_maskopt | MASK | — |
Outputs (12)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| positive_text | STRING | — |
| negative_text | STRING | — |
| lora_info | STRING | — |
| module_config | STRING | — |
| image | IMAGE | — |
| mask | MASK | — |
| img2img_denoise | FLOAT | — |
| img2img_mode | STRING | — |