⏸️ PSampler
Hit pause on a mid-air render without throwing the whole run away
- model
- positive
- negative
- latent_image
- LATENT
What it actually is
PSampler is a drop-in replacement for the standard KSampler with two extra buttons glued to it: ⏸️ PAUSE and ▶️ RESUME. Same inputs, same LATENT output, same sampler/scheduler dropdowns - you connect it exactly like a normal KSampler and the "P" just stands for pausable. Hit pause mid-generation and the sampler stops between steps, holds everything in memory, and waits. Hit resume and it picks up precisely where it left off. That's the whole product, and honestly that's enough.
It ships in the FreezeFrame pack by c0dezer019 - the same solo dev who announced a pausable KSampler to r/comfyui in early 2026 and got a genuinely warm reception for it. He built it because his own generations run minutes-long and he wanted a way to stop one without losing it.
Why you'd reach for it
You don't need this if your renders finish in twenty seconds. You very much want it if your renders take minutes - older GPUs, CPU-mode runs, or SDXL/Flux on a card that shouldn't be running them. The pitch is threefold:
- Thermals. Long gens that push a card to 90°C. Let it cool, resume, let it cool again.
- Sneaking a peek. Pause at step 12, look at the preview, and decide whether this run is worth finishing or whether you'd rather abort and re-roll the seed.
- Long queues. The built-in cancel button is all-or-nothing: you lose the run. This is a hold, not an abort.
If you're on a fast card and never sweat, this pack is a solution to a problem you don't have - skip it. If you've watched a 10-minute gen die to a single wrong seed, keep reading.
How it works
The mechanism is a callback, not a rewritten sampler - which is why it's stable. After each denoising step, ComfyUI calls a callback with the current step. The callback forwards to the preview system, then checks a shared PAUSE_STATE flag. If it says "paused", it just sleeps in 0.1-second slices until the flag flips back. Your GPU goes quiet, but the process, the model, and the latent stay resident in RAM.
The buttons on the node POST to a tiny /comfy/pause_signal endpoint that flips that flag. Pausing happens at a safe boundary between steps - you never interrupt a CUDA kernel mid-flight, so there's nothing to corrupt.
The inputs that matter
All the familiar KSampler plumbing: model, positive, negative, latent_image, seed, steps, cfg (default 8.0), sampler_name, scheduler, and denoise (default 1.0) for partial img2img. Nothing new to learn - that's the point. The one output is a LATENT, which wires straight into VAEDecode and then into your image-save stack.
Install
The good news: this pack has zero Python dependencies - no requirements.txt, no model downloads, nothing extra to fight with. Two ways in:
# ComfyUI Manager → "Install Custom Nodes" → search "FreezeFrame" (also listed as "Pausable Sampler")
# or clone it yourself:
cd ComfyUI/custom_nodes
git clone https://github.com/c0dezer019/FreezeFrame
# restart ComfyUI
Then find ⏸️ PSampler under sampling/FreezeFrame and swap it in where your KSampler used to be. (One quirk: the README's sample clone URL is a placeholder, so trust Manager or the real repo above.)
Gotchas
The big one is in the README's own warning: changes you make while paused don't touch the current run. Bump CFG during a pause and the run finishes with the old value; your edit applies to the next queued job. It's a freeze-frame, not a live-tweak session.
Also worth knowing: the pause state is global to the ComfyUI server, which is fine - only one node can be sampling at a time anyway. And it's memory-resident: restart ComfyUI or reboot while paused and the run is gone. It can't save its math state to disk and resume later - the author's said that's the one thing he'd love to add but the samplers don't expose the data for it. So: use it as a pause, not a checkpoint. And like any custom node, it executes real Python on your machine, so grab it from Manager or the official repo rather than a random fork.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| 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 | — | |
| denoise | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |