FastH3 LoRA does nothing in ComfyUI: why, and the converter that fixes it
FastVideo's FastH3 4-step preview adapter loads in ComfyUI without an error and changes nothing, because 0 of its 389 module names exist in the two pruned MiniMax H3 checkpoints I checked, fl2va and ref2va as int8. The fix is NikoDemon80's FastH3 LoRA converter, one Python script that rewrites the keys into a 1.04 GB LoRA you run at 6 steps.
- The FastH3 4-step preview adapter (
dense-datafree/adapter_model.safetensors, 1.49 GB) names 389 modules. None of them exist in the fl2va or ref2vapruned_int8_convrotMiniMax H3 checkpoints for ComfyUI, so ComfyUI 0.37.0 has nothing to patch. - Loaded unconverted at strength 1.0, the adapter produced 809
lora key not loadedwarnings, one per tensor, and a 124-frame clip identical to the same seed with no LoRA, pixel for pixel. - NikoDemon80's ComfyUI-FastH3-Lora-Converter is one MIT-licensed script,
lora_convert_h3.py, that renames the FastH3 keys for ComfyUI. It needstorchandsafetensors, and no custom nodes. - My converted FastH3 LoRA is 1.04 GB (Windows 11, RTX 5090 32 GB, 96 GB RAM; the conversion runs on the CPU). All 232 modules it targets exist in both the fl2va and ref2va
pruned_int8_convrotcheckpoints. - Run the converted FastH3 LoRA at 6 steps with model strength 1.0. The converter's README reports jitter and flicker at the advertised 4 steps.
- As of 2026-09-30 ComfyUI's official FastH3 templates use a separate 8-step V2 checkpoint (22.13 GB as int8) that needs no conversion. The converter is only for the 4-step preview adapter.

Why does the FastH3 adapter load without errors and change nothing?
A LoRA is applied by name, and none of the adapter's module names exist in ComfyUI's pruned MiniMax H3 checkpoints, so it patches nothing. FastVideo publishes the adapter against the original MiniMax diffusers module tree. ComfyUI runs the Comfy-Org pruned layout, which renames the modules and fuses the three attention projections into one.
I checked that on the files. The adapter header lists 809 tensors on 389 distinct modules, with every low-rank pair at rank 64. Against the headers of the fl2va and ref2va pruned_int8_convrot checkpoints, the overlap is 0 modules in both cases.
ComfyUI does not treat that as a failure. The converter's README says the unconverted file loads with no errors. In ComfyUI 0.37.0 the loader in comfy/lora.py logs one lora key not loaded: warning per unmatched key and carries on. On 2026-10-01 I loaded the unconverted adapter at strength 1.0 to check. ComfyUI logged 809 of those warnings, one for every tensor in the file, and the clip came out identical to the same seed with no speed LoRA at all: 0 pixels different in all 124 frames.

| Part of the model | FastVideo adapter | ComfyUI |
|---|---|---|
| Prefix | none | diffusion_model. |
| Blocks | transformer_blocks.N | blocks.N |
| Token refiner | token_refiner.refiner_blocks.N | token_refiner.blocks.N |
| Attention | attn.to_q, attn.to_k, attn.to_v | attn.qkv_proj (fused) |
| Attention out | attn.to_out.0 | attn.out_proj |
| Feed-forward | ff.net.0.proj, ff.net.2 | mlp.fc1, mlp.fc2 |
| Video patch in and out | proj_in, proj_out | video_patch_proj, final_layer.video_out |
| Audio patch in and out | audio_proj_in, audio_proj_out | audio_patch_proj, final_layer.audio_out |
| Text conditioning | context_embedder | condition_proj |
| Final modulation | norm_out.linear | final_layer.adaln_proj.linear (dropped by default) |
The table describes the mapping in NikoDemon80's script (_BLOCK_MAP, _TOP_MAP and the q, k, v fusion) and agrees with the table in the repo's README. The script also maps three norm entries that neither table lists. One footnote on the first row: ComfyUI 0.37.0 accepts H3 LoRA keys with or without diffusion_model., so the prefix is not what breaks the adapter. The module names are.
The fusion is exact: three rank-64 adapters for q, k and v become one rank-192 adapter on qkv_proj. One part does not convert. The adapter's AdaLN deltas are 2688 wide, and the pruned checkpoint's adaln_proj.linear takes 8 inputs from a precomputed table. The script drops those 152 tensors by default (--adaln drop), the one mode of three that showed no flicker in the README's same-seed test, and the README gives that gap as the reason for the extra steps below.
Do you still need the converter now that ComfyUI has FastH3 templates?
Only for the 4-step preview adapter. Update 2026-09-30: the official docs now have native FastH3 workflows. They load FastVideo's 8-step V2 model as a full checkpoint, fastvideo_fasth3_8step_v2_pruned_int8_convrot.safetensors (22.13 GB), on ComfyUI 0.36.0 or later. No LoRA, no conversion, and the docs say the step count is fixed at 8.
Two reasons to still want the preview adapter. It is a 1.04 GB LoRA on top of the checkpoint you already have, not a second 22 GB model. And the docs send reference work to the base H3 workflows because Ref2VA was not distilled, while the converter's README lists reference mode among the modes its author verified. FastVideo's model card describes the preview as text-to-audio-video, so treat reference use as outside what it was trained for.
What to download
- The converter.
lora_convert_h3.pyfrom NikoDemon80/ComfyUI-FastH3-Lora-Converter. One file. The MIT licence covers the script only, and the repo hosts no weights. - One adapter file. From the FastVideo-FastH3-4-step-Preview-v1-LoRA model card take only
dense-datafree/adapter_model.safetensors, 1.49 GB. The repo holds four adapters and 17.5 GB in total. The threevsa-*ones, 5.34 GB each, require FastVideo's VSA-H3 backend and kernel according to the model card, and this converter does not cover them. - Your existing H3 checkpoint. Any Comfy-Org pruned MiniMax H3 file. The README lists the fl2va and ref2va
pruned_int8_convrotfiles as verified and sayspruned_bf16andpruned_fp8_scaledshould also work. The script reads only its header. - Not the full FastH3 preview checkpoints. The Dense-DataFree repo carries about 66 GB of transformer weights in 13 shards. That is a replacement transformer, not an adapter.
Running the converter
You need torch and safetensors. On ComfyUI Portable use the bundled interpreter at python_embeded\python.exe, since that is where those packages live. The usage line from the README:
python lora_convert_h3.py INPUT.safetensors OUTPUT.safetensors [BASE.safetensors] [--adaln drop|bias|keep]
The arguments are positional: adapter in, LoRA out, then your base checkpoint. Run in a Command Prompt from the ComfyUI Portable folder, with the script and the adapter in Downloads, it looks like this (adjust the paths to yours; the ^ continues the line in cmd):
python_embeded\python.exe "C:\Users\you\Downloads\lora_convert_h3.py" ^
"C:\Users\you\Downloads\adapter_model.safetensors" ^
ComfyUI\models\loras\fasth3_6step.safetensors ^
ComfyUI\models\diffusion_models\minimax_h3_fl2va_pruned_int8_convrot.safetensors
Always pass the base model. The script checks every mapped name against that file's header and lists the ones it cannot find in the result block. It writes the output file either way, so read the block before you load the LoRA. The README gives 5 to 10 seconds for the run, with nothing loaded onto the GPU, and has a click-by-click version for people who have never opened a command prompt. Its example of a healthy result (the script also prints a diff tensors skipped line):
low-rank tensors read : 724
diff tensors read : 85
qkv modules fused : 52
modules renamed : 156
diff tensors written : 29
adaln tensors dropped : 152 (mode: drop)
tensors written : 653
output size : 1.04 GB
My converted file matches it: 653 tensors, 1,036,175,488 bytes. The README says two names, time_embedder.linear_1 and time_embedder.linear_2, always show up under MAPPED BUT ABSENT FROM BASE, because the pruned checkpoint has no time embedder. Anything else in that list means the checkpoint is not the pruned layout, and the README says to stop there.
How many steps does the converted FastH3 LoRA need?
Six. The settings from the converter's README:
- Steps: 6. The README's ladder is jitter, flicker and colour bloom at 4, serviceable drafts at 5, the recommended result at 6, and little gain at 7 to 8.
- LoRA strength: model 1.0, clip 0.0. The adapter has no text encoder content.
- Video sigma shift: your normal value. The README reports 8 to 12 as tested fine at 6 steps.
- Press Ctrl+F5 in ComfyUI first, or the new file will not show in the LoRA list.
In the figure above, the converted LoRA at 6 steps gave a crisper frame than the same 6 steps without it, by my eye: sharper spokes, harder shadows and more surface texture. It is also a different framing from the same seed, so the pair shows that the LoRA is active, not how much better it makes every clip.
In a two-stage workflow the second stage has to run the same step counts. My Stubelius Director pack is a fork of the Muse Minimax Director V1.2, and its bundled Refine node's steps and two_stage_first_pass_steps must match what the first stage ran. With sync_from_director on, which is the default, Refine reads both from the candidate. With it off, change them together when you drop to 6.
On speed, the README reports 2:55 at 6 steps against 7:00 for the stock model at 20 steps, at 544x960 and 124 frames on an RTX 3070 Ti with 8 GB VRAM and 48 GB RAM. Those are the author's numbers on the author's machine. Mine, on the reference path against the 8-step Turbo LoRA, are in is FastH3 worth converting? The speed test against the Turbo LoRA.
When the speed-test video went up I put a copy converted with this script on Patreon as a free download.
Tested 2026-09-30 on an RTX 5090 (32 GB), 96 GB RAM, Windows 11, ComfyUI 0.37.0. File-header checks on the CPU: one adapter file, one converted LoRA (dated 2026-09-02), two base checkpoints. Renders on 2026-10-01: three 5-second text-to-video clips in Stubelius Ultimate H3 on the fl2va int8 checkpoint, 960×544, 6 steps, euler with the beta scheduler, seed 20261001, differing only in the LoRA (none, the unconverted adapter, the converted file). One seed.
Sources and files
- NikoDemon80/ComfyUI-FastH3-Lora-Converter: the script, the README with the key map and measurements, the MIT licence.
- FastVideo-FastH3-4-step-Preview-v1-LoRA: the adapter's model card, and the dense-datafree folder with the one file you need.
- hao-ai-lab/FastVideo: the project behind FastH3.
- FastVideo-FastH3-Comfy: the 8-step V2 checkpoint used by the native templates.
- ComfyUI docs: FastVideo FastH3 workflows and ComfyUI docs: MiniMax H3 native workflows.
- MiniMaxAI/MiniMax-H3: the base model card.
- stuubszzz/Stubelius-Director: the two-stage Director and Refine nodes I use, a fork of MiniMaxH3-Director-V1.2 by Muse Collective.
- On this site: FastH3 vs the Turbo LoRA, timed on one clip and the Director seed hunt and two-stage setup.
Common questions
Why does the FastH3 LoRA do nothing in ComfyUI?
Its keys use the MiniMax diffusers names, such as transformer_blocks.N.attn.to_q, and ComfyUI's pruned MiniMax H3 uses blocks.N.attn.qkv_proj. None of the adapter's 389 module names exist in the fl2va or ref2va int8 checkpoints I checked, so there is nothing to patch, and the ComfyUI 0.37.0 loader only logs a warning for each unmatched key. When I loaded it, the render was identical, pixel for pixel, to the same seed with no LoRA. Convert the file with lora_convert_h3.py and load the output.
Does the converted FastH3 LoRA work with int8 checkpoints?
The converter's README lists the fl2va and ref2va pruned_int8_convrot checkpoints as verified and notes that ComfyUI dequantizes when it patches. On my disk all 232 modules the converted LoRA targets exist in both of those files.
Do the official FastH3 templates in ComfyUI need the converter?
No. The native templates load an 8-step V2 checkpoint, fastvideo_fasth3_8step_v2_pruned_int8_convrot.safetensors, as a diffusion model on ComfyUI 0.36.0 or later and run at 8 steps. The converter is only for the 4-step preview adapter.
STUUBZZZ


