FunPack Hybrid Euler 2S Sampler
Ancestral for motion, 2S for detail — the sampler that does both
- sigmas
- sampler
- sigmas
FunPack Hybrid Euler 2S Sampler is the workhorse of the pack's sampler family, and its design is a compromise you'll immediately recognize: keep the cheap, lively euler_ancestral behavior for the early steps where motion and composition are being built, then switch to a deterministic DPM-Solver++(2S) ODE refinement for the late steps where fine detail matters. One sampler, two personalities, and the split is exactly where it should be.
How it works
The split point is high_quality_pct (default 0.35) - the fraction of late denoise steps that enter the quality phase. Inside that phase, the first half uses single-eval Euler ODE and the second half uses the full 2S correction, blended by correction_blend (default 1.0, i.e. full correction). So you get one model call per step for most of the run and concentrate the expensive second call where sigma is lowest and detail matters most.
Then eta (1.0) and s_noise (1.0) set the ancestral stochasticity at the start - keep both at defaults for classic ancestral behavior. eta_final is the subtle control: set it below eta and ancestral noise decays linearly toward it as the run progresses, giving a cleaner hand-off into deterministic refinement. eta_final = 0.5 with eta = 1.0 is the documented sweet spot for smoothing the transition.
Outputs are sampler and sigmas, wired the usual advanced way: base scheduler → this node's optional sigmas input → both outputs into SamplerCustomAdvanced/CustomSamplerAdvanced.
The LTX2.3 i2v special
Where this sampler gets interesting is image-to-video on LTX2.3, which has a notorious failure mode: the generated clip locks onto frame 1 and barely moves. The motion_pulse_* controls are anti-stiffness pulses - monotonic noise kicks at selected early/mid denoise steps that push against the stale frame-1 reference without the audio damage that Restart-style replay causes. The aggressive preset is the documented i2v test config: motion_pulse_start_pct 0.30, count 2, spacing 0.22, strength 0.85. This is the one time in this pack where the "try it aggressive" advice is in the docs themselves.
The rest
The same self-improving extras as the Distilled Flow sampler show up here: velocity_bias_* (capture/apply averaged early velocity - creative action injection, not consistency) and rescue_mode (rating-gated in-flight steering toward trajectories you liked, away from ones you rated Awful). quality_sharpness restores detail lost to velocity-bias softening via a free temporal-average unsharp on the quality phase. On rectified-flow models (CONST, e.g. LTXAV) the sampler runs an RF-corrected port - a Heun corrector in place of 2S - and applies noise/steering to the video latent only, never the audio, to avoid joint-attention audio corruption.
Install
It's part of ComfyUI-FunPack:
cd ComfyUI/custom_nodes
git clone https://github.com/olivv-cs/ComfyUI-FunPack
pip install -r requirements.txt
or ComfyUI Manager → search "ComfyUI-FunPack".
Recommended starting values (from the docs)
eta = 1.0, eta_final = 1.0 (or 0.5 to test), s_noise = 1.0, high_quality_pct = 0.30–0.40, correction_blend = 1.0, and every steering feature off until you've rated a few gens. Compared to plain euler_ancestral it should keep more late detail, clean up edges, and keep early motion lively - for roughly the cost of one extra model call on the quality steps.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| eta | FLOAT | 1.000–1 | Ancestral stochasticity at the start of sampling. Keep at 1.0 for classic ancestral behaviour. |
| eta_final | FLOAT | 1.000–1 | Eta value at the quality phase boundary. When below eta, ancestral noise decays linearly toward this value as sigma approaches the quality phase. Lower values give a cleaner hand-off into deterministic refinement. Set equal to eta to disable decay. |
| s_noise | FLOAT | 1.000–10 | Noise scale for ancestral noise injection. |
| high_quality_pct | FLOAT | 0.350–1 | Fraction of late denoise steps that enter the quality phase. The first half of quality steps use single-eval Euler ODE; the second half use the full 2S correction. |
| correction_blend | FLOAT | 1.000–1 | Blend between Euler ODE (0.0) and 2S correction (1.0) for the second half of quality-phase steps. |
| quality_sharpness | FLOAT | 0.000–1 | Restores fine detail lost to velocity-bias softening. Temporal-average unsharp on the x0 prediction during the quality phase only. 0 disables; 0.2-0.4 typical when velocity bias is on. Free (no extra model eval). |
| motion_pulse_mode | COMBO | off | Adds early/mid anti-stiffness motion pulses. Off preserves legacy sampler behavior. |
| motion_pulse_start_pct | FLOAT | 0.300–0.95 | Sampling progress where the first anti-stiffness pulse is applied. |
| motion_pulse_count | INT | 21–6 | How many early/mid motion pulses to request before the late quality phase. |
| motion_pulse_spacing_pct | FLOAT | 0.220.04–0.45 | Progress spacing between motion pulses. |
| motion_pulse_strength | FLOAT | 0.850–1 | How strongly motion pulses add monotonic noise kicks. Higher values push harder against stale image references. |
| velocity_bias_mode | COMBO | off | Experimental: capture/apply averaged early model velocity around normalized sigma 0.9 and 0.8. Off preserves legacy sampler behavior. |
| velocity_bias_strength | FLOAT | 0.000–3 | Strength of the remembered velocity (action) injected at the structure sigma. 0 disables. ~0.15 = subtle spice; 0.3-1.0 = clear action crossover; 2-3 approaches full action replacement (capped so the current gen isn't wiped). Creative tool, not for consistency. |
| velocity_bias_source | COMBO | mean | How velocity bias / rescue pick a good direction. 'mean' = prompt-blind global average (legacy). 'nearest' = single best-matching prompt cluster — preserves one real good gen's detail instead of a washed-out average (less softening). Affects both apply and rescue. |
| velocity_refinement_key | STRING | default | Memory key used to capture/apply early velocity bias. |
| rescue_mode | BOOLEAN | false | Reactive in-flight rescue, rating-gated. Steers each eligible step toward trajectories you rated good and away from ones you rated Awful (matched to the current prompt). Learns automatically from ratings while on — no separate capture step needed. A no-op until you've rated a few gens for this prompt/key (a positive rating builds the target, an Awful builds what to avoid). |
| rescue_threshold | FLOAT | 0.150–1 | Fires when the step has diverged from the good trajectory by more than this (1 - cosine) OR aligned with a bad trajectory by more than this (cosine). Lower = corrects more eagerly. 0.10-0.20 typical; raise toward 0.4+ for only severe cases. |
| rescue_strength | FLOAT | 0.200–0.5 | How hard to pull toward good / push away from bad when triggered (magnitude preserved, no energy injected). Keep moderate; 0.5 is a strong correction. |
| sigmasopt | SIGMAS | — | |
| normalize_strengthopt | FLOAT | 0.000–1 | Video-only latent normalization (anti-overbake / oversaturation / colour drift) stacked on this RF loop. 0 = off. 0.5 = gentle. Audio is never touched (LTXAV/CONST path). ~zero overhead. |
| normalize_start_sigmaopt | FLOAT | 0.9000–1 | Sigma at/below which latent normalization activates and anchors its reference. Only used when normalize_strength > 0. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| sampler | SAMPLER | — |
| sigmas | SIGMAS | — |