Qwen Image Edit (fal.ai)
The instruction editor that made masks optional
- image
- image2
- image3
- image
Hand it a picture and a sentence. "Change her dress to blue." "Remove the watermark." "Relight this for golden hour." FAL_QwenImageEdit is the API wrapper for Qwen-Image-Edit-2511 - the model that made a large chunk of image editing stop needing a mask, a ControlNet, or an IP-Adapter. It re-emits the whole frame from your instruction, which is exactly why it took over: you describe the change, it happens, and the pixels you didn't mention are supposed to hold still.
It ships in the same pack as the rest of the fal.ai nodes, so the story is the same: nothing local, your GPU idles, you pay fal per edit. The editor itself is Apache 2.0 and its weights are public - you're just choosing the hosted route because a 20B model with a Qwen2.5-VL encoder isn't something your 12GB card wants to host.
How it works
Your image tensor gets uploaded to fal, the node calls the fal-ai/qwen-image-edit-2511 endpoint with image_urls, and the result downloads back as an IMAGE. The 2511 revision is the one that matters - it's the build that explicitly targeted the image drift that made the earlier 2509 line annoying for chains of edits. You can feed up to three images (image, plus image2 and image3) for multi-image editing jobs, like merging reference material into the frame.
The inputs that matter:
- image (required) + prompt (required) - everything else is optional.
- image2 / image3 - optional reference images for multi-image edits.
- num_inference_steps (default 28) and guidance_scale (default 4.5) - the edit endpoint runs hotter on guidance than the T2I node, and that's a fine default; don't feel the need to match other models' settings.
- acceleration defaults to
regularhere (unlike the T2I node'snone) - an indicator that this endpoint is expected to be a bit slower and benefits from the speed tier. - enable_safety_checker (default on), seed (
-1random), optional negative_prompt,png/jpeg/webpoutput_format, num_images (1–4).
One IMAGE output, wired straight into a Preview or Save.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/elle-trudgett/fal-ai-comfyui-nodes
pip install -r fal-ai-comfyui-nodes/requirements.txt
or grab it via ComfyUI Manager as ComfyUI fal.ai Nodes. Then set your key - export FAL_KEY="..." on the command line, or a config.ini with [API] / FAL_KEY in the node folder for ComfyUI Desktop. Get keys at fal.ai/dashboard/keys. Restart.
Where it bites
- "FAL_KEY not set" is the universal first-run error here; env var or config.ini, restart, move on.
- The honest limit: the whole frame is re-emitted. Pixels you never mentioned will still move a little, and identity drifts if you chain several edits. 2511 is much better than the first edits were, but the model's architecture doesn't pin unedited pixels. Bolt a mask on around it if you need pixel-exactness.
- Safety checker defaults on, and fal's filter can hand you a flagged/black image. You can flip it off; their account policy still applies.
- It costs per edit. Rapid A/B of prompts on the same image is a good way to discover fal pricing.
- Errors come back as
fal.ai error: <detail>- the pack unwraps the API's message, so read it before you re-run.
For the "change one thing and keep everything else" workflow that demands precision, consider masking + inpainting with an open model. For everything else - object removal, garment swaps, restyling, re-posing - this is the node people actually reach for.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| prompt | STRING | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| num_imagesopt | INT | 11–4 | — |
| image_sizeopt | COMBO | landscape_4_3 | 7 options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9, +1 |
| custom_widthopt | INT | 102464–14142 | — |
| custom_heightopt | INT | 76864–14142 | — |
| num_inference_stepsopt | INT | 281–50 | — |
| guidance_scaleopt | FLOAT | 4.51–20 | — |
| seedopt | INT | -1-1–2147483647 | — |
| negative_promptopt | STRING | — | |
| output_formatopt | COMBO | png | 3 options: png, jpeg, webp |
| accelerationopt | COMBO | regular | 3 options: none, regular, high |
| enable_safety_checkeropt | BOOLEAN | true | — |
| private_modeopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |