Bernini-R Dual Expert Sampler
The high-noise/low-noise sampler Bernini-R's Wan lineage expects
- high_noise_model
- low_noise_model
- positive
- negative
- latent_image
- context_options
- guidance_config
- block_swap_args
- guidance_schedule
- latent
Wan 2.2 - Bernini-R's parent - uses a two-pass architecture: a high-noise model handles motion and scene composition in the early steps, then a low-noise model refines detail in the late steps. BerniniR_DualExpertSampler is this pack's implementation of that split, letting you hand it two different model handles and switch between them mid-run. If you've seen the "high-noise vs low-noise pass" advice about Wan 2.2 speed LoRAs - only apply them to the low-noise pass - this is the node that makes that trick available in this pack.
How it works
You give it a high_noise_model handle and a low_noise_model handle, plus a split_step: after that many denoising steps, the sampler swaps from the high-noise instance to the low-noise one. It's the same sampler surface as BerniniR_KSampler - same conditioning, latent, steps, cfg, sampler/scheduler, flow_shift, and the same optional context_options, guidance_config, and block_swap_args wires. The block swap note in the node's description matters: because the sampler can reload models between phases, connecting block_swap_args keeps VRAM from spiking when the second model loads.
The inputs that matter
- high_noise_model / low_noise_model - two
BERNINI_MODEL_HANDLEs. They don't have to be different checkpoints; the classic setup is the same model on both with different LoRAs or compile settings, or the high-noise side at full quality and the low-noise side with a speed LoRA. That's the Wan 2.2 community's well-earned compromise: keep scene composition and motion at full fidelity, let the refinement pass run fast. - split_step - switch point. Default 10 out of 20 steps. For a 20-step run that's roughly half-and-half; tune by looking at where your videos stop changing structurally.
- steps / cfg / sampler_name / scheduler / flow_shift - same meanings as
BerniniR_KSampler.eulerwithsimpleornormalis a fine start; Bernini was trained withflow_shift3.0.
Output
One: latent (LATENT) → BerniniR_VAEDecode.
Honest notes
The dual-expert path is where this pack's lazy-loading design shines - each model loads on demand and the handle layer's LRU cache means swapping between two handles doesn't re-read files every run. But it's also more machinery to get wrong. If you're on a small card, remember both models can't sit in VRAM comfortably; that's what the block_swap_args input is there for, and the example workflow in the repo connects one. Start with BerniniR_KSampler before reaching for this node - you need a stable baseline to know whether the second expert is actually helping. And if you only have one checkpoint and no real reason to split, you don't need this node at all; the single-sampler path does plain Bernini-R perfectly well.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| high_noise_model | BERNINI_MODEL_HANDLE | Handle for high-noise (early) denoising steps | |
| low_noise_model | BERNINI_MODEL_HANDLE | Handle for low-noise (late) denoising steps | |
| split_step | INT | 101–1000 | Switch from high_noise to low_noise model after this many steps |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 6.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| denoise | FLOAT | 1.000–1 | — |
| flow_shift | FLOAT | 3.00.1–100 | — |
| context_optionsopt | BERNINI_CTX | Context window config from BerniniR_ContextWindow. Connect to enable temporal window tiling. | |
| guidance_configopt | BERNINI_GUIDANCE_CONFIG | Guidance strategy from BerniniR_GuidanceConfig. | |
| block_swap_argsopt | BERNINI_BLOCKSWAP | Block swap config from BerniniR_BlockSwapArgs. Leave disconnected to disable. | |
| add_noiseopt | BOOLEAN | true | — |
| guidance_scheduleopt | BERNINI_GUIDANCE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |