Nodes/HyperFlow for MiniMax-H3/Apply HyperFlow H3 Advanced (Ablations)
ComfyUI Node

Apply HyperFlow H3 Advanced (Ablations)

Two extra knobs, and a reason to leave both alone

By Adudeguyman·Created 22 days ago·Updated 18 days ago· 18
Apply HyperFlow H3 Advanced (Ablations)
  • model
  • model
  • sigmas
◄hyperflow_file▾►
◄strength1.00►
◄lora_modebypass►
◄variantauto►
◄download_if_missingfalse►
◄gate-1.00►
◄sigmas►
◄verbosefalse►
◄experimental_curve_refitfalse►

Same node as ApplyHyperFlowH3, with a gate override and a hand-typed sigma grid bolted on. The author's own framing is the fairest description: these are ablations. Defaults reproduce the released model exactly, which is the same thing as saying that if you have to ask what to put here, the plain node is the one you want.

That's not a knock. You reach for this one when you're poking at why HyperFlow behaves the way it does - reproducing a published ablation, checking what the endpoint blend contributes, or testing your own step schedule.

What's still identical

Everything load-bearing. model takes the MiniMax-H3 model and chains once, between the loader and the sampler. hyperflow_file is the converted adapter from models/hyperflow - the full build for an unpruned base, the _pruned build for a pruned one, which the node detects automatically by looking for time_embedder. strength stays at 1.0, that being the released recipe, and lora_mode stays bypass for the sharpest match to the reference's unmerged bf16 branches (merge is there if you need the VRAM back). variant and download_if_missing do the same fetch-what's-missing job as on the base node.

experimental_curve_refit is here too - the one optional widget most people will actually touch, and the same deal as on the base node: it puts most of the two-time conditioning back on pruned bases. Right-click → show optional widgets if it's hidden.

Outputs are unchanged. model continues toward the sampler chain, and sigmas goes into SamplerCustomAdvanced in place of a scheduler: same 9-point grid in, 8 Euler evaluations out.

The two dials

gate is the blend of the endpoint embedding. The forward path computes t_emb = emb_t(t) + gate * (emb_r(r) - emb_t(t)), so gate decides how much of the interval-aware endpoint embedding bleeds in over the plain timestep embedding. At the default -1 the node reads the trained value out of the weights file, which is exactly what the released model does. Set it to anything from 0 to 2 and you're overriding that. Sweeping it is the fastest way to see how much of HyperFlow's behaviour is the two-time conditioning rather than the LoRA - and, at 0, how the thing looks with that branch effectively silenced.

sigmas is a STRING, not a socket, and it wants a raw sigma grid, comma separated. Two things trip people here. First, the validation is stricter than it looks: the grid must be strictly decreasing, start at or below 1.0, and end at exactly 0.0, because the underlying scheduler enforces the same rectified-flow contract. A grid that steps down evenly and stops at 0.02 gets rejected outright, and repeated values in the middle are rejected too. Second, what you type is the unshifted grid; the node applies the video shift of 12 itself when it hands you the SIGMAS output. Empty means the grid stored in the weights file - the trained 8-step schedule - and that is the sane answer 99% of the time. Notice the name collision, by the way: the widget called sigmas is a text grid, and the output socket called sigmas is a tensor. They are not the same object and the tooltip is not being cute.

The trap that matters

On pruned bases, gate and sigmas overrides disable the curve refit. A fit is bound to the exact released recipe - strength 1.0, default gate, default sigmas - and the moment you deviate, the node falls back to backbone-only behaviour with a console line to that effect. So if you enabled the refit for the quality recovery and then started playing with gate, you silently gave the recovery back. The tooltip says this in the author's own words; it's easy to skim past because it's on the optional widget rather than the knobs.

The other thing worth internalising: nothing here makes the model better. A custom grid is not a way to get 6 steps, and a gate sweep is not an aesthetics dial - it's how you establish that the trained values were trained for a reason. Ablations that come out worse are still useful; they're just not a workflow to save.

Install

The pack is in the Registry: search ComfyUI Manager for ComfyUI-HyperFlow-H3 (listed as HyperFlow for MiniMax-H3, publisher adudeguyman), or do it by hand.

cd ComfyUI/custom_nodes
git clone https://github.com/Adudeguyman/ComfyUI-HyperFlow-H3
# restart ComfyUI

The pack declares no Python dependencies of its own, so there's no pip step and none of the version hell that docs/knowledge/comfyui-ecosystem.md describes as the daily reality of installing node packs. You still need the adapter in models/hyperflow/ - the full build (3.67 GiB) or the _pruned build (3.64 GiB) from drbaph/Hyperflow-Comfyui, or download_if_missing on.

One note that applies to anything built on H3: the weights are a Model Derivative under the MiniMax H3 Community License, which excludes the US, EU, UK and South Korea from its grant. The pack's code is Apache-2.0; the licence it inherits is not.

Categorymodel_patch/video

Inputs (10)

NameTypeDefaultDescription
modelMODELThe MiniMax-H3 diffusion model to patch. Chain once.
hyperflow_fileCOMBOThe ComfyUI-converted HyperFlow weights (models/hyperflow).
strengthFLOAT1.000–2Adapter strength. 1.0 is the released model.
lora_modeCOMBObypassbypass: run-time additive (sharp). merge: folded into the weights (low VRAM, softer on quantized bases).
variantCOMBOautoBuild to fetch when downloading: auto (default) matches the detected base; full = non-pruned base; pruned = backbone-only for pruned/curve bases. Ignored when the file is already on disk.
download_if_missingBOOLEANfalseDownload the chosen variant from drbaph/Hyperflow-Comfyui into models/hyperflow when missing. Requires internet.
gateFLOAT-1.00-1–2Blend of the endpoint embedding. -1 (default) reads the gate from the weights file; any other value overrides it (ablation).
sigmasSTRINGCustom raw sigma grid, comma separated, must start <= 1 and end at exactly 0 (e.g. the 9 default points). Empty = the grid stored in the weights file (the trained 8-step grid). Ablation use only.
verboseBOOLEANfalseLog the applied modules and the per-step (t, r) context.
experimental_curve_refitoptBOOLEANfalseExperimental checkpoint-bound fit; gate/strength/sigma overrides disable the refit and keep backbone-only behavior.

Outputs (2)

NameTypeDescription
modelMODEL—
sigmasSIGMAS—