ComfyUI Node Runs on cloud

Fast KSampler

The same latent, without the preview tax

By WASasquatch·Created 4 years ago·Updated a day ago· 1,864
Fast KSampler
  • model
  • positive
  • negative
  • latent_image
  • LATENT
◄seed0►
◄steps20►
◄cfg8.0►
◄sampler_name▾►
◄scheduler▾►
◄denoise1.00►
◄preview_every1►

Fast KSampler does not change your image. That's the whole pitch, and it's the part worth trusting: it denoises the latent exactly the way core KSampler does, then makes the live preview cheap instead of nearly free-but-not-quite.

It exists because ComfyUI's preview tax is real and invisible. Every preview step decodes the latent to pixels, and core KSampler rebuilds the preview decoder at the start of each run - which on a TAESD preview means reloading a small model, and on a big SDXL or Flux latent means decoding a full-size latent just to show you a 512px thumbnail. Keep clicking render and you're paying for a picture nobody looks at between steps.

What it actually changes

Three things, all on the preview path:

  • The previewer is kept loaded between runs, keyed on the preview method, the model's decoder, the latent format and the device. Switch models and it frees; generate again and it's already there.
  • The preview is decoded at the size it's shown. For TAESD previews the node takes the first latent, area-interpolates it down so the decode lands no larger than the preview resolution, and decodes that. The thumbnail you see is identical in shape, and the decode is a fraction of the work.
  • preview_every skips steps. Decode every Nth step but always the last one, so you still get the finished frame.

The progress bar keeps updating every step either way, so you never lose the "is it hung?" signal during a long video run - you just lose some of the thumbnails.

The inputs, and which ones you touch

model, positive, negative, latent_image, seed, steps, cfg, sampler_name, scheduler, denoise - the KSampler set, same defaults, same ranges. It's a drop-in: delete your KSampler, drop this in, re-wire the same five wires, and the LATENT output goes wherever the old one went.

seed carries control_after_generate, which is the one widget in ComfyUI that reliably bites people. The control fires after the run, so the number sitting in the box is the seed for next time, not the one that just made the image you like. If you want to lock a good seed, do it before the run or set ComfyUI's "widget control mode" to Before once and be done - the plumbing doc has the whole story and it's worth the five minutes.

steps and cfg are the usual: 20-ish steps for SD 1.5 and SDXL, 4 to 8 for turbo and lightning checkpoints, CFG 7–8 for SDXL finetunes and 1 for distilled models. And denoise: 1.0 for txt2img, 0.5 for a half-img2img where you want to keep half the input structure.

The one new widget is preview_every, optional, default 1 (preview every step), range 1–100. Set it to 4 or 8 on a heavy render and watch the wall-clock difference on a batch. On a 100-step video run it's the difference between a usable machine and a slideshow.

Where this is the wrong tool

If you already run with previews off - --preview-method none - this node has nothing to save you; the sampling loop is ComfyUI's own comfy.sample.sample call, the same code core KSampler runs. On a latent2rgb-class preview method rather than TAESD you still get the cached previewer and the preview_every skip, but not the shrink-to-display-size decode, which only applies to the autoencoder-based previewers.

One thing that isn't a perf note but matters for sharing: this is a WAS Node Suite node, so anyone opening your workflow without the pack gets a missing-node box in place of your sampler. For a workflow handed to strangers, core KSampler is the safer hand-off. For your own machine, this is the one to reach for.

Installing it

ComfyUI Manager → search WAS Node Suite v3 → Install → restart. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git

Requires ComfyUI 0.14.0+ and Python 3.10+, and then nothing else: no pip step, no build, no weights. The v3 pack installs zero packages - its requirements.txt says so in as many words - and every node in it runs on ComfyUI's own torch and device. First start is a second or two slower while config.yaml, the state database and the folder set are written under <ComfyUI user dir>/was-node-suite/; updates recompile the bytecode once.

Old guides that mention install.bat, pip install -r requirements.txt or downgrading opencv are describing v2, which shipped about twenty packages and could fight other nodes over pins. None of that applies to v3, and running those steps now just risks breaking something else.

If something looks off

The node's preview is a plain JPEG thumbnail on ComfyUI's progress bar, so if your preview method is off, the bar still moves and there is no picture - that's ComfyUI, not this node. If previews stutter at preview_every: 1 on a big batch, raise it before blaming the sampler. And if the sampler name you want isn't in the sampler_name list, it's because it comes from another pack (RES4LYF's solvers, for instance) or is a custom SAMPLER for SamplerCustomAdvanced rather than a name the KSampler dropdown knows; this node offers exactly the list ComfyUI itself offers.

CategoryWAS Suite/Sampling

Inputs (11)

NameTypeDefaultDescription
modelMODELThe model used for denoising the input latent.
seedINT00–18446744073709550000The noise seed. The same seed with the same settings gives the same picture, `0` as good as any.
stepsINT201–10000Denoising steps. `20` is typical, `4` to `8` for turbo and lightning models.
cfgFLOAT8.00–100How strongly the prompt steers. `7` to `8` for SD and SDXL, `1` for distilled models.
sampler_nameCOMBOThe solver each step runs, such as `euler` or `dpmpp_2m`.
schedulerCOMBOHow the noise level falls from step to step, such as `normal` or `karras`.
positiveCONDITIONINGWhat the picture should contain.
negativeCONDITIONINGWhat the picture should avoid.
latent_imageLATENTThe latent to denoise.
denoiseFLOAT1.000–1`1.0` starts from pure noise; `0.5` keeps half of an input image's structure.
preview_everyoptINT11–100Decode the live preview on every this many steps, and always on the last. `1` previews every step.

Outputs (1)

NameTypeDescription
LATENTLATENTThe denoised latent.