Nodes/ComfyCollectorNodes/MoE Sampler Dual (CCN)
ComfyUI Node

MoE Sampler Dual (CCN)

MoE Sampler Dual (CCN)

By valkymaera·Created 4 months ago·Updated 10 days ago· 1
MoE Sampler Dual (CCN)
  • model_high
  • model_low
  • positive
  • negative
  • sigmas
  • latent_image
  • curve_high
  • curve_low
  • lora_lanes
  • sampler
  • latent
  • info
noise_seed0
add_noisetrue
sampler_name
boundaryi2v (0.900)
custom_boundary0.875
curve_mode
sigma_decayfalse
cfg_high3.500
cfg_high_min1.000
cfg_low3.500
cfg_low_min1.000
lane_segments4

MoE Sampler Dual (CCN) is the all-in-one sampler for Wan 2.2's two-expert architecture - the node that replaces the fiddly hand-built graph of "split the sigmas, run high with one KSampler, chain the latent, run low with another, get the noise placement right." You hand it both experts, one conditioning, one schedule, and it does the whole two-phase dance internally: splits the sigma schedule at the trained expert boundary (via MoE Sigma Split, same logic), runs the high-noise expert over the first segment, chains the latent, runs the low-noise expert over the rest, and handles the degenerate empty-phase cases so you never execute a stub schedule.

Where it gets interesting is that it isn't just a convenience wrapper - it adds two things you can't easily do with the manual two-sampler graph. First, per-phase curve-driven CFG: each expert gets its own CFG value (cfg_high, cfg_low) and an optional CCN_CURVE, so you can shape classifier-free guidance differently in the composition-heavy high-noise phase versus the detail-heavy low-noise phase, with the curve measured per phase (in step or sigma mode) and optional sigma decay toward 1.0. Second, curve-scheduled LoRA lanes: feed it lora_lanes from LoRA Pair Lane and it compiles every lane's curve into a staircase of strength segments, re-patching the model clone between segments so a LoRA can ramp across the whole run - including across the expert boundary. lane_segments (1–8) is your repatch budget per phase; more segments means smoother curves at the cost of more re-patching.

The inputs are the standard sampler kit plus the MoE-specific ones. You'll set:

  • model_high / model_low - the two experts.
  • positive / negative, sigmas (full schedule, split internally), latent_image, noise_seed, add_noise (disable only if your latent is already noised for this schedule).
  • boundary - t2v (0.875), i2v (0.900), or custom. This is the single most important decision and the community's least settled one: the official values come from Wan's configs, but your scheduler/shift changes where the ideal cut actually is, and the split is "only partially knowable."
  • cfg_high / cfg_high_min / cfg_low / cfg_low_min - CFG per phase, with the *_min values as curve floors.
  • Optional: curve_high, curve_low, lora_lanes, and a sampler object that overrides sampler_name.

Outputs: latent (final, wire to your VAE) and info (the full report - split, CFG lines, compiled lane staircase - which the cockpit widget in the UI previews live and then trues up after each run).

Install

WIP pack member, git clone:

cd ComfyUI/custom_nodes
git clone https://github.com/valkymaera/ComfyCollectorNodes

Restart ComfyUI; find it in the "CCN" category. It uses ComfyUI internals (comfy.sample, comfy.samplers, comfy.sd) - all stock, no new pip deps. No model downloads; bring your own Wan 2.2 checkpoints and pair LoRAs. MIT, with the WIP caveat that internals can shift.

Common issues

The boundary is where most confusion lives - the presets match Wan's configs, but the visually ideal split for your scheduler and shift may differ; the info output tells you the actual step counts, and if a phase is unexpectedly tiny, raise/lower the boundary and re-check. Multistep samplers reset their history at segment boundaries (the same reset the manual graph accepts once at the expert hand-off) - expected, not a bug, but worth knowing if you're chasing subtle differences with a Heun-style sampler. And if lora_lanes is connected and you see blocky strength changes, lane_segments is your knob. When in doubt, run with no curves and no lanes first to verify the two-expert baseline, then add layers.

CategoryCCN

Inputs (22)

NameTypeDefaultDescription
model_highMODELHigh-noise expert model.
model_lowMODELLow-noise expert model.
positiveCONDITIONING
negativeCONDITIONING
sigmasSIGMASFull schedule from an upstream scheduler; split internally at the expert boundary.
latent_imageLATENT
noise_seedINT00–18446744073709550000
add_noiseBOOLEANtrueDisable only when the incoming latent is already noised for this schedule.
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
boundaryCOMBOi2v (0.900)Trained expert boundary (t = sigma * 1000).
custom_boundaryFLOAT0.8750–1Used only when boundary = custom.
curve_modeCOMBOHow progress is measured for CFG curves (per-phase) and LoRA lane curves (global).
sigma_decayBOOLEANfalseAttenuate effective CFG toward 1.0 as sigma falls within each phase (matches CurveCFGGuider).
cfg_highFLOAT3.5000–100
cfg_high_minFLOAT1.0000–100Curve floor for the high phase; unused without a curve.
cfg_lowFLOAT3.5000–100
cfg_low_minFLOAT1.0000–100Curve floor for the low phase; unused without a curve.
lane_segmentsINT41–8Max LoRA lane segments per phase (repatch budget). Used only when lora_lanes is connected.
curve_highoptCCN_CURVE
curve_lowoptCCN_CURVE
lora_lanesoptCCN_LORA_LANESSchedulable LoRA lanes from LoRA Pair Lane.
sampleroptSAMPLEROverrides sampler_name when connected.

Outputs (2)

NameTypeDescription
latentLATENT
infoSTRING