Nodes/ComfyUI Assistant Node/PVL Flux.2 Dev (fal.ai)
ComfyUI Node

PVL Flux.2 Dev (fal.ai)

Flux 2 Dev in ComfyUI without the 24 GB of VRAM

By pvlprk·Created about a year ago·Updated 10 months ago· 1
PVL Flux.2 Dev (fal.ai)
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • image_7
  • image_8
  • IMAGE
◄prompt—►
◄image_sizecustom►
◄width1024►
◄height1024►
◄steps28►
◄CFG2.5►
◄seed-1►
◄num_images1►
◄accelerationregular►
◄enable_prompt_expansionfalse►
◄enable_safety_checkerfalse►
◄output_formatpng►
◄sync_modefalse►
◄retries2►
◄timeout_sec30►
◄debug_logfalse►
◄delimiter[++]►
◄lora1_name►
◄lora1_scale1.0►
◄lora2_name►
◄lora2_scale1.0►
◄lora3_name►
◄lora3_scale1.0►

Flux 2 is the open-weights capability ceiling right now - the 32B rectified flow transformer with a Mistral-3 vision encoder that does generation and editing in one checkpoint. It's also the model most people can't run locally: even quantized it wants 18–24 GB of VRAM, and the community's reaction at launch was less "wow" and more "how do I fit this thing." This node answers that with a shrug: it just runs Flux 2 Dev on fal.ai's cloud and hands the image back to your graph. No giant download, no VRAM juggling, no GGUF quantization roulette.

It's part of the ComfyUI Assistant Node pack from pvlprk, which wraps a whole shelf of fal.ai endpoints. You pay per generation, but you pay zero setup cost, and your local machine stays free for other things.

How it works

The node is one of the more complete wrappers in the pack. It base64-encodes any images you connect, picks an endpoint automatically, submits to fal's queue API, polls, and downloads the result as a normal IMAGE tensor. It can even run multiple generations in parallel threads, split your prompt into several on a delimiter, and retry failed calls.

The clever part is endpoint auto-selection - one node covers four jobs:

  • No image, no LoRA → fal-ai/flux-2 (text to image)
  • Image connected → fal-ai/flux-2/edit (image editing, up to the first 3 of your 8 image inputs as references)
  • LoRA set → fal-ai/flux-2/lora
  • Both → fal-ai/flux-2/lora/edit

So you can treat this as your do-everything Flux 2 node: write a prompt, and depending on what you wire in, it generates, edits, or edits-with-a-LoRA.

The inputs that matter

  • prompt - the main event. With enable_prompt_expansion on, fal's rewriter beefs up short prompts before generation, which is often worth it.
  • image_size - preset ratios (1:1, 3:4, 9:16, 4:3, 16:9) or custom, which activates width/height (512–2048).
  • steps / CFG - defaults 28 and 2.5. Flux 2 is not that sensitive here; leave them alone unless you're hunting for a specific look.
  • num_images - 1–8. Combined with the delimiter prompt-splitting, you can fan one node out into several parallel generations.
  • acceleration - regular is the default and usually the right call; high trades quality for speed, none for max quality.
  • Optional lora1_name … lora3_name - fal-hosted LoRA identifiers with their own scales.

Output is a single IMAGE, ready to feed straight into a VAE-free chain of local nodes - save, upscale, composite.

Installing it

Install the pack via ComfyUI Manager (search "ComfyUI Assistant Node") or:

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

Then set your fal.ai key as FAL_KEY (the code also reads FAL_API_KEY / FAL_CLIENT_KEY) and restart ComfyUI. Prepaid fal credits required.

Where people get burned

The two classic fal-node traps apply: a missing FAL_KEY kills every call, and errors sometimes surface as a blank placeholder image rather than a loud failure - always glance at the console. Content-policy violations are detected and not retried, so if you get one, fix the prompt, don't just bump retries. And remember Flux 2's safety filtering is aggressive by design; if you're hitting the filter a lot, that's the model card, not your settings.

CategoryPVL_tools_FAL

Inputs (31)

NameTypeDefaultDescription
promptSTRING—
image_sizeCOMBOcustom6 options: 1:1, 3:4, 9:16, 4:3, 16:9, custom
widthINT1024512–2048—
heightINT1024512–2048—
stepsINT281–100—
CFGFLOAT2.51–20—
seedINT-1-1–4294967295—
num_imagesINT11–8—
accelerationCOMBOregular3 options: none, regular, high
enable_prompt_expansionBOOLEANfalse—
enable_safety_checkerBOOLEANfalse—
output_formatCOMBOpng3 options: jpg, png, webp
sync_modeBOOLEANfalse—
retriesINT20–10—
timeout_secINT305–600—
debug_logBOOLEANfalse—
delimiteroptSTRING[++]—
lora1_nameoptSTRING—
lora1_scaleoptFLOAT1.0-2–2—
lora2_nameoptSTRING—
lora2_scaleoptFLOAT1.0-2–2—
lora3_nameoptSTRING—
lora3_scaleoptFLOAT1.0-2–2—
image_1optIMAGE—
image_2optIMAGE—
image_3optIMAGE—
image_4optIMAGE—
image_5optIMAGE—
image_6optIMAGE—
image_7optIMAGE—
image_8optIMAGE—

Outputs (1)

NameTypeDescription
IMAGEIMAGE—