Flux Redux + ControlNet β research & implementation plan (Aug 2026)
Goal: workflows with 1 style-reference image (Redux) + 1 composition-reference image
(depth/canny ControlNet) + optional text prompt, plus simple Redux-only variants and a
faithful replica of fal-ai's flux/dev/redux endpoint. Maximum quality; pod is H100 80GB.
Recommended stack (priority workflow)
flux1-dev (fp8 checkpoint, or bf16 unet for max quality)
ββ Style img β CLIPVisionEncode (sigclip 384) β StyleModelApply (flux1-redux-dev,
β strength ~0.5, strength_type=attn_bias)
ββ Prompt β CLIPTextEncode β FluxGuidance 3.5 (empty string = no prompt; works fine)
ββ Comp img β DepthAnythingV2Preprocessor (or native Canny node)
β β ControlNetLoader (Union-Pro-2.0) β ControlNetApplySD3 ("Apply ControlNet
β with VAE") strength 0.6β0.8, end_percent 0.8
ββ euler / simple / 20β28 steps / CFG 1.0
Conditioning order: text β StyleModelApply β ControlNetApplySD3 (matches all published workflows; ControlNet applies to positive+negative, negative = ConditioningZeroOut).
Why Union-Pro-2.0 for the ControlNet
Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0(4.28 GB bf16) is the 2025β26 community default for FLUX structural control: one model covers depth, canny, soft-edge, pose, gray, mode inferred from the control image (noSetUnionControlNetTypenode, unlike v1).- Independent
strength/start_percent/end_percentknobs, and multiple applies stack (depth + canny simultaneously) β exactly what balancing against Redux needs. - Official recommended settings: depth 0.8 / end 0.8, canny 0.7 / end 0.8, soft-edge 0.7 / 0.8, pose 0.9 / 0.65. Drop toward 0.4β0.6 if it fights the style.
- Alternatives considered:
- BFL FLUX.1-Depth/Canny-dev full models (23.8 GB each): strongest raw structure adherence
(trained by BFL alongside flux1-dev), combine fine with Redux (Redux conditioning feeds
InstructPixToPixConditioning), but no strength/timing knob at all, one structure signal only (no depth+canny stack), and each replaces the base model. Tunability is what quality actually hinges on when Redux and structure must be balanced β not chosen as primary. - BFL depth/canny LoRAs (1.24 GB,
LoraLoaderModelOnlyon stock flux1-dev, adherence via LoRA strength): good middle ground, worth an A/B variant later, still no timing control and still latent-concat (no stacking). - XLabs v3 controlnets / x-flux-comfyui: legacy since early 2025, dormant repo,
XlabsSamplerdoesn't compose with normal conditioning. Skip; retire the oldflux1-depth-controlnet-xlabs-redroomworkflows rather than port them.
- BFL FLUX.1-Depth/Canny-dev full models (23.8 GB each): strongest raw structure adherence
(trained by BFL alongside flux1-dev), combine fine with Redux (Redux conditioning feeds
Redux strength control (critical β Redux leaks composition)
Redux appends 729 SigLIP patch tokens to the text conditioning; at full strength it imposes the style image's layout/subjects, not just aesthetics. Two current mechanisms:
- Native
StyleModelApplystrength+strength_type(in our ComfyUI 0.27.0,nodes.py:1100): useattn_bias~0.3β0.7 (start 0.5) β down-weights attention to the Redux tokens; officially recommended since v0.3.8.multiplymode degrades style before it stops leaking composition β avoid. - ReduxAdvanced (
kaibioinfo/ComfyUI_AdvancedRefluxControl): token downsampling (27Γ27 β 9Γ9 at factor 3) removes spatial information outright β qualitatively better at killing composition leakage while keeping style; also style masking + autocrop. Repo dormant (last commit Apr 2025) but functional. Plan: include as a selectable branch in the priority workflow (native attn_bias path active by default, ReduxAdvanced group bypassed) β the two mechanisms attack different problems (attention weight vs spatial info) and A/B-ing them is cheap once the node is installed.
Reviewed video workflows (user-supplied, all NovβDec 2024, pre-dating native attn_bias):
- Sebastian Kamph "How to use Flux Redux in ComfyUI" (YSJsejH5Viw) β official example graph; covered by workflows #2/#3, nothing new.
- Olivio Sarikas "REDUX Advanced for FLUX" (UrUDHSpmB90) β ComfyUI_AdvancedRefluxControl demo (style strength, image combining, masking). Patreon workflow β repo example workflows.
- Code Crafters Corner "Flux Redux: Advanced Techniques" (kh3ikwEZQXk) β same node, focused on restoring positive-prompt authority over Redux (downsampling + strength), i.e. exactly our optional-text-prompt requirement. Simple + advanced graphs, rebuildable from the repo examples. Net effect on plan: promote ReduxAdvanced from "fallback" to "installed + bypassed branch".
Inspected the node repo's own example workflows (what the Olivio / Code Crafters videos demo):
simple_workflow.json (StyleModelApplySimple preset "medium") and advanced_workflow.json
(ReduxAdvanced: downsampling 3, area, center-crop, weight 1.0) β both are the official-example
graph (UNETLoader flux1-dev + SamplerCustomAdvanced) with the apply node swapped. They load the
unet with weight_dtype: fp8_e4m3fn (runtime cast); on the H100 use default (bf16).
Base models (final, no quantized checkpoints)
Single base across all workflows, loaded split (not all-in-one checkpoint):
diffusion_models/flux1-dev.safetensorsβ bf16, 23.8 GB,UNETLoaderweight_dtypedefaulttext_encoders/t5xxl_fp16.safetensors+text_encoders/clip_l.safetensors(DualCLIPLoader)vae/ae.safetensorsAdapters riding on it (not base models):style_models/flux1-redux-dev.safetensors,clip_vision/sigclip_vision_patch14_384.safetensors,controlnet/β¦Union-Pro-2.0.safetensors. The existing mirrorcheckpoints/flux1-dev-fp8.safetensorsis NOT used in these workflows.
Swappability: any FLUX.1-dev-family finetune unet drops into UNETLoader unchanged (Redux
edits conditioning only; the ControlNet is an external module β both trained against flux1-dev,
adherence degrades gracefully with finetune drift). Schnell-family models are NOT compatible
(different distillation; Redux/Union-Pro trained on dev). LoRAs stack freely via
LoraLoaderModelOnly between UNETLoader and sampler β orthogonal to both Redux and ControlNet
(community precedent: pulid + redux + style-lora + depth-CN workflows).
With ControlNet owning composition, Redux can run stronger than in Redux-only workflows. Starting balance: Redux attn_bias 0.5β0.7, depth CN 0.6β0.8/end 0.8; optional stacked canny low (0.25β0.4) for hard contour lock.
Workflows to implement
| # | File (proposed) | Graph | Notes |
|---|---|---|---|
| 1 | flux-redux-style-composition.json |
Redux + Union-Pro-2.0 depth + optional prompt | Priority. Depth group active; bypassed canny group (native Canny node) usable instead of or stacked with depth |
| 2 | flux-redux-fal-dev.json |
Official ComfyUI Redux example, fal flux/dev/redux defaults |
bf16 flux1-dev via UNETLoader, t5 fp16, empty prompt, FluxGuidance 3.5, euler/simple/28, denoise 1.0, 768Γ1024, StyleModelApply strength 1.0 multiply. Doubles as the simple 1-image workflow; no safety checker (fal's black-image issue disappears). Seeds won't match fal's |
| 3 | flux-redux-prompt.json |
Redux + text prompt, no ControlNet | Same graph as #2 but prompt filled and Redux restrained (attn_bias ~0.5) so the prompt has authority; fp8 checkpoint fine |
| 4 | flux-redux-schnell.json |
Replicate black-forest-labs/flux-redux-schnell parity |
bf16 flux1-schnell via UNETLoader (t5 fp16 + clip_l + ae shared), Redux strength 1.0 multiply, no text prompt (endpoint has none β redux_image replaces it), no FluxGuidance (schnell ignores guidance; none in endpoint schema), euler/simple/4 steps/denoise 1.0, 1024Γ1024 default (endpoint: aspect_ratio enum @ ~1MP, megapixels 1/0.25, num_outputs 1β4 β batch size). No conditioning LoRAs. Seeds won't match Replicate's. Schnell is Apache-2.0, HF repo NOT gated |
| 5 | (later, optional) flux-redux-style-composition-bfl.json |
Redux + BFL depth LoRA via InstructPixToPixConditioning | A/B contender for max structural fidelity |
Also folded in: bypassed LoraLoaderModelOnly (loras/flux1-turbo-alpha.safetensors, already in
mirror) + low-step preset group in workflows #1β#3 as the fast-preview tier (better quality than
schnell at similar speed on dev).
Models to add to the aleph65/ComfyUI mirror
Already there: checkpoints/flux1-dev-fp8.safetensors, clip_vision/sigclip_vision_patch14_384.safetensors,
text_encoders/t5xxl_fp16.safetensors + clip_l.safetensors, vae/ae.safetensors.
Needed:
| File β mirror path | Size | Source |
|---|---|---|
style_models/flux1-redux-dev.safetensors |
129 MB | black-forest-labs/FLUX.1-Redux-dev (gated β accept license, download with your HF token) |
controlnet/FLUX.1-dev-ControlNet-Union-Pro-2.0.safetensors |
4.28 GB | Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0/diffusion_pytorch_model.safetensors (rename) |
diffusion_models/flux1-dev.safetensors |
23.8 GB | black-forest-labs/FLUX.1-dev (gated) β bf16 base for #1β#3 |
diffusion_models/flux1-schnell.safetensors (workflow #4) |
23.8 GB | black-forest-labs/FLUX.1-schnell (not gated, Apache-2.0) |
(optional, #5) loras/flux1-depth-dev-lora.safetensors |
1.24 GB | black-forest-labs/FLUX.1-Depth-dev-lora (gated) |
depth_anything_v2_vitl.pth auto-downloads at first run into
custom_nodes/comfyui_controlnet_aux/ckpts/ (not a models/ path).
Custom nodes
comfyui_controlnet_aux(Fannovel16) βDepthAnythingV2Preprocessor; still the standard, no native depth estimator in core. Canny needs nothing (core node).ComfyUI_AdvancedRefluxControl(kaibioinfo) β optional, only if native attn_bias proves insufficient for style-only isolation.- Nothing else: Redux, StyleModelApply (with strength), ControlNetApplySD3, Canny are all core.
Workflow JSONs must carry
cnr_id/aux_idin node properties fordownload_missing_models.sh.
Gotchas
- Scaled-fp8 flux checkpoints produce black images with Redux (ComfyUI #5849). Our mirror's
flux1-dev-fp8.safetensorsis the plain e4m3fn Comfy-Org repack (used fine by the USO workflow) β safe. If black outputs ever appear, that's the first suspect. - Union-Pro-2.0 must NOT get a
SetUnionControlNetTypenode (that's v1-only; the oldflux-union-pro-controlnet-instantx-shakker-labs.jsonworkflow used v1 + that node). CLIPVisionEncodecrop:center(default) discards edges of non-square style refs; fine for style, switch tononeif edge content matters.- fp8 vs bf16 base: fp8 = slight quality loss (official note), 2Γ faster load; H100 80GB runs bf16 + t5 fp16 comfortably β bf16 for #2 (fal parity), fp8 acceptable for #1/#3 per house convention (can flip to bf16 unet if A/B shows visible gain).
- Style-fidelity ranking (community, 2026): ByteDance USO (already have
uso-style-transfer.json) β₯ Redux+downsampling/attn_bias > XLabs IP-Adapter. Redux remains the lightest and the easiest to combine with an independent ControlNet branch β the right choice for this use case; USO is the fallback if Redux style fidelity disappoints.
Sources
- https://blog.comfy.org/p/day-1-support-for-flux-tools-in-comfyui
- https://comfyanonymous.github.io/ComfyUI_examples/flux/
- https://comfy.org/workflows/flux_redux_model_example-52dd3f09bb59/
- https://huggingface.co/Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0
- https://huggingface.co/black-forest-labs/FLUX.1-Redux-dev
- https://github.com/kaibioinfo/ComfyUI_AdvancedRefluxControl
- https://github.com/comfyanonymous/ComfyUI/releases/tag/v0.3.8 (attn_bias)
- https://github.com/comfyanonymous/ComfyUI/issues/5849 (scaled-fp8 black images)
- https://openart.ai/workflows/odam_ai/flux---style-transfer-controlnet-flux-tools-redux---beginner-friendly/LWMhfWmaku6tdDWjkM8D
- https://civitai.com/models/1312599/flux-advanced-redux-with-controlnet-flux-tool