File size: 12,100 Bytes
7cd8b95 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | # 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 (no `SetUnionControlNetType` node, unlike v1).
- Independent `strength` / `start_percent` / `end_percent` knobs, 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, `LoraLoaderModelOnly` on 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,
`XlabsSampler` doesn't compose with normal conditioning. Skip; retire the old
`flux1-depth-controlnet-xlabs-redroom` workflows rather than port them.
### 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:
1. **Native** `StyleModelApply` `strength` + `strength_type` (in our ComfyUI 0.27.0,
`nodes.py:1100`): use **`attn_bias` ~0.3β0.7 (start 0.5)** β down-weights attention to the
Redux tokens; officially recommended since v0.3.8. `multiply` mode degrades style before it
stops leaking composition β avoid.
2. **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, `UNETLoader` weight_dtype `default`
- `text_encoders/t5xxl_fp16.safetensors` + `text_encoders/clip_l.safetensors` (`DualCLIPLoader`)
- `vae/ae.safetensors`
Adapters 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 mirror `checkpoints/flux1-dev-fp8.safetensors` is 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_id` in node properties for `download_missing_models.sh`.
## Gotchas
- **Scaled-fp8 flux checkpoints produce black images with Redux** (ComfyUI #5849). Our mirror's
`flux1-dev-fp8.safetensors` is 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 `SetUnionControlNetType` node (that's v1-only; the old
`flux-union-pro-controlnet-instantx-shakker-labs.json` workflow used v1 + that node).
- `CLIPVisionEncode` crop: `center` (default) discards edges of non-square style refs; fine for
style, switch to `none` if 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
|