LucidFlux Condition (text+redux+control)
The Whole Restoration Brain in One Node (And No, You Don't Need CLIP)
- lq
- ldr
- clip_vision
- CONDITIONING
LucidFlux Condition (text+redux+control) is the node that decides whether LucidFlux works at all. It has nine dropdowns and inputs where every other node in the pack has three, it loads three checkpoints at once, and it produces one thing: a CONDITIONING you plug into LucidFlux Sampler's positive.
If you've read a tutorial or watched a video about this pack from late 2025, that tutorial is about a different node. The old wrapper had lucidflux_sm_encode plus a pile of LucidFlux_SM_* nodes, and the current version deleted them in favour of a ComfyUI-native rebuild. This is why the one public Reddit thread on the pack is a person unable to load any of the three example workflows - they were following the old names. Search for lucidflux_sm_encode today and you'll find the string in archived workflow JSONs and nowhere in the code.
What it's doing
Three jobs, in order.
Text, without a text encoder. LucidFlux's official pipeline doesn't run CLIP-L and T5 on your prompt. It ships a precomputed prompt_embeddings.pt - a tensor called txt (1×512×4096) plus a pooled vector vec (1×768) - and the model conditions on those directly. This node just torch.loads the file. So the node has no CLIP input, no prompt box, and no negative prompt. That's not an omission. If you're wondering where to type your caption: you don't. This model has no idea what your prompt was, and it doesn't want one.
The image prior, via Redux. ldr gets encoded by SigLIP2-so400m-patch16-512 - with crop=False, matching upstream's stretched resize rather than a centre crop - and those features go through lucid_connector.pth, which is loaded as a ComfyUI style model (a Flux Redux encoder). Result: 1024 image tokens of width 4096, concatenated onto the end of the text tokens. Upstream does exactly this, and it's why the restoration is steered by the picture rather than by words.
The dual control branch. lucidflux.pth is the interesting file. It holds four sub-dictionaries - condition_lq, condition_ldr, modulation_lq, modulation_ldr - which form two ControlNet-style branches, one fed your downscaled input and one fed the SwinIR-cleaned version. Their outputs are modulated per control index and injected as 19 residuals into the frozen Flux DiT's double blocks.
The neat part: ComfyUI's native Flux already has that exact injection point, so the pack hooks in as an ordinary control and lets the stock sampler do the rest.
The inputs that matter
Four of the nine are file pickers, two are images, and you'll set the last two once and forget them.
control_file → lucidflux.pth, embedding → prompt_embeddings.pt, connector → lucid_connector.pth. All three live in ComfyUI/models/LucidFlux/. The dropdowns filter on filename substrings - "lucid", "prompt", "connector" - so renaming prompt_embeddings.pt to embeddings.pt makes it vanish from the list.
siglip is the SigLIP2 checkpoint in ComfyUI/models/clip_vision/. Or wire a pre-loaded CLIP_VISION into the optional clip_vision input and skip the dropdown - the node then leaves those weights resident instead of freeing them after encoding, which helps when batching.
lq and ldr come from LucidFlux DiffBIR's two outputs. Don't feed the same image to both - the branches are trained on different things.
guidance defaults to 4.0 and is a real setting - it's Flux's distilled guidance, not CFG. Nudge it up toward 5 for more aggressive restoration, down toward 3 if the result starts looking like a different photo. dtype is bf16 or fp32; bf16 unless something looks numerically broken, because fp32 doubles a 3.4GB checkpoint.
Output: CONDITIONING, one wire into LucidFluxSampler → positive. No negative, and no socket for one.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/smthemex/ComfyUI_LucidFlux
Then the weights, all into ComfyUI/models/LucidFlux/:
# required for this node
lucidflux.pth # huggingface.co/W2GenAI/LucidFlux
prompt_embeddings.pt # same repo
lucid_connector.pth # huggingface.co/smthem/LucidFLUX-connector <- pack author's repo, not upstream's
# and in other folders
ComfyUI/models/clip_vision/siglip2-so400m-patch16-512.safetensors
ComfyUI/models/diffusion_models/flux1-dev-fp8.safetensors # any flux dev
lucid_connector.pth comes from the pack author's HuggingFace, not W2GenAI's - upstream doesn't ship it. And Google's SigLIP repo has a file named model.safetensors; since the dropdown filters on "siglip", rename it to siglip2-so400m-patch16-512.safetensors. Those two traps explain a lot of "the dropdown is empty" reports.
Dependencies are torch and einops, nothing else - a genuine improvement over the diffusers-era version, as the ecosystem notes will tell you.
Common issues
OOM on load. All three checkpoints get loaded and cached on first execution - the condition branch alone is ~3.4GB - on top of Flux dev. 12GB cards can run it; 8GB cards won't enjoy it. The cache is keyed on path and dtype, so flipping dtype mid-session forces a reload.
"Positive conditioning unconnected." You're either on an old example workflow from the previous version, or the SigLIP/embedding dropdown is showing none because the file isn't where the filter expects. Also check you installed the pack, not some other LucidFlux wrapper.
Resolution drift. Both hint images are silently resized to latent × 8, so a DiffBIR pass at the wrong size just costs you a bilinear round trip. Match its width/height to half your target.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| control_file | COMBO | lucidflux.pth(双条件分支) | |
| embedding | COMBO | prompt_embeddings.pt(官方预计算文本 embedding) | |
| connector | COMBO | lucid_connector.pth(SigLIP→4096 的 Redux 映射) | |
| siglip | COMBO | models/clip_vision 下的 SigLIP2-512;接了 clip_vision 输入则忽略此项 | |
| lq | IMAGE | 低质输入(DiffBIR 的 lq,尺寸 = latent×8) | |
| ldr | IMAGE | DiffBIR 复原结果(SwinIR 输出) | |
| guidance | FLOAT | 4.00–100 | — |
| dtype | COMBO | bf16 | 2 options: bf16, fp32 |
| clip_visionopt | CLIP_VISION | 可选:外部已加载的 SigLIP(省一次加载) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |