H3 PTD Patch
MiniMax H3 video and audio in four steps
- model
- model_patch
- model
- sigmas
- steps
Why you'd want it
MiniMax H3 is the 33B omni-modal video model that landed with native stereo audio welded into the generation rather than bolted on afterwards - the first open-weights answer to the thing Veo kept to itself. It is also, at full step count, slow and enormous. Four to eight steps instead of forty is the difference between iterating and making coffee.
PTD - Parametric Trajectory Distillation - is the shortcut. It's the same family of idea as every other few-step distillation in the KB's distillation doc: train something that jumps the trajectory in a handful of big strides instead of walking it. The difference is that PTD doesn't ship as a new checkpoint. It ships as a .safetensors file of per-step adapters and head weights that you apply to the transformer you already have.
This node is the "apply it" half.
How it works
Two files, two nodes. Load Model Patch loads the PTD file as a MODEL_PATCH - the pack registers ComfyUI/models/ptd as a folder that node searches, so you don't have to remember which of the two standard model directories to use. Then H3 PTD Patch takes a plain H3 transformer plus that patch and injects the file's per-step factors into the attention and feed-forward projections, along with the trained output-head adapters for both the video and audio streams.
It checks its work first. If the projection widths in the file don't match the transformer you get an error naming the layer and both widths, instead of a shape mismatch forty seconds into sampling. It also refuses a model that already carries a PTD patch (patch from the loader rather than stacking twice) and one with a PDD head bank merged in.
The one thing you must not get wrong: the file has to match the transformer family. There are two releases. Ref2VA files (from taobao-content-ai, stacked factors and a 32-step head bank) go on ref2va transformers; fl2va files (from EPFL, a factor pair per step) go on fl2va transformers. Right file, wrong base, no speedup and probably garbage.
It publishes what it did to the node panel - release, step count, the trained sigmas, the sampler settings it recommends - after the run. That report is the fastest way to confirm you applied what you thought you applied.
Inputs and outputs
model- a plain MiniMax H3 transformer, ref2va or fl2va, pruned and quantized builds included. LoRAs go before this node, on the model.model_patch- the PTD file, bf16 or int8, from Load Model Patch.model(output) - the patched model, for your sampler.sigmas- the exact step times the file was trained for:1.0, 0.988, …for Ref2VA,0.999, 0.947, 0.857, 0.667, 0for fl2va 4-step. IntoSamplerCustomAdvanced.steps- the integer the file was trained for -4,6or8- for KSampler's steps widget.
Two valid wiring styles. SamplerCustomAdvanced plus these sigmas is the faithful one. KSampler with euler, scheduler simple, CFG 1 and steps wired from the output is the convenient one, and it's what the node tells you it wants. Don't mix: a sampler handed any other sigmas stops before its first step.
Install
Pack first - Manager, search WAS Node Suite v3, or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
ComfyUI 0.14.0+, Python 3.10+, no pip step. Then the weights, which live outside the pack:
ptd_h3_ref2va_4step_int8.safetensors(~2.9 GB) →ComfyUI/models/ptdorComfyUI/models/model_patches, for a ref2va transformerptd_h3_4step_int8.safetensors(~2.8 GB), for an fl2va transformer
Both from nynxz/MiniMax-H3-PTD-LoRAs, which mirrors the original taobao-content-ai and EPFL releases. The bf16 copies and the 6- and 8-step versions use the same layouts, so anything in those folders should load.
Check your licence position before you spend the bandwidth. The PTD files inherit the MiniMax H3 Community License, and that licence excludes the US, EU, UK and South Korea from its applicable territory - no local rights there at all, weights or patches. Hosted Hailuo is the licensed path in those regions.
Where people get burned
The "already carries a PTD patch" error. You patched a model that a checkpoint merged the PTD weights into, or you put two H3 PTD Patch nodes in a row. One patch, plain base.
A 0-step run. You wired these sigmas into something that expects its own schedule, or you wired a stock KSampler scheduler alongside. The node's own tooltip says it plainly: any other sigmas and the sampler stops before step one.
Wrong release. Ref2VA file on an fl2va transformer is the most common mix-up, because the filenames differ by one token. The projection check usually catches it; when it doesn't, the output is just bad, not broken.
Expecting it to help at 30 steps. PTD is trained for a specific few-step grid. Running 30 steps with 4-step adapters doesn't give you a better video, it gives you a worse one, for the same reason a 4-step distilled model doesn't improve at 20.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | A plain MiniMax H3 transformer of the kind the file was trained on, ref2va or fl2va, pruned and quantized ones included, after any LoRA. | |
| model_patch | MODEL_PATCH | A PTD file from Load Model Patch, kept in ComfyUI/models/model_patches or ComfyUI/models/ptd: bf16 or int8, Ref2VA or fl2va. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | The model with the file's step adapters, for a sampler at the steps below. |
| sigmas | SIGMAS | The trained step times, for SamplerCustomAdvanced: `1.0, 0.988, ...` for Ref2VA, `0.999, 0.947, 0.857, 0.667, 0` for fl2va 4 step. A sampler given any other sigmas stops before its first step. |
| steps | INT | Steps the file was trained for: `4`, `6` or `8`, for KSampler's steps. |