WaveSpeedAI Flux ControlNet Union Pro 2.0
ControlNet Union Pro 2.0 as a hosted call
- client
- output_image
ControlNet is how you tell an image model where things go instead of just what they are. The Flux ControlNet Union Pro 2.0 is the modern, multi-condition version of that idea - one model that accepts several control modes (edges, depth, pose, and friends) so you don't juggle a different ControlNet file per condition. This node runs that model on WaveSpeed AI's servers instead of your GPU, which makes it the rare case where you get ControlNet without the local ControlNet install.
It's from razvanmatei-sf/razv-wavespeed, so the standing rules apply: it's a paid WaveSpeed AI API call, you need the pack's WaveSpeedAI Client node, and your control image arrives as a URL string, not a tensor.
How it works
You give it a prompt and a control_image URL. The node POSTs to the Flux ControlNet Union Pro 2.0 endpoint, and the API runs the union ControlNet under Flux. The result comes back as a real IMAGE tensor - that's the output_image - so it feeds straight into SaveImage or whatever you'd normally plug a generated image into.
The parameter set is where this node is genuinely interesting, because it exposes the knobs you'd have locally:
- controlnet_conditioning_scale (0–2, default 0.7) - how hard the structure constrains the output. The KB's standing advice for union models: these publish lower numbers than the SD-era 1.0 default. 0.7 is a sane starting point; push toward 1.0–1.2 only when the structure must be exact.
- control_guidance_start / control_guidance_end (default 0 and 0.8) - when during denoising the control applies. Ending at 0.8 instead of 1.0 lets the model add its own detail in the late steps, which is exactly the "release the condition once composition has formed" trick that's the most useful ControlNet lesson there is.
- guidance_scale (0–20, default 3.5) - prompt adherence. Flux runs low here, so don't crank it like it's SD 1.5.
- num_inference_steps (1–50, default 28) - more steps, better quality, slower, pricier.
The inputs that matter
- prompt - the semantic content. The structure comes from ControlNet; the story comes from here.
- control_image - the condition (edge map, depth, pose, etc.). This is the image that "controls" the composition.
- controlnet_conditioning_scale and the two guidance-start/end floats - the trio that decides whether you get a faithful structural copy or a loose suggestion.
- num_inference_steps, guidance_scale, seed (-1 = random), num_images (1–4), output_format (jpeg/png/webp).
Optional: custom_size as a "1920*1080" string that overrides the size dropdown - handy when your target isn't one of the eleven presets.
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. Add a WaveSpeed AI key through the WaveSpeedAI Client node, config.ini (copy from config.ini.tmp, [API] section), or a WAVESPEED_API_KEY env var.
Common issues
- Your control image needs to be a real condition. Garbage in, garbage out - a blurry edge map produces a blurry structure. Preprocess your control image (canny, depth, pose) before uploading; the API won't do it for you.
- No upload node. Tooltips say "connect from Upload Image node," but the current build doesn't register one. Paste a publicly reachable control-image URL.
- It's pay-per-image with steps and size as hidden price levers. 50 steps at max resolution is the expensive path; the defaults are the sane path.
- Scale expectations: Union Pro 2.0 doesn't behave like the old SDXL unions. Keep
controlnet_conditioning_scalemodest and use start/end to let the model breathe.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| prompt | STRING | Text description of the image to generate | |
| control_image | STRING | URL of control image for ControlNet guidance (connect from Upload Image node) | |
| size | COMBO | 1024*1024 | Resolution of the generated image |
| num_inference_steps | INT | 281–50 | Number of denoising steps (higher = better quality, slower) |
| guidance_scale | FLOAT | 3.50–20 | How closely to follow the prompt (higher = more adherence) |
| controlnet_conditioning_scale | FLOAT | 0.70–2 | Influence of control image on generation (0=none, 2=maximum) |
| control_guidance_start | FLOAT | 0.000–1 | When to start applying control (0=beginning) |
| control_guidance_end | FLOAT | 0.800–1 | When to stop applying control (1=end) |
| seed | INT | -1-1–18446744073709550000 | Random seed for reproducible results. -1 for random seed |
| num_images | INT | 11–4 | Number of images to generate (1-4) |
| output_format | COMBO | jpeg | Format of the output image |
| enable_sync_mode | BOOLEAN | true | Wait for generation to complete before returning |
| custom_sizeopt | STRING | Custom size as 'width*height' (e.g. '1920*1080'). Overrides size dropdown if provided. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output_image | IMAGE | — |