Explorer Conditioning Wave Controller
The knob panel for prompt crossfading
- wave_config
Some nodes are the engine and some are the dashboard. Explorer Conditioning Wave Controller is the dashboard: it's the small set of knobs that defines how the Explorer Conditioning Sampler crossfades between prompts, and it does nothing by itself. Wire its wave_config output into the sampler and you've just told the whole traversal how to behave.
What you're actually setting
The controller describes a path between prompt states. With two prompts, A and B, the default shape is a straight swap: A fades from 0 to 1 while B fades from 1 to 0. You get eight float knobs, two per prompt endpoint, plus a curve and a loop switch:
- positive_a_start / positive_a_end and positive_b_start / positive_b_end - where each prompt starts and ends along the traversal. Defaults give you the clean A→B swap. Flip them and you go B→A instead.
- positive_c_start / positive_c_end - only relevant if you're using the sampler's optional third positive. The moment these are nonzero, the traversal becomes a two-segment path: A→B, then B→C.
- loop_video - with C in play, this adds a third segment (C→A) so the strip loops back on itself, handy for seamless video loops.
- curve_type -
linear,sine, orease_in_out. Sine eases in and out of each segment (half-cosine), ease_in_out is a smoothstep; both kill the abrupt start/stop of a pure linear ramp. For morphing, ease_in_out is usually the one that doesn't look like a jump cut.
Each float can go from -10 to 10, so you can overshoot - a prompt that dips negative mid-traversal is a deliberate stylistic choice, though beginners will want to stay in 0–1 land.
How it works
The node just builds a WAVE_CONFIG dict - curve type, the six strength anchors, and the loop flag - and passes it along. The sampler is the one that does the math: it samples the curve at each iteration and builds the weighted-concat conditioning. Nothing here touches the model, the latent, or the GPU. That's why there's exactly one output (wave_config) and it always goes to the sampler.
Where it sits
The chain is dead simple: CLIP Text Encode the prompts → this controller → Explorer Conditioning Sampler → VAE Decode. You can also thread the wave_config through Wave Visualizer first to eyeball the curve before committing GPU time - genuinely worth it the first time, because "sine vs linear" is much clearer as a graph than as a guess.
Installing it
Part of kentskooking-nodes: ComfyUI Manager → search kentskooking-nodes → install → restart, or clone manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Kentskooking/kentskooking-nodes
Restart after. No models, no extra dependencies.
The one gotcha
If you connect positive_c on the sampler but leave these C knobs at 0, C contributes nothing - you get a silent A→B. And if you set loop_video without C, the loop flag does nothing at all, because the loop is only defined over the C segment. The controller is small, but it's small for a reason: everything here is a description of a traversal, and the sampler follows it literally.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| curve_type | COMBO | linear | 3 options: linear, sine, ease_in_out |
| positive_a_start | FLOAT | 0.00-10–10 | — |
| positive_a_end | FLOAT | 1.00-10–10 | — |
| positive_b_start | FLOAT | 1.00-10–10 | — |
| positive_b_end | FLOAT | 0.00-10–10 | — |
| positive_c_start | FLOAT | 0.00-10–10 | — |
| positive_c_end | FLOAT | 0.00-10–10 | — |
| loop_video | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| wave_config | WAVE_CONFIG | — |