SpectralVAEDetailer (alias)
SpectralVAEDetailer is LatentDetailer
- model
- latent
- positive
- negative
- LATENT
Short version: SpectralVAEDetailer and LatentDetailer are the same node, and you'll see both in your node menu. If you came here from a saved workflow, nothing is wrong with your graph. Pick whichever name you like - the behavior is identical.
Here's why the confusion exists. This pack started life in December 2025 as ComfyUI-SpectralVAEDetailer, and the node's original name was SpectralVAEDetailer. In v0.3.0 (late December 2025) the author renamed the whole project to ComfyUI-LatentDetailer and gave the node the clearer name LatentDetailer - but kept the old name registered as an alias so nobody's existing workflows broke. In the actual source, SpectralVAEDetailer is the base class that contains all the logic, and LatentDetailer is a one-line subclass that inherits it. ComfyUI's node mapping points both names at the same implementation, with the old one displayed as "SpectralVAEDetailer (alias)".
What it does
A latent-space detail pass that slots between your KSampler and the VAE Decode. It runs your UNet one or more times at a chosen point in the denoise schedule (the sigmas input, default 0.40), computes the denoised estimate, extracts its high-frequency structure, and reinjects it into the latent - plus optional micrograin, bloom, color drift, and chromatic aberration. All in latent space, never decoded to pixels, so it's fast. It's aimed at SDXL photoreal work and the "everything looks too plastic" problem, though the author says it's model-agnostic if you re-tune the starting parameters.
The inputs and outputs are exactly the ones documented for LatentDetailer: model, latent, positive, negative, sigmas, detail_strength, hires_scale, noise_scale, bloom_strength, and about thirty more optional knobs; one LATENT output that feeds your VAE Decode. See the LatentDetailer writeup for the full mechanism, the inputs that matter, and the troubleshooting section - all of it applies here verbatim.
Install
Since both names ship in the same pack, installing either one gives you both. ComfyUI Manager, search "LatentDetailer", or:
cd ComfyUI/custom_nodes
git clone https://github.com/SparknightLLC/ComfyUI-SpectralVAEDetailer
Then restart ComfyUI. No dependencies, no model downloads, no requirements.txt - the only thing it needs is the same checkpoint and conditioning you're already feeding your sampler.
The one thing to watch
Old tutorials and Reddit posts from the original launch will say "SpectralVAEDetailer" and point at the old repo URL. Both still work: the clone command above is the old repo name and it's still the URL ComfyUI tracks, while the README and Registry entry now live under "LatentDetailer." If you're ever confused about whether a saved workflow is using the right node, the answer is yes - they're the same code.
Inputs (42)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | -1-1–2147483647 | Random seed for grain/color drift. Use -1 for random each run. |
| sigmas | STRING | 0.40 | Comma-delimited list of normalized sigma positions (0..1). Each entry runs one UNet evaluation and the denoised estimates are averaged. Example: 0.25,0.55. 0=start (noisiest), 1=end (cleanest). |
| model | MODEL | — | |
| latent | LATENT | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| luma_clarity | FLOAT | 0.000–1 | Mid-band local contrast on latent channel 0. 1.0 is intentionally strong. |
| boost_confidence | FLOAT | 0.000–1 | Boosts UNet-proposed micro detail ONLY where it appears confident; suppresses flats and strong edges. |
| bloom_strength | FLOAT | 0.000–1 | Approximate photographic bloom/halation by spreading bright highlights (luma only). Best paired with a little noise_scale (e.g. 0.02–0.08) for a more convincing photographic rolloff. |
| bloom_threshold | FLOAT | 0.650–1 | Only highlights above this luma threshold contribute to bloom. |
| bloom_radius | INT | 80–64 | Blur radius for bloom spread. Larger is softer but slower. |
| color_drift | FLOAT | 0.250–1 | Noise-driven granular color drift (micro color distribution). Higher = stronger. |
| color_drift_radius | INT | 160–64 | Granular drift scale. 1..3 is typical; 16 is very broad/slow drift. |
| cfg | FLOAT | 7.000–10 | Base CFG. This node applies additional HF/LF shaping when cfg > 1. |
| cfg_hf_boost | FLOAT | 5.000–5 | How strongly to inject high-frequency CFG detail (from den_pos - den_neg). |
| cfg_lf_boost | FLOAT | 0.000–2 | How strongly to inject low-frequency CFG contrast (usually keep low). |
| cfg_radius | INT | 50–64 | CFG split radius. In adaptive mode, this is the DETAIL radius. |
| cfg_radius_flat | INT | 00–64 | CFG split radius used in flat/low-detail regions when adaptive mode is ON. |
| cfg_radius_adaptive | BOOLEAN | true | If ON, blends between cfg_radius_flat (flat) and cfg_radius (detail). |
| cfg_adapt_feather | INT | 20–32 | Blur radius applied to the adaptive mask. Higher reduces halos but can soften detail reach. |
| cfg_adapt_gamma | FLOAT | 2.000.5–3 | Mask curve. >1 shrinks 'detailed' regions (less spill/halo). <1 expands them. |
| detail_strength | FLOAT | 0.650–2 | Strength of injected high-frequency detail from denoised estimate. |
| hf_radius | INT | 40–64 | Detail split radius for base projection (larger = coarser separation). |
| mid_strength | FLOAT | 0.050–0.5 | Adds some mid/low component of the base projection (contrast/shape). |
| detail_chroma | FLOAT | 0.100–2 | Scales how much the detail + CFG injections affect chroma latent channels (1..3). This is NOT chromatic aberration (no spatial shift). |
| chromatic_aberration | FLOAT | 0.000–1 | Lens-like chromatic aberration (spatial misregistration) applied to chroma latent channels (1..3) after all other adjustments. Very subtle effects are usually best (0.02–0.10). |
| protect_lows | FLOAT | 0.900–1 | Prevents HF detail from over-applying in low-frequency regions (reduces harshness). |
| soft_clip_detail | BOOLEAN | true | Soft-limits HF detail to reduce halos/zipper edges. |
| soft_clip_detail_k | FLOAT | 2.200.5–8 | Detail soft-clip amount. Higher = weaker limiting. |
| soft_clip_cfg | BOOLEAN | true | Soft-limits HF CFG injection to reduce harsh edges and background speckle. |
| soft_clip_cfg_k | FLOAT | 2.000.5–8 | CFG soft-clip amount. Higher = weaker limiting. |
| noise_scale | FLOAT | 0.100–0.5 | Micrograin intensity in latent space. |
| grain_luma | FLOAT | 0.000–1 | Luma-dependent grain: increases grain in shadows and reduces it in highlights. This primarily modulates the grain injected by noise_scale (and shaped by noise_radius). |
| noise_tail | FLOAT | -1.00-1–1 | Tail-heaviness of the grain noise distribution. 0 = Gaussian. + = heavier tails (more occasional strong specks / grit). - = lighter tails (smoother). RMS-normalized so noise_scale stays comparable. |
| noise_radius | INT | 10–16 | Grain correlation radius. 0=white, 1..3 often looks most photographic. |
| noise_flat_suppress | FLOAT | 1.000–1 | Suppresses grain in flat regions (local smoothstep mode, always-on). |
| hires_scale | FLOAT | 1.01–4 | If >1, runs ONE UNet pass at upscaled latent resolution, then downsamples denoised estimates back to 1x before post-processing. |
| hires_strength | FLOAT | 0.750–1 | How much of the hires-derived correction to apply. 0=off, 1=full. |
| hires_use_importance_mask | BOOLEAN | true | If ON, applies hires correction mostly where small/foreground-ish features are detected (cheap heuristic). |
| hires_mask_strength | FLOAT | 1.000–1 | 0 = uniform hires blend, 1 = fully importance-masked blend. |
| ignore_cond_timestep_range | BOOLEAN | true | If ON, strips timestep limits from conditioning ranges (more consistent behavior). |
| debug | BOOLEAN | false | Prints diagnostics to console. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |