Nodes/Comfyui-EasyIllustrious/⟳ Triple-Pass Sampler
ComfyUI Node

⟳ Triple-Pass Sampler

A three-stage sampler in one node

By regiellis·Created 12 months ago·Updated 4 months ago· 82
⟳ Triple-Pass Sampler
  • model
  • positive
  • negative
  • latent_image
  • composition_latent
  • structure_latent
  • final_latent
seed0
comp_steps8
comp_cfg7.0
comp_denoise0.90
comp_samplerdpm_2
comp_schedulerkarras
struct_steps12
struct_cfg5.5
struct_denoise0.70
struct_samplereuler
struct_schedulernormal
detail_steps16
detail_cfg4.5
detail_denoise0.35
detail_samplereuler
detail_schedulernormal
progressive_cfg_decaytrue
adaptive_stepstrue
adaptive_refinementtrue
preserve_compositiontrue
separate_noisestrue
reuse_comp_noise_for_structfalse
reuse_struct_noise_for_detailfalse
comp_seed_offset0
struct_seed_offset1
detail_seed_offset2
nan_guardtrue
stability_clamp20.0
model_versionauto
Version Preset Overridedisabled

The open secret about the Illustrious gallery images that look far better than your own generations: they're almost never a single sampling pass. Ask around and the recipe people actually use is generate, then upscale, then inpaint at a higher effective resolution to fix detail the base pass couldn't resolve. IllustriousTriplePassSampler tries to bake a version of that workflow into one node - composition, then structure, then detail, each as its own sampling stage with its own settings - instead of you hand-building three KSamplers and the latent scaling between them.

The three stages

Standard KSampler inputs up front - model, seed, positive, negative, latent_image - plus roughly thirty optional parameters split across three named stages. comp (composition) runs first: loose layout, low step count (comp_steps, default 8), higher CFG (comp_cfg, default 7), and a high denoise (comp_denoise, default 0.9) so it's basically starting from scratch, using comp_sampler (default dpm_2) and comp_scheduler (default karras). struct (structure) refines coarse forms with more steps (struct_steps, 12), a lower CFG (struct_cfg, 5.5), and a mid denoise (struct_denoise, 0.7). detail does the fine work - most steps (detail_steps, 16), lowest CFG (detail_cfg, 4.5), and a small denoise (detail_denoise, 0.35) so it's touching up rather than repainting. CFG and denoise stepping down stage over stage mirrors Illustrious's own settings guidance - moderate CFG, more steps only where the content actually needs it.

A handful of toggles manage the handoff between stages: progressive_cfg_decay gently lowers CFG across the three passes automatically; adaptive_steps/adaptive_refinement adjust step counts and detail-stage behavior based on what the previous stage produced; preserve_composition keeps the first stage's layout locked in if a later stage's denoise is pushed high enough that it might otherwise redraw the scene. separate_noises plus three *_seed_offset fields let each stage roll its own seed off the base one instead of reusing it, and reuse_comp_noise_for_struct/reuse_struct_noise_for_detail are the override if you'd rather stages share noise. nan_guard and stability_clamp are pure defensive plumbing - scrub NaN/Inf and clamp latent magnitude if a stage goes numerically unstable. model_version and Version Preset Override (force EPS or VPred-tuned presets) tune the whole pipeline for the specific Illustrious release you're running, which matters more than it sounds - eps and vpred checkpoints in this family want genuinely different CFG and scheduler behavior, not just different defaults.

Outputs

All three stage latents - composition_latent, structure_latent, final_latent - not just the last one. VAE-decode any of them to see what each pass actually contributed, or just take final_latent and treat the node like a drop-in KSampler replacement.

Installing it

ComfyUI Manager: search "EasyIllustrious," install, restart. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/regiellis/ComfyUI-EasyIllustrious, then pip install -r ComfyUI-EasyIllustrious/requirements.txt inside your ComfyUI environment, then restart.

A dose of honesty before you commit to this

Not everyone who's tried it is convinced it beats the simpler approach. On the pack's own Reddit launch thread, one experienced user compared this node's multi-pass output directly against a plain dual-KSampler setup on the same prompt and reported the same image quality either way - same anatomy quirks, no clear win from the extra stages. That's not a reason to skip the node, but it is a reason to A/B it against your own vanilla setup before assuming more stages automatically means a better image; with thirty-plus parameters to tune, it's easy to convince yourself a change helped when a side-by-side comparison would say otherwise. Start from the defaults, change one stage at a time, and keep a plain KSampler workflow around to compare against.

CategoryEasy Illustrious / Sampling

Inputs (34)

NameTypeDefaultDescription
modelMODELUNet diffusion model to sample with (SDXL / Illustrious).
seedINT00–18446744073709550000Base random seed; use different seeds for different outputs.
positiveCONDITIONINGPositive prompt conditioning (what you want to see).
negativeCONDITIONINGNegative prompt conditioning (what to avoid).
latent_imageLATENTStarting latent tensor (shape [B,4,H/8,W/8]).
comp_stepsoptINT85–50Steps for composition (global layout).
comp_cfgoptFLOAT7.03–10CFG for composition stage.
comp_denoiseoptFLOAT0.900.5–1Denoise strength for composition.
comp_sampleroptCOMBOdpm_2Sampler for composition pass.
comp_scheduleroptCOMBOkarrasScheduler for composition pass.
struct_stepsoptINT125–50Steps for structure (coarse forms).
struct_cfgoptFLOAT5.53–8CFG for structure stage.
struct_denoiseoptFLOAT0.700.4–1Denoise strength for structure pass.
struct_sampleroptCOMBOeulerSampler for structure pass.
struct_scheduleroptCOMBOnormalScheduler for structure pass.
detail_stepsoptINT165–50Steps for detail (fine features).
detail_cfgoptFLOAT4.52.5–7CFG for detail stage.
detail_denoiseoptFLOAT0.350.05–0.8Denoise strength for detail pass.
detail_sampleroptCOMBOeulerSampler for detail pass.
detail_scheduleroptCOMBOnormalScheduler for detail pass.
progressive_cfg_decayoptBOOLEANtrueGently lower CFG across stages to stabilize.
adaptive_stepsoptBOOLEANtrueAdapt steps based on latent complexity.
adaptive_refinementoptBOOLEANtrueRefine detail settings based on structure output.
preserve_compositionoptBOOLEANtrueKeep base composition stable if denoise is high.
separate_noisesoptBOOLEANtrueUse different seeds per stage.
reuse_comp_noise_for_structoptBOOLEANfalseForce structure to reuse composition seed.
reuse_struct_noise_for_detailoptBOOLEANfalseForce detail to reuse structure seed.
comp_seed_offsetoptINT00–10000Seed offset for composition pass.
struct_seed_offsetoptINT10–10000Seed offset for structure pass.
detail_seed_offsetoptINT20–10000Seed offset for detail pass.
nan_guardoptBOOLEANtrueScrub NaN/Inf and clamp extreme values defensively.
stability_clampoptFLOAT20.05–50Clamp magnitude of latents to this bound if unstable.
model_versionoptCOMBOautoExplicit version to nudge behavior; leave auto for neutrality.
Version Preset OverrideoptCOMBOdisabledForce EPS or VPred-optimized presets regardless of detection.

Outputs (3)

NameTypeDescription
composition_latentLATENT
structure_latentLATENT
final_latentLATENT