FSampler
Richardson extrapolation to skip steps without wrecking the image
- model
- positive
- negative
- latent_image
- LATENT
Here's the honest version of what FSampler does: it patches your model so that during sampling it skips some denoising steps and mathematically predicts what they would have produced, using the history of previous steps. The math is finite-difference extrapolation - the "F" in the name - and the pitch is that you get most of the quality of a full-step run at a fraction of the time. In an era where the community keeps asking how to squeeze renders down, this is that impulse turned into a node.
It's a MODEL node, not a sampler: it takes your diffusion model and returns a patched model, which you then feed to a normal KSampler. If it reminds you of the "skip step" tricks floating around image and video workflows, you've got the right mental model.
How it works
The node attaches an extrapolation hook to the model. As the sampler runs, it maintains a history buffer of the last few model outputs; when a step is marked to skip, instead of running the denoiser it extrapolates the next state from that history. Two things control the quality:
extrapolation_mode-linearkeeps 2 steps of history (fast, good for standard schedules);quadratickeeps 3 (smoother, better on non-linear schedules). Linear is the recommended default.skip_strategy-conservativeruns N-1 steps and skips 1;aggressiveruns 1 and skips N-1. The tooltips are blunt: conservative for images at 15–50 steps, aggressive for audio/video where you have 1000+ steps and each one is expensive. This is the single most important choice you make.
The inputs that matter
Beyond those two, you get skip_interval (2–100) and the two safety rails:
skip_interval- in conservative mode, 3 means "run 2, skip 1"; in aggressive mode, 5 means "run 1, skip 4." High intervals on low step counts cause artifacts - that's the warning on the input, and it's real.start_percentage(default 0.1) - wait until this % of generation is done before skipping. The first 10% sets the composition; skipping there burns you.end_percentage(default 0.9) - stop skipping after this %. The tail renders fine detail, and you want real steps there, not guesses.
So the defaults already protect both ends of the trajectory. The node's whole design philosophy is "skip the boring middle, compute the edges."
The gotcha
This is a speed heuristic, not a free lunch. The safe operating envelope is exactly what the tooltips describe: conservative + interval 2 + 15–50 image steps, or aggressive on very long audio/video runs where one skipped step is a rounding error in the total. Crank skip_interval on a 10-step turbo render and you'll get exactly the artifacts it warns about. Use it to shave time off a long render you've already validated, not to discover whether your seed is good - the savings aren't worth the interpretation headache at draft stage.
Installing
FSampler is part of MD Nodes:
cd path/to/ComfyUI/custom_nodes
git clone https://github.com/MDMAchine/ComfyUI_MD_Nodes.git
cd ComfyUI_MD_Nodes && pip install -r requirements.txt
Or via ComfyUI Manager (search MD Nodes), then restart. The pack's requirements are heavy - audio libraries, matplotlib, pynvml, Ollama clients - so even a pure-optimization user pays the full install tax.
Bottom line: it's a legitimately clever idea (Richardson extrapolation is real numerical-analysis machinery) wrapped in a conservative/default-safety package. Reach for it on long renders you're tired of waiting on; respect the step-count guidance; and don't expect magic on low-step workflows.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 251–150 | — |
| cfg | FLOAT | 1.000–100 | — |
| scheduler | COMBO | simple | 19 options: simple, normal, sgm_uniform, ddim_uniform, beta, linear_quadratic, +13 |
| sampler | COMBO | euler | 11 options: euler, res_2m, res_2s, ddim, dpmpp_2m, dpmpp_2s, +5 |
| skip_mode | COMBO | none | 11 options: none, h2/s2, h2/s3, h2/s4, h2/s5, h3/s3, +5 |
| add_noise | FLOAT | 0.000–1 | Ancestral noise ratio (eta). 0.0 = ODE (no noise), >0 enables ancestral noise with dynamic sigma_up each step. Noise type is fixed to gaussian in this simple node. |
| denoise | FLOAT | 1.000–1 | Denoise fraction (KSampler-style). 1.0 = full schedule; <1.0 samples the last portion of the schedule only. |
| verbose | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |