Apply HyperFlow H3 (MiniMax-H3 8-Step)
The 8-step MiniMax-H3 LoRA that refuses to run without its own sigma grid
- model
- model
- sigmas
MiniMax-H3 is a 33B omni-modal video model that makes picture and stereo audio in one pass, and 33B models at full step counts are not something you iterate with. HyperFlow is Video Rebirth's 8-step adapter for it. This node is how you run that in stock ComfyUI - no patched core files, no custom sampler.
It's the LCM-LoRA pattern from docs/knowledge/distillation.md, aimed at video: distil the capability into an adapter, trade fidelity for speed. Eight steps instead of a long schedule means the usual few-step compromises.
What the node actually does
Two things ride on top of the official base: a rank-256 LoRA with unmerged bf16 branches, and two-time (t, r) conditioning. That second part is the interesting half. A normal sampler conditions each step on the timestep t; HyperFlow conditions the step on the interval it's integrating, r = 1 - sigma_next. It comes from the flow-map formulation in NVlabs' AnyFlow, and it's why this isn't just a LoRA you could load anywhere.
The source patches the forward path through ComfyUI's ModelPatcher and computes
t_emb = emb_t(t) + gate * (emb_r(r) - emb_t(t))
where emb_t is the model's own time embedder, whose LoRA rides the normal bypass path, and emb_r is a re-implementation on raw weights plus the endpoint LoRA from the weights file, held as captured tensors. ComfyUI's collapsed timestep table is expanded into distinct (t, r) pairs and the rows are remapped, with sigma_next read from sample_sigmas. Because it hooks standard sampler options instead of replacing them, any core sampler works - and the audio stream keeps its own clock, with conditioning rows pinned at r = t.
The other half of the node is the trained 9-point sigma grid, handed over as a SIGMAS output and shifted with the video shift of 12 that H3 was trained at. Nine points is eight evaluations. That's the recipe.
The inputs worth setting
model- the MiniMax-H3 model to patch, straight off the loader. Chain it once.hyperflow_file- the converted adapter inmodels/hyperflow. An empty list means nothing is downloaded yet.strength- 1.0 is the released model. Leave it.lora_mode-bypassapplies the LoRA at run time, matching the reference's unmerged bf16 branches.mergefolds it in for the lowest VRAM, softer on quantized bases.experimental_curve_refit- the one optional widget, and it only matters on pruned bases (right-click → show optional widgets if it's hidden).variant/download_if_missing-automatches the detected base, and with the toggle on the node fetches that variant intomodels/hyperflowon first run. Off by default.
Outputs are model, which continues into an attention backend or straight to the guider, and sigmas, which replaces the scheduler:
Load Diffusion Model (MiniMax-H3)
-> ApplyHyperFlowH3
-> [optional] Model Attention Backend / Model Sparse Attention
-> SamplerCustomAdvanced + guider + Euler
Use Euler and feed the SIGMAS output where a scheduler would go; other samplers are ablations. The validated Sol-Attn speedup maps onto the core Model Sparse Attention node as start_percent = 0.16, dense_blocks = "0,1", tau = 1.0.
Install
It's in the Registry, so ComfyUI Manager finds it - search ComfyUI-HyperFlow-H3 (listed as HyperFlow for MiniMax-H3, publisher adudeguyman). Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Adudeguyman/ComfyUI-HyperFlow-H3
# restart ComfyUI
Then put one adapter in models/hyperflow/: the full-base build (3.67 GiB) or the _pruned one (3.64 GiB), from the drbaph/Hyperflow-Comfyui repo, or let download_if_missing fetch it. The pack declares no Python dependencies of its own - rare in an ecosystem whose standing complaint is dependency roulette.
Where people get burned
Mismatching the adapter to the base is the one to understand. The node inspects the loaded model for time_embedder and enforces the matching build, with an error naming the file you should have used - a wrong pair fails loudly. What fails quietly is expecting two-time conditioning from a pruned base at all: pruned checkpoints replace the time embedder with a small adaln_t_table, so the pruned build applies the backbone LoRA only and runs single-time, off-recipe. Enable experimental_curve_refit to recover most of it, or run a full base.
Other real ones:
- Chaining it twice throws
This MODEL already has HyperFlow applied; chain it once.Hand it a non-H3 model and it names the missingblocks[].attn.qkv_projinstead. - The original diffusers-layout HyperFlow file is rejected on load. You need the converted
.safetensors; there's no run-time translation. - On int8 bases, LoRA targets folded into fused kernels have nothing to hook and go through the merge path automatically (
N fused/int8 targets via mergein the console). - Stuck on "Model Initializing"? That status covers the whole first step, deferred weight loading and LoRA merging included, so it tells you nothing. After a ComfyUI update, the README's diagnostic is to restart with
--disable-fast-diskand re-run - a bisect, not a fix. - The H3 weights are a Model Derivative under the MiniMax H3 Community License, whose grant excludes the US, EU, UK and South Korea. The pack's code is Apache-2.0; the licence it inherits is not.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The MiniMax-H3 diffusion model to patch. Chain once, between the model loader and the sampler. | |
| hyperflow_file | COMBO | The ComfyUI-converted HyperFlow weights (models/hyperflow). Get the converted build from the HyperFlow Hugging Face repo: one .safetensors, ComfyUI module paths, no on-the-fly conversion. | |
| strength | FLOAT | 1.000–2 | Adapter strength. 1.0 is the released model. |
| lora_mode | COMBO | bypass | bypass (default): LoRA applied at run time -- sharpest, matches the reference's unmerged bf16 branches. merge: folded into the weights -- lowest VRAM, softer on quantized bases. |
| variant | COMBO | auto | Which converted build to fetch when downloading: auto (default) matches the detected base model; full = non-pruned base (the released model); pruned = backbone-only build for pruned/curve bases. Ignored when the file is already on disk. |
| download_if_missing | BOOLEAN | false | Download the chosen variant from the configured Hugging Face repo (drbaph/Hyperflow-Comfyui) into models/hyperflow when no weights file is there. Fetches exactly the published .safetensors -- nothing else. Requires internet. |
| verbose | BOOLEAN | false | Log the applied modules and the per-step (t, r) context. |
| experimental_curve_refitopt | BOOLEAN | false | Experimental checkpoint-bound conditioning fit. Exact file match applies silently; byte-different copies of the fitted base/adapter (mirrors, HF downloads) apply best-effort with a warning. Needs strength 1 and the default gate/sigmas; anything unknown uses backbone only. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| sigmas | SIGMAS | — |