Nodes/ComfyUI-gowiththeflow/KSamplerNoiseless
ComfyUI Node

KSamplerNoiseless

The KSampler That Never Adds Noise (and the toggle that lies about it)

By oxysoft·Created 2 years ago·Updated about a year ago· 3
KSamplerNoiseless
  • model
  • positive
  • negative
  • latent_image
  • LATENT
disable_noisetrue
seed0
steps20
cfg8.0
sampler_name
scheduler
denoise1.00

What this is

The disable_noise toggle on this node lies. Flip it to False and nothing changes - this KSampler never adds fresh noise to the latent you hand it, ever. And that's not a bug, it's the whole job.

KSamplerNoiseless is a clone of ComfyUI's stock KSampler with one guarantee: no random noise gets injected at the start of sampling. It's the boring half of a two-node pack. The interesting half is the pack's other node, NoiseWarperNode, which implements GoWithTheFlow - the research trick from Netflix's Eyeline-Research lab that bakes motion from a reference video into a latent noise tensor by warping the noise along an optical flow field. Feed that persistent, flow-warped noise to KSamplerNoiseless and you denoise it directly, so the temporal structure survives instead of being scrambled by fresh noise on every frame. That's the "loopback" in the pack title: warp noise, denoise without adding more, repeat.

Why not just use stock KSampler with disable_noise set to true? Because you'd have to remember to set it. This node makes the noiseless behavior impossible to forget - and pairs cleanly with the warper in the same repo.

How it works

Inputs are a mirror of stock KSampler: model, positive / negative conditioning, steps, cfg, sampler_name, scheduler, seed, latent_image, denoise, and that decorative disable_noise. One output, LATENT, "the denoised latent" - wire it to a VAE Decode like you would any sampler.

The difference lives in the pack's shared sampling helper. Peek at its call to comfy.sample.sample() and you'll see disable_noise=True hardcoded - the input you're shown is never actually consulted. The latent_image you feed in becomes the starting point as-is (it even passes fix_empty_latent_channels first, so a bare one-channel empty latent gets expanded to the model's real channel count instead of crashing, and a noise_mask on your latent is honored).

Two practical consequences fall out:

  • seed does nothing meaningful. With no noise being generated, there's nothing to seed. Variation comes from the latent you feed in, not the sampler.
  • denoise is the control that matters. Keep it at 1.0 when your input is full-strength warped noise. Drop toward 0.5 and you preserve the coarse structure of the starting latent while letting the prompt reshape details - handy when the warped noise comes out too aggressive.

The workflow it's built for

The intended graph is short:

NoiseWarperNode (LATENT) → KSamplerNoiseless.latent_image
KSamplerNoiseless (LATENT) → VAE Decode → image

The warper keeps a persistent noise state per node instance and re-warps it against the current flow image every time the workflow runs, so successive generations share one coherent noise skeleton instead of rolling fresh dice each pass. Stock KSampler would quietly add its own noise on top and break that illusion - which is exactly why a noiseless sampler has to exist.

Installing it

ComfyUI Manager, search "gowiththeflow" (the pack shows up as ComfyUI-gowiththeflow-loopback), hit Install, restart. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/oxysoft/ComfyUI-gowiththeflow

then restart ComfyUI. Manager handles dependencies; manual installs need torch, numpy, einops, tqdm, opencv-python, and rp.

That last one is the gotcha. rp is Ryan Burgert's CommonSource research toolkit - a heavy, opinionated dependency that drags in a lot. If the pack fails to import, this is almost always why; it can lag behind new Python versions. No model downloads are required for the nodes themselves - the RAFT optical-flow model in the source is only used by the offline video-processing pipeline, not by anything the ComfyUI nodes call.

Where people get burned

  • Feeding it an EmptyLatentImage. No initial noise and nothing to denoise means mush. This node expects a real noise latent - NoiseWarperNode's output, or any prepared noise tensor.
  • Expecting normal KSampler behavior. It's not a general-purpose sampler; for plain text-to-image, use the stock node.
  • Trusting the toggle. disable_noise reads and does nothing. Learn to love it.

One honest note: the GoWithTheFlow scene's real workhorse in ComfyUI is kijai's ComfyUI-VideoNoiseWarp, which is what most people mean when they talk about noise warping. This oxysoft pack is a leaner take that pairs its own warper with a dedicated noiseless sampler - a tidy one-install loopback setup, just not the famous one.

Categorysampling

Inputs (11)

NameTypeDefaultDescription
modelMODELThe model used for denoising the input latent.
disable_noiseBOOLEANtrueIf True, the noise will not be added to the latent image.
seedINT00–18446744073709550000The random seed used for creating the noise.
stepsINT201–10000The number of steps used in the denoising process.
cfgFLOAT8.00–100The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality.
sampler_nameCOMBOThe algorithm used when sampling, this can affect the quality, speed, and style of the generated output.
schedulerCOMBOThe scheduler controls how noise is gradually removed to form the image.
positiveCONDITIONINGThe conditioning describing the attributes you want to include in the image.
negativeCONDITIONINGThe conditioning describing the attributes you want to exclude from the image.
latent_imageLATENTThe latent image to denoise.
denoiseFLOAT1.000–1The amount of denoising applied, lower values will maintain the structure of the initial image allowing for image to image sampling.

Outputs (1)

NameTypeDescription
LATENTLATENTThe denoised latent.