Forbidden Vision 💎 Refiner
One node that actually fixes washed-out colors
- latent
- vae
- image
- refined_latent
- refined_image_preview
Half the reason people stop sharing a first pass is that it looks flat: muddy shadows, washed-out highlights, colors that lean too warm or too dead. The Refiner (LatentRefiner) is Forbidden Vision's answer to that - a single node that analyzes an image with a custom-trained neural corrector and fixes exposure, black levels, and tone automatically, then optionally upscales it and even fakes depth of field. It's the pack's second-most-used node for a reason: you can drop it after any sampler, hit go, and the output simply looks more finished.
How it works
The core is the neural corrector, a model trained on curated pairs to reproduce the color-and-exposure adjustments the author used to do by hand. It runs a YUV-based analysis, lifts shadows, protects highlights from clipping, and balances color. Two strength dials blend between your original and the fully-corrected result: corrector_tone (default 1.0, full power) and corrector_color (default 0.7). If the image comes out too bright or too dark in places, pull corrector_tone down; if the "temperature" shifts, lower corrector_color. That's the entire tuning model - two sliders.
On top of that sit three optional extras, all off by default:
- Upscaling -
enable_upscale+upscale_factor(the author's pick is 1.2 before a second diffusion pass). It loads any upscaler from yourupscale_modelsfolder, with a plain Bicubic fallback. - AI relight -
depth_relightgently brightens the foreground subject using a depth map, useful for lifting a face without flattening shadows. - Depth of field -
depth_dof_enableblurs background and foreground around a computed focus plane.depth_dof_focus(0.5–0.99) sets where that plane sits;depth_dof_modelchooses Depth Anything V2-Small (faster, less VRAM) or V2-Base (more stable). The depth-estimation lineage here is solid - Depth Anything V2 is the standard modern monocular depth estimator, not an obscure hack.
Inputs, outputs, and where it goes
The node accepts a latent, an image, or both, plus a vae. The convenience design: if you feed it a latent it decodes it (with caching so repeated runs don't re-decode), processes the pixels, and if a vae is connected it re-encodes the result - so it works mid-workflow and as a final enhancer. Outputs are refined_latent and refined_image_preview.
The two quirks to know about:
use_tiled_vae- if you're re-encoding a high-res image, tiled VAE encoding avoids seams and cuts VRAM.tile_sizedefault 512; bigger tiles are faster but hungrier.maintain_aspect_ratioandenforce_mod32_boundaries- the node may crop a few edge pixels to keep the output a multiple of 32 and unstretched. Leave them on.
The README's suggested slot is a pre-pass before your second sampling stage: refine the tone first, then resample on top of a correctly-graded image. The neural corrector model auto-downloads on first run with the rest of the pack. One honest note: the corrector is marked experimental by the author, and tone corrections are taste - if it's too aggressive for your checkpoint, the tone/color sliders are there to dial it back rather than off.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| enable_upscale | BOOLEAN | false | — |
| upscale_model | COMBO | Simple: Bicubic (Standard) | 1 options: Simple: Bicubic (Standard) |
| upscale_factor | FLOAT | 1.201–8 | — |
| neural_corrector | BOOLEAN | true | — |
| corrector_tone | FLOAT | 1.000–1 | — |
| corrector_color | FLOAT | 0.700–1 | — |
| depth_relight | BOOLEAN | false | — |
| depth_relight_stringth | FLOAT | 0.300–1 | — |
| depth_dof_enable | BOOLEAN | false | — |
| depth_dof_strength | FLOAT | 0.400–1 | — |
| depth_dof_focus | FLOAT | 0.750.5–0.99 | — |
| depth_dof_model | COMBO | V2-Small | 2 options: V2-Small, V2-Base |
| maintain_aspect_ratio | BOOLEAN | true | If Enabled: Crops edges slightly to fit grid without stretching. |
| enforce_mod32_boundaries | BOOLEAN | true | Forces output resolution to be a multiple of 32. |
| use_tiled_vae | BOOLEAN | false | — |
| tile_size | INT | 512256–2048 | — |
| offload_models_to_cpu | BOOLEAN | true | Move neural corrector and depth models from VRAM to RAM after processing. Frees GPU memory for other nodes (e.g. checkpoint swaps in queued workflows). Disable if you're chaining many refiner passes and want to skip the small reload overhead. |
| latentopt | LATENT | — | |
| vaeopt | VAE | — | |
| imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| refined_latent | LATENT | — |
| refined_image_preview | IMAGE | — |