ComfyUI Node

WebUI Prompt Bridge

Missing the A1111 prompt box? This node brings it to ComfyUI

By dianfangsihuo·Created 4 months ago·Updated 15 days ago· 52
WebUI Prompt Bridge
  • model
  • clip
  • regional_mask
  • model
  • clip
  • positive
  • negative
  • positive_text
  • negative_text
  • lora_info
  • module_config
  • image
  • mask
  • img2img_denoise
  • img2img_mode
◄positive_promptmasterpiece, best quality, anime style, 1girl, <lora:anima-highres-aesthetic-boost:0.65>►
◄negative_promptworst quality, low quality, blurry, bad anatomy, extra fingers►
◄default_clip_strength1.00►
◄fail_on_missing_loratrue►
◄regional_enabledfalse►
◄regional_modematrix►
◄regional_splitvertical►
◄regional_ratios1,1►
◄regional_base_enabledfalse►
◄regional_common_enabledfalse►
◄regional_base_ratio0.20►
◄regional_strength1.00►
◄regional_canvas_autotrue►
◄regional_canvas_width1024►
◄regional_canvas_height1024►
◄module_table_enabledfalse►
◄module_mask_enabledfalse►
◄module_mask_strength1.00►
◄module_mask_set_area_to_boundsfalse►
◄module_negative_common_enabledfalse►
◄module_negative_common_prompt►
◄module_flip_enabledfalse►
◄module_flip_axisauto►
◄module_presets_enabledfalse►
◄module_adetailer_enabledfalse►
◄module_adetailer_modelface_yolov8m.pt►
◄module_adetailer_promptdetailed face, detailed eyes, detailed hands►
◄module_adetailer_negative_promptbad anatomy, deformed, blurry, extra fingers►
◄module_adetailer_confidence0.30►
◄module_adetailer_mask_blur4►
◄module_adetailer_denoise0.40►
◄module_adetailer_inpaint_only_maskedtrue►
◄module_adetailer_cycles1►
◄module_controlnet_enabledfalse►
◄module_controlnet_preprocessorcanny►
◄module_controlnet_model►
◄module_controlnet_weight1.00►
◄module_controlnet_start0.00►
◄module_controlnet_end1.00►
◄module_controlnet_resize_modejust_resize►
◄module_controlnet_control_modebalanced►
◄module_controlnet_pixel_perfecttrue►
◄module_sam_enabledfalse►
◄module_sam_modelsam_vit_b►
◄module_sam_prompt_modeauto►
◄module_sam_confidence0.50►
◄module_sam_mask_blur4►
◄module_sam_dilate0►
◄module_sam_inpaint_denoise0.45►
◄module_sam_inpaint_areaonly_masked►
◄module_sam_padding32►
◄module_upscale_enabledfalse►
◄module_upscale_modehires_fix►
◄module_upscale_by2.00►
◄module_upscale_upscalernearest-exact►
◄module_upscale_steps18►
◄module_upscale_denoise0.48►
◄module_upscale_tile_width768►
◄module_upscale_tile_height768►
◄module_upscale_overlap64►
◄module_regional_lora_enabledfalse►
◄module_img2img_image►
◄module_img2img_mask►
◄module_img2img_modeimg2img►
◄module_img2img_denoise0.55►
◄module_img2img_enabledfalse►
◄generation_size_enabledfalse►
◄generation_width1024►
◄generation_height1024►
◄generation_seed_enabledfalse►
◄generation_seed1►
◄generation_steps_enabledfalse►
◄generation_steps30►
◄generation_seed_modefixed►

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.

Categoryconditioning/webui

Inputs (77)

NameTypeDefaultDescription
modelMODEL—
clipCLIP—
positive_promptSTRINGmasterpiece, best quality, anime style, 1girl, <lora:anima-highres-aesthetic-boost:0.65>—
negative_promptSTRINGworst quality, low quality, blurry, bad anatomy, extra fingers—
default_clip_strengthFLOAT1.00-10–10—
fail_on_missing_loraBOOLEANtrue—
regional_enabledBOOLEANfalse—
regional_modeCOMBOmatrix1 options: matrix
regional_splitCOMBOvertical3 options: vertical, horizontal, grid
regional_ratiosSTRING1,1—
regional_base_enabledBOOLEANfalse—
regional_common_enabledBOOLEANfalse—
regional_base_ratioFLOAT0.200–1—
regional_strengthFLOAT1.000–10—
regional_canvas_autoBOOLEANtrue—
regional_canvas_widthINT102464–16384—
regional_canvas_heightINT102464–16384—
module_table_enabledBOOLEANfalse—
module_mask_enabledBOOLEANfalse—
module_mask_strengthFLOAT1.000–10—
module_mask_set_area_to_boundsBOOLEANfalse—
module_negative_common_enabledBOOLEANfalse—
module_negative_common_promptSTRING—
module_flip_enabledBOOLEANfalse—
module_flip_axisCOMBOauto3 options: auto, horizontal, vertical
module_presets_enabledBOOLEANfalse—
module_adetailer_enabledBOOLEANfalse—
module_adetailer_modelCOMBOface_yolov8m.pt9 options: face_yolov8m.pt, face_yolov8n.pt, face_yolov8s.pt, hand_yolov8s.pt, hand_yolov8n.pt, person_yolov8m-seg.pt, +3
module_adetailer_promptSTRINGdetailed face, detailed eyes, detailed hands—
module_adetailer_negative_promptSTRINGbad anatomy, deformed, blurry, extra fingers—
module_adetailer_confidenceFLOAT0.300–1—
module_adetailer_mask_blurINT40–64—
module_adetailer_denoiseFLOAT0.400–1—
module_adetailer_inpaint_only_maskedBOOLEANtrue—
module_adetailer_cyclesINT11–8—
module_controlnet_enabledBOOLEANfalse—
module_controlnet_preprocessorCOMBOcanny10 options: none, canny, depth, openpose, lineart, softedge, +4
module_controlnet_modelSTRING—
module_controlnet_weightFLOAT1.000–2—
module_controlnet_startFLOAT0.000–1—
module_controlnet_endFLOAT1.000–1—
module_controlnet_resize_modeCOMBOjust_resize3 options: just_resize, crop_and_resize, resize_and_fill
module_controlnet_control_modeCOMBObalanced3 options: balanced, prompt, control
module_controlnet_pixel_perfectBOOLEANtrue—
module_sam_enabledBOOLEANfalse—
module_sam_modelCOMBOsam_vit_b6 options: sam_vit_b, sam_vit_l, sam_vit_h, sam_hq_vit_h, mobile_sam, custom
module_sam_prompt_modeCOMBOauto4 options: auto, point, box, mask
module_sam_confidenceFLOAT0.500–1—
module_sam_mask_blurINT40–64—
module_sam_dilateINT0-64–64—
module_sam_inpaint_denoiseFLOAT0.450–1—
module_sam_inpaint_areaCOMBOonly_masked2 options: whole_picture, only_masked
module_sam_paddingINT320–512—
module_upscale_enabledBOOLEANfalse—
module_upscale_modeCOMBOhires_fix4 options: hires_fix, ultimate_sd_upscale, latent_upscale, tile
module_upscale_byFLOAT2.001–8—
module_upscale_upscalerSTRINGnearest-exact—
module_upscale_stepsINT180–150—
module_upscale_denoiseFLOAT0.480–1—
module_upscale_tile_widthINT768128–4096—
module_upscale_tile_heightINT768128–4096—
module_upscale_overlapINT640–1024—
module_regional_lora_enabledBOOLEANfalse—
module_img2img_imageSTRING—
module_img2img_maskSTRING—
module_img2img_modeCOMBOimg2img2 options: img2img, inpaint
module_img2img_denoiseFLOAT0.550–1—
module_img2img_enabledBOOLEANfalse—
generation_size_enabledBOOLEANfalse—
generation_widthINT102464–16384—
generation_heightINT102464–16384—
generation_seed_enabledBOOLEANfalse—
generation_seedINT10–18446744073709550000—
generation_steps_enabledBOOLEANfalse—
generation_stepsINT301–10000—
generation_seed_modeCOMBOfixed4 options: fixed, increment, decrement, randomize
regional_maskoptMASK—

Outputs (12)

NameTypeDescription
modelMODEL—
clipCLIP—
positiveCONDITIONING—
negativeCONDITIONING—
positive_textSTRING—
negative_textSTRING—
lora_infoSTRING—
module_configSTRING—
imageIMAGE—
maskMASK—
img2img_denoiseFLOAT—
img2img_modeSTRING—