Zipf Scheduler Node
A noise schedule that spends most steps on detail
- model
- SIGMAS
Every KSampler you've ever used is quietly running a noise schedule - the list of sigma values that decides how much noise gets peeled off at each step. Karras concentrates work in the middle. Exponential front-loads it. The Zipf Scheduler Node is a different bet entirely: it takes the Zipf distribution - the same rank-based power law behind word frequencies in language - and turns it into a sigma schedule that crashes down toward low sigmas after only a few steps, then spends the rest of the run adding detail. The pack author calls it "designed for a flat look." That's the pitch: composition locked in fast, most of your steps doing fine-detail work.
It comes from the lopi999-nodes suite, a grab-bag of utility nodes by LaVie024 that also includes a Zeta scheduler, some random latent-size pickers, and four "extsig" Euler samplers. Zipf and Zeta are the pair of custom schedulers; this page is about the Zipf one.
How it actually works
A Zipf distribution gives each rank r a weight of 1 / r^x. Rank 1 (the most common "word") dominates; rank 2 gets half as much, rank 3 a third, and so on. This node assigns each sampling step a rank, weights them that way, then normalizes the cumulative weights and inverts them (1 − cdf) into a curve from sigma_max down to sigma_min.
The trick is that the exponent x isn't fixed - it drifts linearly from x_start down to x_end across the run. Because the early ranks swallow almost all the probability mass, the inverted cumulative curve plunges almost immediately. Most of your steps land at low sigmas, which is exactly where detail gets painted in. The source is about 20 lines of pure torch, no dependencies, and the code sets the final sigma to sigma_min so the run terminates cleanly.
The inputs that matter
- model - feeds the sigma bounds; the node reads
sigma_min/sigma_maxstraight from your checkpoint's sampling config, so it adapts to SD1.5, SDXL, whatever you loaded. - steps (default 20) - how many sigmas to emit.
- denoise (default 1.0) - here's the img2img-friendly bit: below 1.0 it computes a longer full schedule (
steps / denoise) and slices off the tail, so a 50% denoise gives you the last half of a full 20-step run rather than a half-schedule. Same convention as the built-in KSampler. - x_start / x_end (optional, range 1.0–5.0, defaults 3.2 → 2.75) - the Zipf exponent drift. Higher exponents concentrate more mass on the first steps, meaning an even more aggressive early drop. Lower values flatten the curve toward something more linear.
- automatic (default true) - a required input that the current source accepts but never actually reads. It looks like a leftover "auto-tune x" switch that never got wired up. Leave it on; nothing changes if you flip it.
The single output is SIGMAS, which you don't feed back into a normal KSampler. It plugs into a custom-sampling node like SamplerCustom in place of its sigmas input.
How to install
This is a plain custom node with zero extra requirements - no requirements.txt, nothing to pip install, just torch math that ships with ComfyUI. Two options:
- ComfyUI Manager: search "comfyui-lopi999-nodes" and hit install, then restart.
- Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/LaVie024/comfyui-lopi999-nodes
Restart ComfyUI and it appears under lopi999 → Schedulers. No model files to download, installs in seconds.
Gotchas worth knowing
The pack registers its schedulers globally on import. So you don't even need this node: zipf_linear shows up in every KSampler's scheduler dropdown the moment the pack is installed (along with a zeta scheduler and the four euler_extsig samplers). The node's value over the dropdown is the tuning - x_start, x_end, and the proper denoise tail handling that a dropdown can't expose.
Bigger caveat, and this one applies to any aggressive scheduler: Zipf Linear's whole premise is dumping steps into low sigmas, which suits the curved DDPM-style trajectories of SD1.5 and SDXL. On flow-matching models like Flux or Z-Image, whose trajectories are nearly straight lines by construction, that kind of aggressive redistribution usually hurts - those models want balanced sigma schedules. So: try it on SDXL, be suspicious of it on Flux.
And the honest warning: this is a niche schedule. It's not going to dethrone Karras for most people - reach for it when you want the "flat" detail-heavy look, or when you're hunting for a different texture than the usual suspects.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| steps | INT | 201–10000 | — |
| denoise | FLOAT | 1.000–1 | — |
| automatic | BOOLEAN | true | — |
| x_startopt | FLOAT | 3.201–5 | — |
| x_endopt | FLOAT | 2.751–5 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |