Sigmas Slice (Start/End)
KSampler Advanced's Step Range, Pulled Out as Its Own Node
- sigmas
- SIGMAS
KSampler Advanced has two fields - start_at_step and end_at_step - that let a sampler work on only part of the denoising schedule. Sigmas Slice gives you that same control as a standalone node: you feed it a SIGMAS tensor, slice it to the step range you want, and get a shorter SIGMAS back. If you've ever wanted the "second pass continues where the first left off" behavior without dragging around a full Advanced sampler, this is the cleaner way to build it.
Here's the mental model, grounded in how sigmas actually work: a SIGMAS tensor is the noise schedule - a descending list of noise levels the sampler walks down as it denoises. Slicing that list is how you split one full denoising trajectory into staged chunks. Run a first pass through steps 0–10, slice the same sigmas to start_at_step=10, and a second sampler fed the sliced sigmas continues from exactly where the first stopped - the basis of the old base-model-then-refiner and two-stage handoff workflows.
The inputs
sigmas- the SIGMAS tensor to slice, straight off a scheduler (BasicScheduler, or thesigmasoutput of KSampler Advanced).start_at_step- 0-indexed start. Default 0.end_at_step- 0-indexed end. Default 10000 (effectively "all of it").return_with_leftover_noise- the important one. If True (default), the last sigma in the sliced range keeps its noise value, so the next stage has noise to denoise from. If False, the last sigma is forced to0.0, meaning the sliced range ends fully denoised - a full denoise at the cut. That's the same semantic as the "return with leftover noise" toggle on KSampler Advanced, and it's the difference between "hand off to another sampler" and "finish this pass completely."
The one output, SIGMAS, is the sliced tensor - wire it into a KSampler's sigmas input (via convert-to-input if needed).
The fine print from the source
Two boundary behaviors are worth knowing. If end_at_step is past the end of the tensor, it's left alone (no clamping that matters); if start_at_step is beyond the last index, you get just the final sigma rather than an empty tensor - a deliberate "keep a single step" safety. And because return_with_leftover_noise=False mutates the last sigma to zero, that choice is baked into the output tensor, which can surprise you if you expected the original schedule unchanged. When in doubt, keep it True and let the next sampler own its noise - that's the behavior most staged-workflow people actually want.
It's a niche tool - you only need it once you're doing multi-pass or handoff sampling - but it's a clean, honest slice with no hidden state, and it demystifies the start/end fields by making them a visible, reusable operation.
Install
Part of comfyui-sg-nodes by sebagallo. ComfyUI Manager → search comfyui-sg-nodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/sebagallo/comfyui-sg-nodes
Restart ComfyUI; it's under SGNodes/Sigmas. No model downloads, no extra dependencies.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| sigmas | SIGMAS | The SIGMAS tensor to slice. | |
| start_at_step | INT | 00–10000 | 0-indexed start position. |
| end_at_step | INT | 100000–10000 | 0-indexed end position. |
| return_with_leftover_noise | BOOLEAN | true | If False, the last sigma in the sliced range is set to 0.0, forcing a full denoise. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |