# ComfyUI-MiniMax-H3-Turbo

Run [MiniMax-H3](https://docs.comfy.org/tutorials/video/minimax/minimax-h3) —
joint **video + synchronized audio** — in as few as **4 sampling steps** instead
of ~20, with the
[MiniMax-H3 Turbo LoRA](https://huggingface.co/larryvrh/MiniMax-H3-Turbo-Lora).

Two nodes drop straight into the official H3 workflow (text-to-video and
image-to-video):

| node | what it does |
|---|---|
| **MiniMax-H3 Turbo LoRA** | `MODEL → MODEL`, applies the turbo LoRA |
| **MiniMax-H3 Turbo Sampler** | `→ SAMPLER`, feeds `SamplerCustomAdvanced` |

## Which checkpoint — `v4` (600) or `v1` (850)?

For **most** work, use **`minimax_h3_turbo_v4_step600_ema.safetensors`** (from the
[LoRA repo](https://huggingface.co/larryvrh/MiniMax-H3-Turbo-Lora)). It's the
strongest checkpoint so far: much better static / small-motion shots, markedly
better micro-detail (faces, fingers, texture), and the over-sharpening / plastic
look of the earlier `v1` (~850) line is fully resolved.

v4 introduced a **static-frame enhancement**. The one trade-off shows up **only at
4 steps with large, fast motion**, where v4 can produce **motion-smear / trailing
ghosting** (actively being fixed). **Using 6–8 steps largely removes it** — and v4
tolerates higher step counts better than v1 (which over-sharpens at high steps +
strength 1.0). For the narrow case of **4 steps *and* heavy motion**, the older
**`v1` ~850** checkpoint can still be friendlier.

```
Using 6–8 steps?        ── yes ──►  v4-600  (recommended)
   │ no (4 steps)
   ▼
Heavy / fast motion?    ── no  ──►  v4-600  (recommended)
   │ yes
   ▼
                                    v1-850  (friendlier at 4-step heavy motion)
```

Still a preview — the two areas still being improved are **audio** and **fast,
intense motion**.

## Install

**Via ComfyUI-Manager** — search "MiniMax-H3 Turbo" and install. **Or manually:**

```bash
cd ComfyUI/custom_nodes
git clone https://github.com/larryvrh/ComfyUI-MiniMax-H3-Turbo
```

Then restart ComfyUI. Keep the node updated (Manager, or `git pull`) — it evolves
alongside the weights.

Put the LoRA `.safetensors` into `ComfyUI/models/loras/`. You also need the base
MiniMax-H3 model, VAEs and text encoder from the official release — see the
[MiniMax-H3 tutorial](https://docs.comfy.org/tutorials/video/minimax/minimax-h3).

## Use

Start from the **official MiniMax-H3 workflow** (t2v or i2v) and make two changes:

1. Insert **MiniMax-H3 Turbo LoRA** between the model loader and the sampler
   (`… → Load Diffusion Model → MiniMax-H3 Turbo LoRA → SamplerCustomAdvanced`),
   and pick the turbo `.safetensors`.
2. Feed `SamplerCustomAdvanced` from **MiniMax-H3 Turbo Sampler**, and set the
   scheduler node (`BasicScheduler`) to `simple` at **≥ 4 steps**.

Everything else — conditioning, VAE decode, audio output — stays as in the
official graph, so **both t2v and i2v** work unchanged. A ready-made t2v workflow
is in [`example_workflows/`](example_workflows/minimax_h3_t2v_turbo.json) — drag it
into ComfyUI to see the wiring.

## Steps and strength

- **4 steps is the recommended *minimum*; 4–8 is the useful range.** 6–8 steps
  look noticeably better than 4, so add steps if you can afford them. Past **8
  steps** it stops helping and can start to introduce **over-sharp artifacts** —
  no benefit to going higher, so stay in **4–8**.
- **Keep `strength` at `1.0`.** It's tuned for 1.0 and holds up across the 4–8 step
  range. Only reach for the dial if a *specific* clip misbehaves: **blurry ghosting
  / smear → nudge up** (`~1.05–1.2`), **over-sharp grain → nudge down**
  (`~0.8–0.95`).
- Keep the scheduler on `simple`.

## Base model & `low_vram`

**Base model** — works with any MiniMax-H3 base: full (`bf16`, `int8_convrot`)
**and the pruned/curve variants** (`pruned_int8`, `pruned_fp8`). The node detects a
pruned base automatically and re-injects the LoRA's time-conditioning at run time
(a small `silu(t_emb)` grid ships with the node for this), so **one LoRA file
covers every base**.

**`low_vram`** (node switch) trades sharpness for peak VRAM:

- **off (default)** — applies the LoRA at run time (bypass): sharpest, recommended,
  a little extra peak VRAM.
- **on** — merges the LoRA into the weights: lowest peak VRAM, so smaller GPUs run
  and longer / higher-res clips fit, but the result is **softer on quantized
  (`int8` / `fp8` / pruned) bases** (the tiny update is partly rounded away when
  folded into the quantized weights).

The node streams the base model, so it runs on much smaller GPUs than the ~33 B
size suggests — an 80 GB GPU is only needed for the largest resolutions in `bypass`
mode. If you hit out-of-memory, turn `low_vram` **on** and/or lower the resolution
or frame count.

## Why a custom sampler (and how it adapts)

MiniMax-H3 denoises the video and audio streams on two different flow schedules
(video shift 12, audio shift 3). **Recent ComfyUI handles this natively** — its
`ModelSamplingAV` carries the audio latent on the video schedule — so a stock
sampler already produces correct audio there. On **older ComfyUI without that
support**, a stock sampler steps both streams on one schedule and badly over-steps
the audio at 4 steps, so the audio comes out distorted.

This node's sampler **auto-detects which ComfyUI it's on**: on recent builds it
steps as a plain single-schedule sampler (bit-for-bit the stock result); on older
builds it steps each stream on its own clock so audio stays clean at 4 steps. Keep
it in the workflow and it does the right thing across ComfyUI versions — nothing to
change when you update. (On recent ComfyUI a stock `euler` also works; the Turbo
Sampler just keeps existing graphs running unchanged.)

## Notes

- **Resolution / length**: width and height are multiples of 32 (short edge
  typically 768); frame count is at 24 fps and snaps to the model's 17·k+5 grid
  (124 ≈ 5 s). Validated range ~124–362 frames.

## License

Apache-2.0.
