PVL Flux PuLID (fal.ai)
Put a face on a Flux image without installing InsightFace
- reference_image
- image
- request_id
PuLID is the identity adapter that gave Flux a face without wrecking prompt adherence - it beat InstantID on that front mostly because it actually shipped a Flux port. The usual way to run it locally means juggling the PuLID ComfyUI nodes, the insightface models, and a pile of weights that eat VRAM. This node skips all of that: it's a thin wrapper over fal.ai's fal-ai/flux-pulid endpoint, so you drop in a reference face, type a prompt, and get back an image of that person doing what you asked. Cloud inference, pay per image, no local model files.
It's part of pvlprk/comfyui-pvl-api-nodes, the "ComfyUI Assistant Node" grab bag. If you already have any other PVL fal node installed, this one's already on disk - no extra setup beyond a FAL_KEY.
How it works
The node converts your reference_image tensor to a base64 PNG and posts it (plus your prompt and settings) to https://fal.run/fal-ai/flux-pulid. The endpoint runs Flux with PuLID's identity embedding injected, then hands back the result, which the node converts back to a ComfyUI IMAGE. Note that it uses the base64 data-URI route, not the fal.storage upload route - so no temporary file upload dance, just a bigger JSON payload.
Inputs that matter
promptis the only required input - what the person is doing, wearing, or where they are.reference_imageis the face. One good, well-lit, front-facing shot beats five average ones.id_weight(default 1.0) is your likeness dial. Crank toward 2-3 if it doesn't look like them; drop it if the face starts to overpower everything else.true_cfg(default 1.0) andguidance_scale(default 4.0) are the Flux-specific CFG knobs. Leave them alone until you know what you're chasing.max_sequence_length(128/256/512, default 256) trades speed against prompt-following on long prompts.width/heightdefault to 1024, step 8.seed0 means random (only sent to the API if > 0).
Outputs: image (the generated IMAGE) and request_id - a string you can use to look the run up in your fal.ai dashboard.
Install
Via ComfyUI Manager (search "ComfyUI Assistant Node" / "pvlprk"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/pvlprk/comfyui-pvl-api-nodes
Restart, then set FAL_KEY in the environment that launches ComfyUI (it checks FAL_KEY, FAL_API_KEY, FAL_CLIENT_KEY). Full pack dependency install is heavy - diffusers, scikit-image, google-genai, etc. - but this node itself only needs requests.
Where people get burned
- It's paid. Each image burns fal credits, so the "generate 8 and pick the best" habit gets expensive fast.
- Face quality depends on the reference, not the node. A blurry, angled, or occluded reference gives you a worse likeness than PuLID locally would - same model, same limitation, just less control to compensate.
- The safety checker is off by default. The KB notes PuLID carries the InsightFace commercial licensing trap locally; via the API you sidestep the install, but know that the endpoint's own safety toggles are on you. Flip
enable_safety_checkeron if you're shipping output anywhere.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| reference_imageopt | IMAGE | — | |
| negative_promptopt | STRING | bad quality, worst quality, text, signature, watermark, extra limbs | — |
| widthopt | INT | 102464–4096 | — |
| heightopt | INT | 102464–4096 | — |
| num_inference_stepsopt | INT | 201–100 | — |
| guidance_scaleopt | FLOAT | 4.000–20 | — |
| true_cfgopt | FLOAT | 1.000–10 | — |
| id_weightopt | FLOAT | 1.000–10 | — |
| seedopt | INT | 00–2147483647 | — |
| enable_safety_checkeropt | BOOLEAN | false | — |
| max_sequence_lengthopt | COMBO | 256 | 3 options: 128, 256, 512 |
| start_stepopt | INT | 00–100 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| request_id | STRING | — |