Nodes/ComfyUI-NKD-Sigmas-Curve/😺NKD H3 Audio Shift Curve
ComfyUI Node

😺NKD H3 Audio Shift Curve

Draw When MiniMax H3 Locks Onto Its Audio — NKD H3 Audio Shift Curve

By Nekodificador·Created 6 months ago·Updated 2 days ago· 60
😺NKD H3 Audio Shift Curve
  • model
  • MODEL
â—„curve_data{"points": [[0.0, 0.3333333333333333, 1.0], [1.0, 0.3333333333333333, 1.0]], "interpolation": "linear", "tension": 1.0}â–º
â—„mult_min0.50â–º
â—„mult_max2.00â–º
â—„debugfalseâ–º

MiniMax H3 is the model of the moment - a local, open-weights video diffusion transformer that generates its own audio instead of leaving you to mux it in later. That audio doesn't just get tacked on; it's a separate stream that the sampler has to keep in step with the video, and H3 exposes a shift_audio value to control exactly how those two streams converge. Stock ComfyUI sets that value once and leaves it flat for the whole run. This node from the NKD Sigmas Curve pack lets you draw it as a curve instead, so the audio-video coupling can change from step to step.

The name is honest about being a niche tool: it's MiniMax H3 only, does nothing for any other model, and it's a multiplier on the shift some other node already set - not a replacement for it. Drop it into an H3 workflow with the curve left flat and it changes literally nothing. That's the design, and it's the safest possible way to ship a tuning gadget.

How it works

The node takes your MODEL, clones it, and wraps the sampler's PREDICT_NOISE call with a per-step hook. On each step it figures out where you are in the schedule (X axis = sampling progress, 0 to 1), reads your curve at that point to get a multiplier (Y axis = 0 to 1), then scales it between your mult_min and mult_max values and applies it to the base shift_audio that's already in play - either the one MiniMaxH3SigmaShift set, or H3's own default.

The curve data is the exact same JSON contract the pack's main sigma editor uses, which is the point: same widget, same muscle memory. You get the same interactive canvas - click to add a control point, drag to move it, Shift+click to remove - with linear or smooth (B-spline) interpolation. And because it's a multiplier, a flat curve at 1.0x is a no-op, which makes it safe to leave sitting in a shared workflow.

The inputs that matter

The node is refreshingly small: model in, MODEL out, plus four widgets.

  • curve_data - the serialised curve JSON. You almost never touch this by hand; the canvas widget manages it. It's the same "draw the schedule" idea that's been reshuffling sampler advice for flow-matching models lately, just aimed at H3's audio stream instead of the noise schedule.
  • mult_min and mult_max - the two you actually set. They define what Y=0 and Y=1 on the curve mean as multipliers on the base shift. Defaults are 0.5x at the bottom and 2.0x at the top. Keep them modest: the author's own guidance is that the far ends of the dial trade coherence for effect. This is a nudge around a level you already like, not a trip an order of magnitude away.
  • debug - log the shift applied at each step to the console. Genuinely useful the first time you use this, because the math is otherwise invisible.

The output is a patched MODEL that replaces the model going into your sampler. Keep MiniMaxH3SigmaShift in the graph - this node reads whatever it left behind and only reshapes it over time.

Installing it

Same story as the rest of the pack. Easiest is ComfyUI Manager: search NKD Sigmas Curve and install in one click. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/Nekodificador/ComfyUI-NKD-Sigmas-Curve

Then restart ComfyUI. There are no extra Python dependencies - no pip install, no model files to download, nothing heavy. That's the one thing the README is refreshingly clear about, and it's true of this node too.

Where people get burned

Two traps, both worth knowing before you reach for it.

It's an H3-only node, and the pack needs a recent ComfyUI. The whole pack is built on ComfyUI's newer V3 API / Nodes 2.0 (it says so in the README). If you're on a stale ComfyUI install, the node either won't appear or will refuse to load. Update ComfyUI before you blame the pack.

It multiplies, it doesn't set. If you wire this in and remove MiniMaxH3SigmaShift, the curve still has a base to work on (H3's internal default), but you've lost the control it gives you over the actual level. And if your curve seems to do nothing at all, check whether it's actually flat - a straight line at the middle of the range is a 1.0x no-op by construction. That's not a bug, that's the feature working as drawn.

Category😺NKD Nodes/Sampling

Inputs (5)

NameTypeDefaultDescription
modelMODEL—
curve_dataSTRING{"points": [[0.0, 0.3333333333333333, 1.0], [1.0, 0.3333333333333333, 1.0]], "interpolation": "linear", "tension": 1.0}Serialised curve JSON (managed by the curve widget)
mult_minFLOAT0.500.05–10Curve bottom (y=0) multiplies the incoming shift_audio by this
mult_maxFLOAT2.000.05–10Curve top (y=1) multiplies the incoming shift_audio by this
debugBOOLEANfalseLog the shift applied at each step to the console

Outputs (1)

NameTypeDescription
MODELMODEL—