WaveSpeedAI Flux 2 LoRA Edit
Cloud Flux 2 Editing for People Who Don’t Have 24 GB of VRAM
- image1
- image2
- image3
- image
- image_path
- generation_info
- generation_time
Flux 2 is the most capable open-weights image model around - 4MP output, generation and editing in one checkpoint - and it's heavy: it wants 18–24 GB of VRAM even quantized, with a vision-language encoder on top. If your rig can't hold that, this node is a workaround. Feed it a source image, type an edit prompt, optionally hang a LoRA off it, and WaveSpeedAI's hosted flux-2-dev/edit-lora endpoint does the heavy lifting and hands the result back into your graph.
The default prompt is the giveaway: "make this picture berthe_morisot style." Berthe Morisot, the Impressionist. This node is built for restyling and image-to-image edits - show it a picture and tell it what to become - not for generating from nothing. image1 is required, same as the pack's other edit wrappers. That's exactly the niche Flux 2 is best at, so lean in.
How it works
Identical machinery to its sibling in the same pack, WaveSpeedAI_Image: your image tensors get base64-encoded, POSTed to the API with the prompt and size, and the node polls the result endpoint every two seconds until it says completed, then downloads and returns the image. Outputs are the same quartet - image, image_path, generation_info (a JSON string), generation_time - and the file lands in ComfyUI's temp directory with a sidecar metadata JSON.
The inputs that matter
api_key- WaveSpeedAI key, orWAVESPEED_API_KEYenv var.prompt- the edit instruction.image1- required, from a Load Image node.width/height- default 1024×1024, range 512–2048, step 8. Tighter range than the Image node's 4096 max.
The LoRA part is the reason the name says "LoRA Edit." lora_url takes a hosted LoRA - a direct download URL, not a path on your disk - and lora_scale (default 1.0) sets how strongly it applies. One caveat from LoRA 101: architecture lock-in. A LoRA trained for SDXL or even Flux.1 won't do anything useful on Flux 2; you need a LoRA trained for the Flux family. Style LoRAs tend to want a slightly lower scale, so if a style overshoots, back lora_scale off toward 0.8 rather than dialing the prompt. seed defaults to -1 for random.
Install
Same pack as its sibling, so same steps. ComfyUI Manager → search "Node_Fun_ComfyUI", or:
cd ComfyUI/custom_nodes
git clone https://github.com/nofunstudio/Node_Fun_ComfyUI
cd Node_Fun_ComfyUI
pip install -r requirements.txt
Restart ComfyUI and you're done. No model files to download - that's the entire point of an API node. The requirements.txt only adds replicate and fal-client for the other nodes in the pack; these WaveSpeedAI nodes run on requests and PIL, which ComfyUI already has.
Where people get burned
- The silent black square. Unlike
WaveSpeedAI_Image, which returnsNoneon failure, this node's error path returns a black 64×64 tensor. If your output suddenly shrinks to a tiny black image, the generation failed and the node handed you a zero tensor. Read thegeneration_infooutput for the actual error - don't waste time wondering what the model did. - Temp-directory outputs. Files go to ComfyUI's temp folder and get wiped on restart; grab whatever you want via
image_path. - Paid API, grumbly billing. WaveSpeedAI is real and fast, but users have complained about minimum credit top-ups. Check the pricing before you queue a big edit run.
- The async footgun. The worker is an
async def, and ComfyUI's executor doesn't await node functions - a pattern shared by every API node in this pack. As shipped, execution can fail with a coroutine error in the console. This is a young, single-commit pack, so treat it as beta: if you hit that error, check for an update before assuming your workflow is broken.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| prompt | STRING | make this picture berthe_morisot style | — |
| image1 | IMAGE | — | |
| width | INT | 1024512–2048 | — |
| height | INT | 1024512–2048 | — |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| lora_urlopt | STRING | — | |
| lora_scaleopt | FLOAT | 1.000–2 | — |
| seedopt | INT | -1-1–2147483647 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| image_path | STRING | — |
| generation_info | STRING | — |
| generation_time | STRING | — |