Nodes/koo-nodes-pack/KoO Sigma Schedule Designer
ComfyUI Node

KoO Sigma Schedule Designer

Your Sampler's Schedule Is a Curve. This Node Lets You Bend It.

By kooailab·Created 15 days ago·Updated 4 days ago· 0
KoO Sigma Schedule Designer
  • reference_sigmas
  • sigmas
  • sigma_info
◄modeAUTO►
◄profileBalanced Generation►
◄structure_creativity55►
◄shapes_materials52►
◄microdetail50►
◄final_cleanup48►
◄curve_strength70►
◄reference_blend30►
◄smoothness35►
◄steps30►
◄max_sigma14.60►
◄interpolation_typeSmoothstep►
◄high_to_mid_boundary0.66►
◄mid_to_low_boundary0.22►
◄tail_length0.055►
◄curve_gamma1.00►
◄tail_exponent1.00►
◄txt2img_settings{}►
◄img2img_settings{}►
◄auto_settings{}►
◄manual_curve_points[{"id":"start","x":0,"sigma":14.6},{"id":"end","x":1,"sigma":0}]►
◄normalized_manual_points►
◄lock_monotonic_curvetrue►
◄prevent_duplicate_sigmastrue►
◄normalize_endpointstrue►
◄clamp_to_input_rangetrue►
◄preserve_final_zerotrue►
◄allow_sigma_expansionfalse►
◄include_appearance_in_presetfalse►
◄denoise_active_range1.00►
◄input_already_croppedAuto►
◄output_steps_override_enabledfalse►
◄output_steps_override0►
◄denoise1.00►
◄external_strength1.00►
◄external_reference_blend-1►
◄sigma_range_modeFULL RANGE►
◄range_sourceAUTO / INPUT►
◄custom_max_sigma14.60►
◄handoff_sigma1.600►
◄ui_complexityBASIC►
◄show_sigma_labelstrue►
◄show_step_numberstrue►
◄show_reference_curvetrue►
◄show_generated_curvetrue►
◄show_final_curvetrue►
◄point_table_openfalse►
◄workflow_schema_version2►

Pick "normal" or "karras" from the scheduler dropdown and you're picking one of a handful of curves somebody else wrote. Those curves decide where your steps go - how much of the denoising budget gets spent inventing composition versus defining materials versus polishing texture. Same 30 steps, same seed, different spacing, visibly different image.

KoOSigmaEqualizer - it shows up in the menu as KoO Sigma Schedule Designer - hands you that curve as an editable object. Sigmas in, sigmas out, with four bands of the schedule you can re-weight without touching your step count. It's the difference between "use karras" and "spend three more evaluations on microdetail and two fewer on large forms."

Where it fits

In a stock SDXL graph you never see a sigma tensor; the sampler makes one from the dropdown. Move to SamplerCustomAdvanced and sigmas become a real wire - the wire this node feeds.

The interesting case is a two-stage handoff: a first sampler ends around sigma 1.6, where composition and big forms are settled, and a second one takes the low end and does detail work. The Designer has a mode for each role and a numeric handoff_sigma to bind them together.

One honest caveat. Reshaping is a big win on SD1.5/SDXL-class noise schedules and a weak tool on rectified-flow models, which are already trained on a straight trajectory; the better sampler sweeps keep landing on the same conclusion. Nudge the curve, don't reflavor it.

How it works

The order of operations explains most of its behavior.

  1. Source. If usable SIGMAS are wired, it uses them (range_source defaults to AUTO / INPUT). Otherwise it fabricates a reference from steps and max_sigma.
  2. Range. sigma_range_mode picks FULL RANGE, HIGH SIGMA (stops at the handoff) or LOW SIGMA (starts there). IMG2IMG REFINE mode crops by denoise_active_range on top of that.
  3. Shape. The profile is stored as normalized (progress, remaining sigma) anchors, so one shape scales to a 14.6 full schedule or a 1.6 refinement tail. The band sliders move where those anchors sit; curve_strength decides how far the target departs from the reference.
  4. Smooth and validate. smoothness flattens kinks, then the toggles fire: monotonic lock, duplicate repair, endpoint pinning, clamping to the input range.
  5. Blend back. reference_blend pulls the result toward the original schedule, then it validates again.

The inputs you'll actually touch

mode first: AUTO works out from the incoming schedule whether you're a first or second sampler, and FIRST SAMPLER / SECOND SAMPLER / IMG2IMG REFINE / CUSTOM override it. Older workflows using Auto, TXT2IMG or Manual still load - legacy names get migrated.

profile is the vocabulary: 15 current presets (Balanced Generation, Photoreal Base, Detail Refiner, Microdetail, Turbo Tail, Identity Refine…), the legacy names they replaced, and a Custom slot. Choosing one writes its band values into the sliders; from there you fiddle.

Then curve_strength and reference_blend, the two knobs most people should be turning. High strength with low blend is a big departure from what the model expects. High blend with moderate strength is a gentle re-weight that rarely breaks anything.

steps and max_sigma are pure fallbacks - AUTO / INPUT ignores them whenever incoming sigmas are usable, so don't tune them while wired up. Everything else lives behind ui_complexity; leave it on BASIC until you have a reason.

The outputs

sigmas goes into SamplerCustomAdvanced (with a KSamplerSelect for the algorithm), or into SplitSigmas if you're building a handoff. A plain KSampler won't take it; that node makes its own schedule.

sigma_info is a long STRING of diagnostics: source used, whether it fell back, first and last values in and out, tensor length, finite/monotonic flags, every repair applied. Wire it into any string consumer. It answers "why did nothing change" in one line, because it literally reports input_equals_output.

Install

Manager, searching koo-nodes-pack (publisher KoO.Ai; registry availability depends on moderation approval). Otherwise:

cd ComfyUI/custom_nodes
git clone https://github.com/kevintronchin-blip/koo-nodes-pack

Restart and hard-refresh. requirements.txt only declares torch, numpy, Pillow and aiohttp, all shipped with ComfyUI. No downloads; the pack never pip-installs at runtime.

Where people get stuck

The curve editor ignores your clicks. Manual point editing unlocks only in CUSTOM mode with ui_complexity on PRO. The status line says so; clicking on a preset profile does nothing until you switch.

Your input was ignored. If incoming sigmas aren't strictly decreasing - a cropped tail, a split range fed back in - the node treats them as unusable and falls back to steps/max_sigma. sigma_info says exactly that.

Nodes 2.0. The Designer draws its own curve canvas, and the README is upfront that node-level canvas drawing and mouse hooks need the Legacy/LiteGraph renderer. On Nodes 2.0 you get a node with no editor.

CategoryKoO Tools / Sampling

Inputs (49)

NameTypeDefaultDescription
modeCOMBOAUTOSampling use case. Legacy mode values are accepted and migrated.
profileCOMBOBalanced GenerationA scale-independent sigma distribution preset.
structure_creativityFLOAT550–100Allocates more schedule influence to high sigma structure and large-form creation.
shapes_materialsFLOAT520–100Allocates more schedule influence to mid-sigma shape and material definition.
microdetailFLOAT500–100Allocates more evaluations to low-sigma texture and microdetail.
final_cleanupFLOAT480–100Allocates more evaluations to the final cleanup tail.
curve_strengthFLOAT700–100How strongly the selected preset reshapes the reference schedule.
reference_blendFLOAT300–100How strongly the final schedule stays near the original input/reference sigma schedule.
smoothnessFLOAT350–100Reduces abrupt changes between adjacent sigma intervals.
stepsINT301–10000Fallback transition count when no usable SIGMAS input is available.
max_sigmaFLOAT14.600.000001–1000Fallback/model maximum. AUTO / INPUT ignores this whenever incoming SIGMAS are usable.
interpolation_typeCOMBOSmoothstepInterpolation used between manual or preset curve anchors.
high_to_mid_boundaryFLOAT0.660.05–0.95Normalized boundary between high-sigma structure and mid-sigma work.
mid_to_low_boundaryFLOAT0.220.01–0.9Normalized boundary between mid-sigma material work and low-sigma detail.
tail_lengthFLOAT0.0550.001–0.4Normalized size of the final cleanup band.
curve_gammaFLOAT1.000.1–5Global exponent applied to the generated normalized curve.
tail_exponentFLOAT1.000.1–5Additional exponent applied inside the low-sigma cleanup tail.
txt2img_settingsSTRING{}—
img2img_settingsSTRING{}—
auto_settingsSTRING{}—
manual_curve_pointsSTRING[{"id":"start","x":0,"sigma":14.6},{"id":"end","x":1,"sigma":0}]Serialized manual curve. Legacy normalized x/y points remain supported.
normalized_manual_pointsSTRING—
lock_monotonic_curveBOOLEANtruePrevents sigma increases as sampling progresses.
prevent_duplicate_sigmasBOOLEANtrueRepairs consecutive equal sigma values using an adaptive epsilon.
normalize_endpointsBOOLEANtruePins output start/end to the selected input range endpoints.
clamp_to_input_rangeBOOLEANtrueKeeps all generated values inside the selected incoming sigma range.
preserve_final_zeroBOOLEANtruePreserves zero only for ranges that own a zero endpoint; HIGH SIGMA handoffs remain non-zero.
allow_sigma_expansionBOOLEANfalseAllows generated values up to the available source maximum. AUTO / INPUT never expands a cropped start to fallback max.
include_appearance_in_presetBOOLEANfalse—
denoise_active_rangeFLOAT1.000–1Fraction of the selected range used by IMG2IMG REFINE. Already-cropped inputs are not cropped twice in Auto mode.
input_already_croppedCOMBOAutoOverride numeric cropped-input detection only when necessary.
output_steps_override_enabledBOOLEANfalseResample the active range to an explicit transition count.
output_steps_overrideINT00–10000—
reference_sigmasoptSIGMAS—
denoiseoptFLOAT1.000–1—
external_strengthoptFLOAT1.000–2—
external_reference_blendoptFLOAT-1-1–100—
sigma_range_modeoptCOMBOFULL RANGEFULL uses the available range; HIGH ends at handoff; LOW begins at handoff/available cropped start.
range_sourceoptCOMBOAUTO / INPUTAUTO / INPUT trusts incoming SIGMAS. Model/custom sources are explicit opt-ins.
custom_max_sigmaoptFLOAT14.600.000001–1000Maximum used only when Range Source is CUSTOM MAX SIGMA.
handoff_sigmaoptFLOAT1.6000–1000Numeric FIRST-to-SECOND sampler boundary.
ui_complexityoptCOMBOBASIC2 options: BASIC, PRO
show_sigma_labelsoptBOOLEANtrue—
show_step_numbersoptBOOLEANtrue—
show_reference_curveoptBOOLEANtrue—
show_generated_curveoptBOOLEANtrue—
show_final_curveoptBOOLEANtrue—
point_table_openoptBOOLEANfalse—
workflow_schema_versionoptINT21–2—

Outputs (2)

NameTypeDescription
sigmasSIGMAS—
sigma_infoSTRING—