Nodes/ComfyUI Assistant Node/PVL Flux Lora PulID (fal.ai)
ComfyUI Node

PVL Flux Lora PulID (fal.ai)

Flux, a face, and a LoRA — all from the same cloud call

By pvlprk·Created about a year ago·Updated 8 months ago· 1
PVL Flux Lora PulID (fal.ai)
  • reference_image
  • IMAGE
prompta woman holding sign with glowing green text 'PuLID for FLUX'
num_images1
num_inference_steps20
guidance_scale4.0
seed-1
enable_safety_checkertrue
sync_modefalse
timeout120
debugfalse
delimiter[*]
image_sizelandscape_4_3
custom_width0
custom_height0
negative_promptbad quality, worst quality, text, signature, watermark, extra limbs
lora_path
lora_strength1.0
start_step0
true_cfg1.0
id_weight1.0
max_sequence_length128

You want three things at once: Flux's quality, a specific person's face, and a LoRA's style or character twist. Locally that means stacking PuLID on top of Flux, loading the LoRA, and hoping the VRAM budget holds - and it's exactly the stack that takes the longest to get right. This node runs the whole combo in the cloud instead: it wraps fal.ai's fal-ai/flux-pulid-lora endpoint, so a single call takes your reference face, your prompt, and an optional LoRA path, and returns the image. It's the more loaded sibling of the pack's plain PVL Flux PuLID node, and the (fal.ai) in its display name is the whole pitch: paid inference, no local weights.

It's part of pvlprk/comfyui-pvl-api-nodes, so it shares the pack's install and the pay-per-image reality. The KB notes PuLID is the identity adapter that won on Flux precisely because it shipped a Flux port - this endpoint bundles that port with LoRA support so you don't assemble the pieces yourself.

How it works

The node base64-encodes reference_image, splits your prompt on a delimiter (default [*]), and submits each resulting prompt as a separate request to the fal queue API (https://queue.fal.run/fal-ai/flux-pulid-lora). Then it polls until each request completes and returns the stacked results. The prompt-splitting logic is worth understanding: with num_images set, it takes the first N split prompts, and if you supplied fewer prompts than images it reuses the last one for the remainder - so one prompt can fan out into four variations, or four distinct prompts can each get one image.

Inputs that matter

  • prompt (required) and reference_image (required) - the scene and the face.
  • lora_path (optional string) with lora_strength (default 1.0) - the fal-side LoRA. Empty means no LoRA.
  • num_images (1-4, default 1) - how many results; pairs with the delimiter-split prompts.
  • id_weight (1.0) is the likeness dial, true_cfg (1.0) is Flux's CFG toggle, max_sequence_length (128) trades speed for long-prompt adherence.
  • image_size presets (default landscape_4_3) or custom_width/custom_height; timeout (120s) and debug for cloud hiccups.

Output: one IMAGE (a batch when num_images > 1).

Install

cd ComfyUI/custom_nodes
git clone https://github.com/pvlprk/comfyui-pvl-api-nodes

Restart ComfyUI and set FAL_KEY in the launching environment (fal.ai/dashboard). Standard for the pack; the requirements.txt over-installs but Manager sorts it.

Where people get burned

  • lora_path is fal-side, not your local folder. It has to be a path/name the fal deployment recognizes. Empty is the safe default until you've confirmed what's hosted.
  • Delimiter splitting changes your results count. Forgot you left [*] in the prompt? You'll get more images than you expected, and each is a paid call.
  • Multiple images = multiple costs. num_images 4 fires 4 queued jobs; keep it at 1-2 while tuning id_weight and the prompt.
  • It's identity + LoRA, not a magic bullet. Same PuLID limits as the plain node - a bad reference gives a weak likeness, and LoRA interactions are the model's call, so check your batch before scaling up.
CategoryPVL_tools_FAL

Inputs (21)

NameTypeDefaultDescription
promptSTRINGa woman holding sign with glowing green text 'PuLID for FLUX'
reference_imageIMAGE
num_imagesINT11–4
num_inference_stepsINT201–100
guidance_scaleFLOAT4.01–20
seedINT-1-1–4294967295
enable_safety_checkerBOOLEANtrue
sync_modeBOOLEANfalse
timeoutINT12030–600
debugBOOLEANfalse
delimiteroptSTRING[*]
image_sizeoptCOMBOlandscape_4_36 options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9
custom_widthoptINT00–2048
custom_heightoptINT00–2048
negative_promptoptSTRINGbad quality, worst quality, text, signature, watermark, extra limbs
lora_pathoptSTRING
lora_strengthoptFLOAT1.00–2
start_stepoptINT00–100
true_cfgoptFLOAT1.00–10
id_weightoptFLOAT1.00–5
max_sequence_lengthoptCOMBO1283 options: 128, 256, 512

Outputs (1)

NameTypeDescription
IMAGEIMAGE