Nodes/ComfyUI-SuperNodes/🐧 Sigma Ancestry
ComfyUI Node

🐧 Sigma Ancestry

How much of your original noise actually survives

By sonnyboxΒ·Created 11 months agoΒ·Updated a day agoΒ· 11
🐧 Sigma Ancestry
  • sigmas
  • target_eta
  • report
β—„target_ancestry70.0β–Ί
β—„model_typeflowβ–Ί

Ancestral samplers - Euler a, DPM++ SDE, the pack's own dual samplers - are supposed to inject fresh noise at every step. That's what makes them non-converging: they never fully settle, and adding steps changes the image instead of refining it. But here's the part nobody mentions: they don't replace the noise field. Each step carries some of the old field forward and only re-injects part of it fresh. How much of the starting noise survives the whole denoise is what this pack calls "ancestry," and this node is the inverse solver for it. You pick the percentage you want to keep; it hands you the exact eta that gets you there.

How it works

An ancestral step is an Euler solve down to sigma_down, then a renoise back up to sigma_next. The fraction of the old field that survives that one step is computable from the sigmas and eta, and multiplying it across every step gives the total ancestry. The node bisects eta against that product until the total matches your target. Two formula branches, one per model family: flow for rectified-flow / CONST models (Flux, SD3, Wan, MiniMax H3) uses the RF ancestral step; legacy for the older epsilon models on Karras schedules (SD1.5, SDXL) uses k-diffusion's classic ancestral step. Pick the wrong branch and the numbers come out meaningless, so don't skip that dropdown.

There's a real edge you'll hit on flow schedules: past a certain eta the Euler step extrapolates past x0, and the retention formula stops meaning what it says. The node computes a per-schedule ceiling and clamps anything it can't reach, flagging it with a * in the report. It refuses to pretend.

The inputs that matter

  • sigmas - feed it the same schedule the sampler gets, straight from the same scheduler node. This is a formula over the schedule, so a different schedule gives you an eta for a different problem.
  • target_ancestry - percent of the starting noise field to keep. Default 70.
  • model_type - flow vs legacy, as above.

Outputs are target_eta - a float you wire into any sampler's eta input (the pack's DualSampler nodes take it directly, and stock sampler-config nodes expose eta too) - and report, a markdown table in the node UI showing ancestry vs eta in even 5% steps with your target row bolded.

The report is the sleeper feature. The interesting eta range is crushed into the low end of the slider, so sweeping "in eta" spends most of your runs doing almost nothing. Sweeping in even ancestry steps is the same work, evenly spaced, and the table hands you the mapping for free.

Why you'd reach for it

Mostly to stop guessing. "eta 1" tells you nothing; "keep 30% of the original noise" is a number with actual meaning, and it ports across schedules. Want a converging, reproducible result? Target 0% - the node returns eta 0, which is plain deterministic Euler. Want maximum creative variance? Push toward 100. Everything in between is a slider over a quantity you understand instead of a knob over a formula.

Install and gotchas

Same pack, same story as every SuperNodes node: ComfyUI Manager β†’ search "ComfyUI-SuperNodes", or cd ComfyUI/custom_nodes && git clone https://github.com/sonnybox/ComfyUI-SuperNodes, then restart. Only matplotlib as a dependency, no models to download.

One trap beyond the obvious: the node needs at least two sigmas (one real step) and raises if every sigma is zero, so don't feed it an empty or single-entry schedule. And remember the contract - whatever eta you compute is only as right as the schedule you fed it. Change the scheduler widget downstream and you've silently changed the answer. That's why wiring the same BasicScheduler output into both this node and your sampler is a rule, not a convenience.

CategorySuperNodes/Scheduling

Inputs (3)

NameTypeDefaultDescription
sigmasSIGMASThe same schedule the sampler gets.
target_ancestryFLOAT70.00–100Percent of the starting noise field to keep.
model_typeCOMBOflowflow for rectified-flow / CONST models (Flux, SD3, Wan, MiniMax H3). legacy for the older epsilon models on Karras schedules (SD1.5, SDXL).

Outputs (2)

NameTypeDescription
target_etaFLOATWire this into a sampler's eta to hold the schedule at target_ancestry.
reportSTRINGβ€”