⟲ Multi-Pass Sampler
Structure first, detail second, one node instead of two
- model
- positive
- negative
- latent_image
- sigmas
- structure_latent
- final_latent
If you've ever chained two KSamplers together - a rough high-denoise pass to lock in composition, then a low-denoise pass over an upscaled latent to add detail without disturbing it - this node is that pattern built in, with both stages pre-tuned instead of you guessing at a second set of steps/CFG/sampler values.
The two passes
The structure pass runs first: higher denoise (0.7 default), higher CFG (6.5, right at the top of Illustrious's usable range), and dpm_2 as the default sampler - a heavier, more deliberate sampler suited to laying out composition rather than speed. The detail pass runs second at low denoise (0.2) and lower CFG (4.2) with euler, refining texture and fine detail without meaningfully moving anything the structure pass already committed to.
That two-CFG split matters more than it looks: a single CFG value has to compromise between "obey the prompt enough to get the composition right" and "don't burn the fine detail," and this node just gives each job its own number instead of averaging them.
preserve_composition and adaptive_transition both work against the same risk - that the detail pass drifts the pose or layout the structure pass established. preserve_composition keeps the base layout stable across the handoff; adaptive_transition gently re-anchors it specifically when the structure pass ran at high denoise, since a higher structure denoise gives the detail pass more room to wander if left unchecked. reuse_noise reuses the structure pass's noise seed for detail sampling too, for tighter coupling between the two - if you want the detail pass to feel like a continuation rather than a fresh roll, turn this on.
The inputs and outputs that matter
model,seed,positive,negative,latent_image- required, same as any sampler.structure_cfg(6.5) anddetail_cfg(4.2) are the two knobs worth understanding before you touch anything else - they're deliberately not the same number.Version Preset Override- force EPS or VPred-tuned presets if you know your checkpoint and don't trust auto-detection; leave ondisabledotherwise.detail_seed_offset(default 1) gives the detail pass its own seed relative to the base, so it's not identical noise unlessreuse_noiseis also on.
Outputs: structure_latent (decode it if you want to inspect the intermediate composition) and final_latent (after both passes - what you'd normally send to VAE Decode).
Installing it
ComfyUI Manager: search "EasyIllustrious," install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/regiellis/ComfyUI-EasyIllustrious
pip install -r ComfyUI-EasyIllustrious/requirements.txt
No downloads beyond the pack - this is pure sampling logic against your existing checkpoint.
Common issues
Output looks oversaturated or overcooked. structure_cfg defaults right at the ceiling of Illustrious's comfortable CFG range. Trim it toward 5.5–6 before touching anything else - this is the same fix the pack recommends generally for burned output, applied to the pass that's actually running hot.
Composition shifts noticeably between the structure and detail pass. Make sure preserve_composition is on (it is by default) and try enabling reuse_noise - a fresh noise seed for the detail pass, combined with a high structure denoise, is the most common cause of visible drift.
Running a vpred checkpoint and getting flat or static-looking output. This sampler's default CFG pairing assumes standard epsilon prediction. Set Version Preset Override to VPred explicitly rather than trusting auto-detect - vpred wants a different CFG regime than either of this node's default numbers.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | UNet diffusion model to sample with (SDXL / Illustrious). | |
| seed | INT | 00–18446744073709550000 | Base random seed; use different seeds for different outputs. |
| positive | CONDITIONING | Positive prompt conditioning (what you want to see). | |
| negative | CONDITIONING | Negative prompt conditioning (what to avoid). | |
| latent_image | LATENT | Starting latent tensor (shape [B,4,H/8,W/8]). | |
| structure_stepsopt | INT | 125–50 | Steps for the structure pass (coarse layout). |
| structure_cfgopt | FLOAT | 6.53–8 | CFG for structure (higher = obey prompt more). |
| structure_denoiseopt | FLOAT | 0.700.4–1 | Denoise strength for structure pass. |
| structure_sampleropt | COMBO | dpm_2 | Sampler for structure pass. |
| structure_scheduleropt | COMBO | karras | Scheduler for structure pass. |
| detail_stepsopt | INT | 105–50 | Steps for the detail pass (fine features). |
| detail_cfgopt | FLOAT | 4.22–7 | CFG for detail (higher = more literal to prompt). |
| detail_denoiseopt | FLOAT | 0.200.05–0.7 | Denoise strength for detail pass. |
| detail_sampleropt | COMBO | euler | Sampler for detail pass. |
| detail_scheduleropt | COMBO | normal | Scheduler for detail pass. |
| adaptive_transitionopt | BOOLEAN | true | Gently re-anchor structure if denoise was high. |
| preserve_compositionopt | BOOLEAN | true | Keep the base composition stable across passes. |
| reuse_noiseopt | BOOLEAN | false | Reuse structure noise for detail for tighter coupling. |
| detail_seed_offsetopt | INT | 10–10000 | Seed offset for the detail pass. |
| model_versionopt | COMBO | auto | Explicit version to nudge CFG if desired (leave on auto for neutrality). |
| Version Preset Overrideopt | COMBO | disabled | Force EPS or VPred-optimized presets regardless of model detection |
| sigmasopt | SIGMAS | Direct schedule tensor (SIGMAS) from a scheduler node. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| structure_latent | LATENT | — |
| final_latent | LATENT | — |