PVL Flux Lora PulID (fal.ai)
Flux, a face, and a LoRA — all from the same cloud call
- reference_image
- IMAGE
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) andreference_image(required) - the scene and the face.lora_path(optional string) withlora_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_sizepresets (default landscape_4_3) orcustom_width/custom_height;timeout(120s) anddebugfor 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_pathis 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_images4 fires 4 queued jobs; keep it at 1-2 while tuningid_weightand 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.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | a woman holding sign with glowing green text 'PuLID for FLUX' | — |
| reference_image | IMAGE | — | |
| num_images | INT | 11–4 | — |
| num_inference_steps | INT | 201–100 | — |
| guidance_scale | FLOAT | 4.01–20 | — |
| seed | INT | -1-1–4294967295 | — |
| enable_safety_checker | BOOLEAN | true | — |
| sync_mode | BOOLEAN | false | — |
| timeout | INT | 12030–600 | — |
| debug | BOOLEAN | false | — |
| delimiteropt | STRING | [*] | — |
| image_sizeopt | COMBO | landscape_4_3 | 6 options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9 |
| custom_widthopt | INT | 00–2048 | — |
| custom_heightopt | INT | 00–2048 | — |
| negative_promptopt | STRING | bad quality, worst quality, text, signature, watermark, extra limbs | — |
| lora_pathopt | STRING | — | |
| lora_strengthopt | FLOAT | 1.00–2 | — |
| start_stepopt | INT | 00–100 | — |
| true_cfgopt | FLOAT | 1.00–10 | — |
| id_weightopt | FLOAT | 1.00–5 | — |
| max_sequence_lengthopt | COMBO | 128 | 3 options: 128, 256, 512 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |