Qwen Image Edit (fal)
The open instruction editor, run on someone else's GPU
- image
- IMAGE
Qwen-Image-Edit is the model that killed a whole class of masking work: hand it a picture and a sentence - "change her dress to blue," "remove the watermark," "make him lie down" - and the change just happens, no mask, no ControlNet, no IP-Adapter. It won its category over Flux Kontext largely on licensing (Apache 2.0, so the community could build freely on it) and it's become the default open instruction editor. This node runs it through fal instead of on your own card.
What it actually does - and the honest catch
Nothing runs locally. Your image and prompt go to fal.ai, fal runs Qwen-Image-Edit, and you get an edited IMAGE back - no 20B checkpoint download, no VRAM, billed per call.
Here's the thing worth saying out loud, because it's the whole decision: Qwen-Image-Edit is open weights, so you can run it locally, and the model's real superpower is its enormous LoRA library - AnyPose, Multiple-Angles, Next Scene, Clothing Transfer, all trained specifically on this editor. You don't get any of that through the API. This node gives you the base model's editing, conveniently and without hardware, but if you're chasing pose control or camera-angle sliders, the local GGUF path plus those LoRAs is where the magic lives. Use this node when you want quick, clean instruction edits without setting up a 20B model; reach for local when you want the ecosystem.
The inputs that matter
- image (required): the picture you're editing.
- prompt (required): the instruction, in plain language. Describe the change, not the whole scene.
- image_size: presets like
square_hd,portrait_16_9,landscape_4_3, orcustom. This model is sensitive to input resolution (it's the root of its offset/drift problem), so it matters - setcustomand usewidth/heightwhen you need to match the source exactly. - num_inference_steps (default 30) and guidance_scale (default 4): more steps for quality, guidance for how hard it follows the prompt. The defaults are sane; leave them until you have a reason.
num_images rolls options (billed each), acceleration (none/regular/high) trades a little quality for speed, and there's an optional negative_prompt and seed. The output is a native IMAGE - straight into Save Image, an upscaler, or another edit pass.
Installing it
Easiest: ComfyUI Manager → search ComfyUI-fal-API → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/gokayfem/ComfyUI-fal-API.git
cd ComfyUI-fal-API
pip install -r requirements.txt
Restart ComfyUI. No model file in models/; the dependencies are fal-client and a fal API key (copy config.ini.example to config.ini, set it under [API], or export FAL_KEY). No key, no edits.
Where people get burned
The defining limitation of Qwen-Image-Edit is that it re-emits the whole frame, not just the region you asked about - so pixels nobody touched come back slightly different, and on a chain of edits that drift compounds, worst on faces. Two practical defenses: control your input resolution (that's what image_size/width/height are for, and it's the same trick that fixes proportion skew), and if a specific face has to stay identical, plan to inpaint it back afterward. Don't expect pixel-perfect preservation from an instruction editor; that's a masking job.
Beyond that: enable_safety_checker is on by default and can block outputs, errors surface fal's real text, and Windows Portable import errors are fixed with .\python_embeded\python.exe -m pip install fal-client.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| image | IMAGE | — | |
| image_size | COMBO | square_hd | 7 options: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9, +1 |
| width | INT | 512128–2048 | — |
| height | INT | 512128–2048 | — |
| num_inference_steps | INT | 301–50 | — |
| guidance_scale | FLOAT | 4.01–20 | — |
| num_images | INT | 11–4 | — |
| enable_safety_checker | BOOLEAN | true | — |
| output_format | COMBO | png | 2 options: png, jpeg |
| acceleration | COMBO | none | 3 options: none, regular, high |
| sync_mode | BOOLEAN | false | — |
| negative_promptopt | STRING | — | |
| seedopt | INT | -1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |