Nodes/H3 Motion Context/H3 Sigmas Tail (experimental)
ComfyUI Node

H3 Sigmas Tail (experimental)

One knob that takes the extra crispness out of a chained clip

By NikoDemon80·Created 2 months ago·Updated a day ago· 1,275
H3 Sigmas Tail (experimental)
  • sigmas
  • sigmas
◄tail_steps3►
◄strength0.50►

Every chained MiniMax H3 clip comes out a few percent crisper than the frames it was pinned from. On a face that reads as aging: the joins don't get worse, the detail just accumulates. H3 Sigmas Tail is the least certain of the pack's three experimental drift nodes, and the only one that works purely on the noise schedule - no measurement, no guards, just arithmetic.

Why the last few steps are the problem

H3's FastH3 schedule makes one large final move: from about 0.63 straight to zero. That single step settles nearly all of the fine detail, which is why its character gets baked in so hard. Start it from a slightly noisier point and it carries a little less grain.

That's the whole idea. It reshapes the tail of the schedule and nothing else.

What it actually does

Only the last tail_steps levels before the final zero get touched. The first level, everything above the tail, and the zero itself stay exactly where they were. Within the tail, each level is moved as a fraction of the level just before the tail - the anchor - like this:

new = anchor * (old / anchor) ** (1 / (1 + strength))

Positive strength lifts the tail back toward the anchor, so the schedule spends less time down at the lowest noise and the last step to zero gets bigger. Negative strength pushes the other way, spending more time at low noise. Monotonic order is preserved either way (the code nudges a level down by 0.1% if a flat stretch would otherwise break the descent), and strength 0 returns the schedule byte-identically untouched.

That's the one genuine, free off switch in the pack.

The settings

Two, plus the wire. sigmas comes from BasicScheduler. tail_steps defaults to 3 - how many of the lowest levels before zero get reshaped. strength defaults to 0.5, range -0.9 to 3.0.

The tested configuration is literally the defaults: tail 3, strength 0.5. On the author's six-clip chains that stopped the per-join sharpening on locked-off shots with a calm background and kept faces from aging. A busy, high-contrast background still crisped up slowly. That's the honest scope of the evidence - one scene class, one setup.

The output sigmas goes into SamplerCustomAdvanced's sigmas input, obviously. What's less obvious is placement relative to a refine pass: put this node after BasicScheduler and before the Split Sigmas that feeds your refine sampler, so the second pass gets the plain schedule rather than the reshaped one. The pack's own recommended graph is:

BasicScheduler -> H3 Sigmas Tail (optional) -> main sampler, sigmas
                  BasicScheduler -> Split Sigmas -> refine sampler (one step)

How to actually evaluate it

Here's the annoying bit, and why I'd rank this below the other two: there's no measurement. Join Match logs whether it read your shot as locked-off or moving, and prints what it corrected. Refine Blend logs how many steps it held and ramped. This one logs the tail levels before and after - useful, but there's no "did it help." The only feedback loop is watching faces over five or six clips, which is hours per setting.

The console line is worth reading on the first run, because it's the only confirmation the node did anything at all:

h3_motion_context: sigmas tail: reshaped the last 3 levels before zero at strength 0.50: ... -> ...

If that line doesn't appear, check your strength - 0 is a no-op - and check the schedule is long enough. A schedule with too few levels above zero gets a warning and passes straight through.

Install

ComfyUI Manager, search "H3 Motion Context", or:

cd ComfyUI/custom_nodes
git clone https://github.com/NikoDemon80/ComfyUI-H3-Motion-Context

Restart, and you need ComfyUI 0.34.0 or newer (the pack depends on H3's arbitrary keyframe anchors; 0.3.1 is the fallback for older builds and predates this node). No models, no pip dependencies - it's plain Python against the torch and numpy ComfyUI already has. Install it once; a fork or renamed duplicate in custom_nodes loads alongside it.

Don't use it as an "enhance" knob

Negative strength spends more time at the lowest noise, which adds more fine detail. It's tempting to treat that as sharpening. On a chain it's exactly the problem you came here to fix - and the pack's notes say turbo LoRAs already cost you detail in the final steps, while a step-skipping optimizer like Spectrum mispredicts the pinned rows outright. If your chain looks duller or crunchier than expected, turn those off first.

And it does nothing for audio, which is where chaining degrades first. The picture holds up; the top end doesn't.

Version note: the widgets have changed across pack releases and ComfyUI stores widget values by position, so after an upgrade, delete and re-add the node instead of trusting the numbers already in your saved graph.

Categorysampling/custom_sampling/sigmas

Inputs (3)

NameTypeDefaultDescription
sigmasSIGMAS—
tail_stepsINT31–20How many of the lowest levels before zero to reshape. Everything above them is kept.
strengthFLOAT0.50-0.9–3Above 0 lifts the tail, spending less time at the lowest noise, which is expected to add less fine detail. Below 0 does the opposite. 0 leaves the schedule unchanged.

Outputs (1)

NameTypeDescription
sigmasSIGMAS—