FLUXCorrector
The self-refinement pass, minus the LLM
- latent_in
- positive
- negative
- corrector_model
- latent
FLUX Corrector: the self-refinement pass, minus the LLM
You know the feeling: Flux hands you 80% of a great image and then quits - hands a little waxy, hair that stops making sense, edges that smear. FLUXCorrector exists for exactly that, by running your latent through a second model fine-tuned to be a corrector instead of a generator.
The weights are research, not a hobbyist's fine-tune. They come from diffusion-cot's FLUX-Corrector, a reflection-tuned Flux.1-dev fine-tune built for the ICCV 2025 paper From Reflection to Perfection (the ReflectionFlow framework). The paper's full idea is a loop: generate → have a verifier (usually an LLM) critique the image → rewrite the prompt → generate again. This node is only the last half of that loop - the corrector step, with no ChatGPT in sight. For most of us that's the useful half anyway.
How it works
The node is a thin wrapper around ComfyUI's own sampler. It takes the latent_in from your main generation and runs a short sampling pass using the corrector model instead of your base model, with your original positive/negative conditioning. The denoise_end input (default 0.25) caps how much of the schedule it touches: the code runs exactly int(steps × denoise_end) steps, so the stock settings (10 steps × 0.25) give the corrector only a couple of steps of light touch-up. That's the design - the corrector was trained to refine, not regenerate. Crank denoise_end toward 1.0 and you've turned it into a full second generation, which is slower and usually defeats the point.
It's a one-way pass, not a loop. No verifier, no prompt rewriting, no "thinking." The author's own docstring calls it "low-noise refinement," and that's the honest description: a polish pass over an already-decent latent.
The inputs that matter
Everything is required, which keeps the node small and obvious:
latent_in- the LATENT out of your main Flux pass (or a VAE-encoded image you want refined).positive/negative- the same conditioning you already encoded. Wire the same CLIP text-encode outputs straight in.corrector_model- the FLUX-Corrector weights, loaded as a MODEL. This is the whole point of the node.denoise_end- default 0.25. Lower = lighter touch, higher = more correction. This is the one you'll actually tune.steps,cfg,sampler_name- defaults 10, 7, and any sampler you like. Notice the cfg: 7, not the 3.5 everyone runs on vanilla Flux dev. The author tuned around higher guidance, so don't import your Flux habit here.
Output is a single latent, which you feed straight into your VAE decode. It drops into the wire between your sampler and your decoder.
Install
ComfyUI Manager (search "comfyui_flux_corrector"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/BNP1111/comfyui_flux_corrector
Restart ComfyUI. There's no requirements.txt and no pip deps - the real dependency is the model, which the README links to on HuggingFace (diffusion-cot/FLUX-Corrector) and leaves you to download yourself. Important detail: the HF repo ships only pytorch_lora_weights.safetensors, a LoRA. So you load Flux.1-dev, apply it with a LoRA loader, and feed the merged model into corrector_model. Expect this to add ~460MB of weights.
The gotcha that matters
Honesty time: this node targets a specific ComfyUI era. Its own docstring pins compatibility at 0.3.28+, and that's the era its code actually matches - it reaches into comfy.samplers internals (create_sampler, plus the steps=/end_step= call signature on KSampler.sample) that ComfyUI's 2026 sampler refactor removed. On a current build, expect an AttributeError the moment you queue the workflow. If you're on a recent ComfyUI and it errors, that's the pack, not you.
It's also a tiny pack - one node, one commit, a wrapper around a research model - so don't expect documentation or a support channel. And a quick note: Flux dev normally ignores negatives; this node hands yours to the corrector with real CFG at whatever cfg you set. Whether that negative does anything depends on how the corrector was trained - start with the defaults and A/B it.
Honestly? It's a niche utility for people who want the reflection-tuning idea without the orchestration. If you've ever wished your Flux output got one more picky pass before the VAE, this is precisely that - when it runs on your ComfyUI version.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| latent_in | LATENT | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| corrector_model | MODEL | — | |
| steps | INT | 101–50 | — |
| denoise_end | FLOAT | 0.250–1 | — |
| cfg | FLOAT | 7.01–15 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |