WaveSpeedAI Flux Kontext Max
FLUX.1 Kontext Max — the experimental tier, without the API paperwork
- client
- output_image
Kontext Max is the top shelf of the FLUX.1 Kontext family: BFL's experimental API tier with the best prompt adherence and typography, and maximum editing consistency. It was never released as weights - Max is API-only, period - so if you want it, you're using a host regardless. This node is that host in a box: from the razvanmatei-sf/razv-wavespeed pack, it turns a Kontext Max image edit into a plain ComfyUI node that takes one image, one instruction, and hands you back an edited IMAGE tensor.
The workflow it's built for is instruction-based editing: change the clothing, swap the background, remove the text, restyle the whole thing with a sentence. Kontext does this by feeding your reference image in-context rather than through an adapter, which is why it holds a subject across edits better than IP-Adapter-style approaches. If you've got a character and want consistent restagings, this is the API-tier version of exactly that. Fair warning baked into the model itself: it's heavily censored at the weights level, and BFL's Kontext license fights NSFW fine-tunes hard - you're on the hosted tier, so assume the guardrails are active.
How it works
Wire up a WaveSpeedAI Client node, give it a prompt and an image_url, and the node calls the Kontext Max endpoint on WaveSpeed AI. Sync mode is on by default - it blocks until the edited image is ready, then returns it as an IMAGE tensor you can save or preview. Nothing downloads to your machine except the result.
Two parameters stand out:
- guidance_scale (1–20, default 3.5) - how strictly the output follows the instruction. The tooltip frames it as 1.0 = loose to 20.0 = strict. Start at the default; this is a model where more isn't automatically better.
- safety_tolerance (1–5, default "2") - the API's safety filter level, 1 = strict, 5 = permissive. This is Kontext Max's signature knob and the only node in the pack that exposes it. If your legit edit keeps getting blocked, this is where you look - but read the censorship note above before assuming permissive means uncensored.
Also there: enable_sync_mode. That's the whole surface. Deliberately minimal.
The inputs that matter
- prompt - the transformation instruction. This node ships with
"To toy style"as a default prompt, which tells you what the author was doing with it. Replace it with your actual instruction. - image_url - the image to transform. A hosted URL, since there's no upload node registered in the current build.
- guidance_scale and safety_tolerance as above.
Install
Shared pack:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/razv-wavespeed
# restart ComfyUI
Or ComfyUI Manager → search "razv-wavespeed" → Install. Then a WaveSpeed AI key: the WaveSpeedAI Client node, config.ini (copy from config.ini.tmp, [API]), or WAVESPEED_API_KEY env var.
Common issues
- It's a paid, censored API tier. Kontext Max never had local weights, and this is the paid route to it. Budget per edit and expect the filter to do its job.
- Anatomy at full-body scale is the family's known weakness - heads and hair artifact when a full body fits the frame. If your subject is small in frame, Kontext Max may not be the tool.
- URL-based input. If the tooltip's "Upload Image node" sends you looking for one, stop - it isn't registered in this build. Paste a public URL.
- Sync mode default means the graph freezes for the duration. For batch experiments, flip
enable_sync_modeoff and let tasks run async.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| prompt | STRING | To toy style | Text prompt describing the desired transformation or scene |
| image_url | STRING | The image URL to transform (connect from Upload Image node) | |
| guidance_scale | FLOAT | 3.51–20 | How closely to follow the prompt (1.0 = loose, 20.0 = strict) |
| safety_tolerance | COMBO | 2 | Safety filter tolerance level (1 = strict, 5 = permissive) |
| enable_sync_mode | BOOLEAN | true | Wait for image generation to complete before returning |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output_image | IMAGE | — |