Nodes/FreezeFrame/⏸️ PSampler (Advanced)
ComfyUI Node

⏸️ PSampler (Advanced)

The KSampler Advanced that lets you stop mid-denoise and take a breath

By c0dezer019·Created 7 months ago·Updated 6 months ago· 4
⏸️ PSampler (Advanced)
  • model
  • positive
  • negative
  • latent_image
  • LATENT
add_noise
noise_seed0
steps20
cfg8.0
sampler_name
scheduler
start_at_step0
end_at_step10000
return_with_leftover_noise

What it actually is

PSampler (Advanced) is the KSampler Advanced equivalent of the FreezeFrame pack's plain PSampler: same pausable trick, but with the advanced controls exposed. Where the standard node is a fire-and-forget swap-in, this one is for when you're already doing partial denoise, inpainting, or splitting a sampling job across two passes - and you want the option to hold the run mid-flight.

It comes from the same FreezeFrame pack by c0dezer019 (the r/comfyui "Pausable KSampler" dev), and it carries the identical pause/resume buttons and identical zero-dependency install.

Why you'd reach for it

The advanced controls exist for a specific family of workflows: start_at_step and end_at_step let you sample only a slice of the denoising trajectory. That's the refiner handoff pattern - run steps 0–10 on a base model, then hand the latent to a second sampler for steps 10–20. It's also how you do controlled img2img where you want to keep noise injection separate from the sampling pass (add_noise off means feed your latent in untouched).

Now layer pause on top: a long base-to-refiner two-stage render is exactly the multi-minute run where you might want to stop and check the midpoint - see what step 10 actually produced before the refiner commits to finishing it. And for anyone who's been burned by aborting a 15-minute job over a wobble in the preview, being able to hold it and think for a second is quietly powerful.

How it works

Mechanically it's the same single trick as PSampler: a callback runs after every step, and while a shared pause flag is set it just sleeps in 0.1s slices at a safe step boundary. GPU goes idle, process and latent stay resident. The buttons POST to a /comfy/pause_signal endpoint, and the node itself is a thin rebuild of ComfyUI's KSampler Advanced - same comfy.sample.sample call underneath, just with the callback inserted. Nothing about the sampling math is changed; you get identical results to the stock node, with a pause button bolted on.

The inputs that matter

Beyond the shared model, positive, negative, latent_image, steps, cfg, sampler_name, and scheduler, the advanced set is:

  • add_noise (enable/disable) - whether to inject fresh noise for this pass. Disable it for inpainting or when the latent already carries the noise you want.
  • noise_seed - the seed for that injected noise, replacing the plain seed input.
  • start_at_step / end_at_step (0–10000, defaults 0/10000) - the slice of the denoise trajectory to sample.
  • return_with_leftover_noise - whether to hand off a still-noisy latent (feed a refiner) or a fully denoised one.

Single LATENT output, straight into VAEDecode or into the next sampler in a chain.

Install

No dependencies, no model files, nothing to pip. Either:

# ComfyUI Manager → "Install Custom Nodes" → search "FreezeFrame"
# or:
cd ComfyUI/custom_nodes
git clone https://github.com/c0dezer019/FreezeFrame
# restart ComfyUI

Then it's under sampling/FreezeFrame as ⏸️ PSampler (Advanced). Note the README's manual-clone URL is a placeholder - use Manager or the real repo.

Gotchas

Same three caveats as the rest of the pack: settings changed while paused apply to the next job, not the running one; the pause lands between steps, never mid-kernel; and the state lives in RAM, so a restart or reboot while paused loses the run. The advanced controls themselves behave exactly like stock KSampler Advanced - the pause just gives you time to think between the phases.

Categorysampling/FreezeFrame

Inputs (13)

NameTypeDefaultDescription
modelMODEL
add_noiseCOMBO2 options: enable, disable
noise_seedINT00–18446744073709550000
stepsINT201–10000
cfgFLOAT8.00–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
positiveCONDITIONING
negativeCONDITIONING
latent_imageLATENT
start_at_stepINT00–10000
end_at_stepINT100000–10000
return_with_leftover_noiseCOMBO2 options: disable, enable

Outputs (1)

NameTypeDescription
LATENTLATENT