⏸️ PSampler (Advanced)
The KSampler Advanced that lets you stop mid-denoise and take a breath
- model
- positive
- negative
- latent_image
- LATENT
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 plainseedinput.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.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| add_noise | COMBO | 2 options: enable, disable | |
| noise_seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 8.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| start_at_step | INT | 00–10000 | — |
| end_at_step | INT | 100000–10000 | — |
| return_with_leftover_noise | COMBO | 2 options: disable, enable |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |