Nodes/ComfyUI-FluxDetailGuidance/Flux Detail Guidance (FDG)
ComfyUI Node

Flux Detail Guidance (FDG)

Flux looks like plastic? This node hands you a real detail dial

By lookuters22·Created 3 months ago·Updated 3 months ago· 0
Flux Detail Guidance (FDG)
  • model
  • model
enabledtrue
double_start10
double_end19
single_start15
single_end38
step_start0.00
step_end1.00
guidance_scale0.35
weaken_strength0.50
blur_passes1
output_rescale0.30
adaptive_gatetrue

Flux.1 has a well-known tell: that smooth, "beauty filter" skin that reads as plastic at full resolution. The usual fixes are blunt instruments - raise the denoise and risk your composition drifting, or run a full upscaler that happily rewrites faces. Flux Detail Guidance (FDG) is neither. It's a per-forward-pass model patch that pulls more micro-detail out of the same model, at the same denoise, without moving a pixel of composition or text.

The catch: it's experimental, it's Flux-only, and it costs you about 2x model evaluations during the steps it's active. If that sounds like a fair trade for skipping the plastic look, read on.

What it actually does

FDG is a port of the "token detail guidance" self-guidance idea, and the mechanism is neat. During a window of the denoise schedule, every step runs the model twice:

eps_full = model(x)                       # normal pass
eps_weak = model(x) with high-frequency detail
            attenuated in selected Flux blocks   # "starved" pass
delta    = eps_full - eps_weak            # the detail the model was adding
eps      = eps_full + guidance_scale * shaped(delta)

That shaped() is doing real work: it splits the delta into mid/high frequency bands, weights high frequencies more in late steps, gates the hardest edges so you don't get outline halos, and std-limits the result so you get texture back without color drift. An output_rescale stabilizer pulls the output back toward the normal pass's statistics. The weak pass isn't a broken model - it's a detail-starved version of the same model, so the difference between the two is literally "the detail Flux wanted to add."

Crucially, because it's a model patch rather than image inversion, it runs inside tiled samplers like Ultimate SD Upscale. That's where the 3K-4K textures come from. It also refuses to patch anything that isn't Flux - it checks for double_blocks / single_blocks on the diffusion model and errors out on SD/SDXL/Z-Image.

The inputs that matter

It takes a MODEL and outputs a patched MODEL - wire it between your ModelSamplingFlux and your sampler. Of the dozen-odd settings, a beginner actually sets three:

  • guidance_scale (default 0.35) - the main dial. Start 0.3-0.6 and raise until it looks crunchy, then back off a hair.
  • single_start / single_end (default 15/38) - the single-block band where most of Flux's detail lives. Flux-dev has 38; set end <= start to disable a band entirely.
  • step_start / step_end (0.0/1.0) - the active window as a fraction of executed steps. At low denoise the executed steps are already the tail of the schedule, so keep step_start near 0.

weaken_strength (how hard the weak pass suppresses detail), blur_passes (1 = finest detail scale), output_rescale (lower = rawer detail), and adaptive_gate (keep it on - it only weakens where there's already detail energy, so flat areas stay clean) are the fine-tuning layer. The README's wiring is UNETLoader → LoRAs → ModelSamplingFlux → FDG → UltimateSDUpscaleCustomSample, ideally with a clean solver like seeds_3 at eta=0 and the ays scheduler - remember, Flux wants Euler-style schedulers, not Karras.

Install

No model downloads, no heavy deps - the source ships pure Python on ComfyUI's public model-patcher API. Grab it via ComfyUI Manager (search "ComfyUI-FluxDetailGuidance") or:

cd ComfyUI/custom_nodes
git clone https://github.com/lookuters22/ComfyUI-FluxDetailGuidance

Restart ComfyUI and it appears under Flux/experimental.

Where people get burned

  • Not enough detail: raise guidance_scale, widen the single-block band, or lower output_rescale.
  • Halos, crunch, or the flat contrasty "default Flux" look: lower guidance_scale, narrow the band, and keep the bands in the back half of each stack. Weaken the early blocks and the weak pass stops being "detail-starved" and becomes "broken."
  • Errors: both bands empty, or step_start > step_end, and it refuses to run - the messages are explicit.
  • Silently inactive: if a step can't get sample_sigmas it logs a warning and passes through. Non-grid image tokens (Kontext, reference latents) make the attenuation safely no-op, which is a graceful failure, not a crash.

Honest framing: this is a 60-impression niche pack with barely any community chatter, so you're on your own a little - but the tooltips are unusually good and the defaults are sensible. If Flux's plastic skin is your pet peeve and you already tile-upscale, this is worth an afternoon.

CategoryFlux/experimental

Inputs (13)

NameTypeDefaultDescription
modelMODEL
enabledBOOLEANtrue
double_startINT100–60First double-block (inclusive) to weaken. Flux-dev has 19 double-blocks.
double_endINT190–60Last double-block (exclusive). Set <= start to disable double-block patching.
single_startINT150–60First single-block (inclusive) to weaken. Flux-dev has 38 single-blocks (most of the detail).
single_endINT380–60Last single-block (exclusive). Set <= start to disable single-block patching.
step_startFLOAT0.000–1Start of active window as a fraction of EXECUTED steps. At low denoise keep this near 0.
step_endFLOAT1.000–1End of active window (fraction of executed steps).
guidance_scaleFLOAT0.350–3Detail strength. Main dial. Start 0.3-0.6 and increase until it looks crunchy.
weaken_strengthFLOAT0.500–1How hard the weak pass suppresses local image-token detail per block.
blur_passesINT11–4Defines 'detail' scale (high-frequency residual). 1 = finest.
output_rescaleFLOAT0.300–1Stabilizer toward normal-pass statistics. Lower = more raw detail.
adaptive_gateBOOLEANtrueOnly weaken where local detail energy is high; keeps flat regions clean.

Outputs (1)

NameTypeDescription
modelMODEL