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

PVL Flux.2 Flex (fal.ai)

The faster, cheaper way to use Flux 2 without local VRAM

By pvlprk·Created about a year ago·Updated 8 months ago· 1
PVL Flux.2 Flex (fal.ai)
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • image_7
  • image_8
  • IMAGE
prompt
image_sizecustom
width1024
height1024
enable_prompt_expansionfalse
safety_tolerance2
enable_safety_checkerfalse
seed-1
num_images1
output_formatpng
guidance_scale3.5
num_inference_steps28
retries2
timeout_sec30
debug_logfalse
delimiter[++]

Flux 2 Flex is fal's lighter-on-the-infrastructure take on the Flux 2 family - the one you reach for when you want the Flux 2 look and edit capabilities without waiting on (or paying for) the full pipeline every time. The node runs it entirely on fal.ai, so the only thing your machine has to do is send an image and receive the result. If you've been eyeing Flux 2 but balking at the 18–24 GB local footprint, this is the low-friction on-ramp.

It's part of the ComfyUI Assistant Node pack from pvlprk, and mechanically it's a cousin of the pack's Flux 2 Dev node: image goes out as a base64 data URI, the call goes to fal's queue API, and the result comes back as a regular ComfyUI IMAGE tensor you can keep processing locally.

How it works

Like the Dev node, it auto-selects the endpoint based on what you feed it: a bare prompt hits fal-ai/flux-2-flex, and connecting any of the up-to-8 image inputs switches it to fal-ai/flux-2-flex/edit. That means one node does both text-to-image and image editing, and the mode is decided by your wires rather than by swapping nodes. Multiple prompts can be split on the delimiter (default [++]) and fanned out into parallel calls.

The Flex personality shows in the controls: there's no separate steps field in the main set - the sampler knobs are num_inference_steps (default 28) and guidance_scale (default 3.5) - and the safety side is dialed with safety_tolerance (1–5, default 2) alongside the enable_safety_checker toggle. enable_prompt_expansion lets fal's rewriter expand short prompts before generation.

The inputs that matter

  • prompt - your generation or edit instruction.
  • image_size - preset ratios plus auto (only meaningful for the edit endpoint) and custom, which unlocks width/height (512–2048).
  • guidance_scale / num_inference_steps - the two knobs that actually shape the output. Defaults are sensible; move one at a time.
  • safety_tolerance - how much of fal's filter you accept. Higher = looser.
  • retries / timeout_sec / debug_log - the pack's standard reliability controls. debug_log is worth switching on the first time so you can see the endpoint and request in the console.

Output: one IMAGE.

Installing it

Part of pvlprk/comfyui-pvl-api-nodes. 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), restart ComfyUI, and top up fal credits.

Where people get burned

The usual FAL_KEY-and-console checks apply. The Flex-specific gotcha is expectations: Flex is the speed-optimized tier, so don't compare it side-by-side against Pro at 100% zoom and demand parity - it's the iteration-friendly option. And since each generation is a billable call, use num_images and the prompt-splitting delimiter to batch instead of firing the node repeatedly. If a run returns a blank placeholder image, that's an error wearing a disguise - the console has the real story.

CategoryPVL_tools_FAL

Inputs (24)

NameTypeDefaultDescription
promptSTRING
image_sizeCOMBOcustom7 options: 1:1, 3:4, 9:16, 4:3, 16:9, auto, +1
widthINT1024512–2048
heightINT1024512–2048
enable_prompt_expansionBOOLEANfalse
safety_toleranceINT21–5
enable_safety_checkerBOOLEANfalse
seedINT-1-1–4294967295
num_imagesINT11–8
output_formatCOMBOpng2 options: jpg, png
guidance_scaleFLOAT3.50–20
num_inference_stepsINT281–100
retriesINT20–10
timeout_secINT305–600
debug_logBOOLEANfalse
delimiteroptSTRING[++]
image_1optIMAGE
image_2optIMAGE
image_3optIMAGE
image_4optIMAGE
image_5optIMAGE
image_6optIMAGE
image_7optIMAGE
image_8optIMAGE

Outputs (1)

NameTypeDescription
IMAGEIMAGE