Skip to content
freakyjolly✳THE WORLD OF AI. EXPLAINED.
Search
← Latest stories
,

Best MiniMax H3 Text-to-Video Workflow for ComfyUI (16 GB VRAM, Free JSON)

MiniMax H3 is the first open video model I’ve used that gives you video and synchronized stereo audio from one prompt. Sizzling pans, footsteps, rain and room tone all come out of the same sampling pass. It’s also heavy. The official files are tens of gigabytes, and the stock graph runs 20 steps. On a 16 GB card that gets slow fast.

This post walks through the text-to-video graph I actually run. It’s the same chain that powers the minimax_h3_t2v mode in my own Jolly backend, which serves real user jobs on my RTX 5080 (16 GB). You can download the JSON at the end.

TL;DR

  • MiniMax H3 text-to-video ComfyUI workflow that outputs video and synchronized stereo audio from one prompt (no separate audio model).
  • Chain: H3 FL2VA pruned W4A8 diffusion + MiniMax-H3 Turbo LoRA → Sage Attention → MiniMaxH3SigmaShift (video 12 / audio 3) → MiniMaxH3TurboSampler with BasicScheduler simple, 6 steps (no CFG).
  • Text encoder: Qwen3-VL-4B INT4 + ClipProj (instead of the ~15.7 GB 32B encoder); default output 16:9 at 0.4 MP (864×480), 24 fps, 6 seconds.
  • Runs on 16 GB VRAM (tested on RTX 5080); free download freakyjolly-minimax-h3-t2v-turbo6-api.json.
  • Use FL2VA weights with no first/last frame connected for pure t2v; scheduler must be simple and LoRA must go through MiniMaxH3TurboLoRA.

Quick answer: what you get

  • Model chain: H3 FL2VA pruned diffusion model → MiniMax-H3 Turbo LoRA → Sage Attention → MiniMaxH3SigmaShift (video 12 / audio 3)
  • Sampler: MiniMaxH3TurboSampler + BasicScheduler simple, 6 steps, no CFG (BasicGuider)
  • Text encoder: Qwen3-VL-4B INT4 + a ClipProj projection, instead of the 15.7 GB 32B encoder
  • Output: 24 fps MP4 with muxed audio, 16:9 at 0.4 MP (864×480) by default, 6 seconds
  • Free download: freakyjolly-minimax-h3-t2v-turbo6-api.json

A quick note on how H3 is packaged: there is no separate “t2v” checkpoint. In my backend, text-to-video is the core MiniMaxH3ImageToVideo node on the FL2VA (first/last-frame) weights with no frames connected. With nothing to anchor to, the model generates purely from the prompt. That’s how ComfyUI’s own template works too. So when you see “FL2VA” below, that’s correct for t2v.

Why this workflow (and not the others on my drive)

I have more H3 workflows than I’d like to admit: an older 20-step GGUF test (Q4_K_M UNet + Q2_K text encoder), a two-pass “PDD8 + latent upscaler” hybrid, long-form Extender graphs for multi-shot films, and so on. For plain text-to-video I picked the backend’s graph because:

  1. It’s the one that runs every day. It’s what free and PRO users get when they pick “MiniMax H3: Text 2 Video” on my site, so it’s had far more runs than any experiment.
  2. Six steps instead of 20. The Turbo LoRA plus its dedicated sampler is why steps dropped from 20 to 6 in my backend in August.
  3. The mistakes are already fixed. I learned two things the hard way (details below). The scheduler must be simple; I ran beta for a few hours and the output got worse. And the LoRA must go through the Turbo pack’s own node, not LoraLoaderModelOnly.

The older GGUF route lost on my machine. In my notes the Q4_K_M GGUF UNet sampled at 35 s/it against 25 s/it for the int8_convrot safetensors at 0.4 MP. The Q2_K GGUF text encoder was about 2× slower, because it pins itself to the GPU and pushes the UNet out. File size doesn’t predict H3 speed. Only measuring does.

Requirements and model downloads

Hardware I tested on: RTX 5080 16 GB, Windows, ComfyUI portable. H3 streams weights from system RAM when they don’t fit in VRAM, so lots of system RAM helps a lot.

ComfyUI version: a build newer than 2026-08-07. The W4A8 diffusion model needs the asym_w4a8_int8 support that was merged into mainline that day, according to the model card.

Component File Folder Download
Diffusion model (FL2VA, pruned W4A8, ~12.5 GB) minimax_h3_fl2va_pruned-w4a8_convrot_pruned.safetensors models/diffusion_models/ Winnougan/MiniMax-H3-INT4_Convrot_ComfyUI
Alternative: official pruned int8 (~21 GB) minimax_h3_fl2va_pruned_int8_convrot.safetensors models/diffusion_models/ Comfy-Org/MiniMax-H3
Text encoder (Qwen3-VL-4B INT4, ~2.8 GB) qwen3vl_4b_int4_convrot.safetensors models/text_encoders/ Merserk/qwen3vl-4b-int4-convrot
ClipProj projection mmh3-4b-ClipProj-v3.1-mlp.safetensors models/clip_projections/ NicoLab28/ClipProj-MiniMax-H3
Video VAE (int8) minimax_h3_video_vae_int8_convrot.safetensors models/vae/ Comfy-Org/MiniMax-H3
Audio VAE minimax_h3_audio_vae_fp32.safetensors models/vae/ Comfy-Org/MiniMax-H3
Turbo LoRA (~780 MB) minimax_h3_turbo_4step_ema_ckpt500.safetensors models/loras/ larryvrh/MiniMax-H3-Turbo-Lora

Two notes on that table:

  • The 32B encoder is still the “reference” option. If you want maximum prompt adherence and have the RAM, qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors (~15.7 GB) is on the Comfy-Org repo. Swap the ClipProj loader for a core Load CLIP (type minimax). The 4B + ClipProj route is what my backend runs now, because the encoder file is 2.62 GB instead of 7.91–15.7 GB.
  • Turbo LoRA version. My graph uses ema_ckpt500. The author now recommends the newer minimax_h3_turbo_v4_step600_ema.safetensors for most work, especially at 6–8 steps. I haven’t A/B tested v4 on my box yet.

Install steps

  1. Update ComfyUI to a build from after 2026-08-07 (Manager → Update ComfyUI, or git pull).
  2. Install the custom node packs. The easiest way is through ComfyUI-Manager:
    – ComfyUI-MiniMax-H3-Turbo: MiniMaxH3TurboLoRA, MiniMaxH3TurboSampler
    – ComfyUI-ClipProj: ClipProjLoader
    – ComfyUI-KJNodes: DiffusionModelLoaderKJ, PathchSageAttentionKJ, ModelPreviewOverrideKJ
    – ComfyUI-VideoHelperSuite: VHS_VideoCombine
    – ComfyUI-Easy-Use: easy cleanGpuUsed, easy clearCacheAll
  3. (Optional) Install SageAttention (thu-ml/SageAttention) into ComfyUI’s Python. If it isn’t installed, set the Sage node to disabled.
  4. Download the models from the table into the folders listed.
  5. Restart ComfyUI, then drag freakyjolly-minimax-h3-t2v-turbo6-api.json onto the canvas.

ResolutionSelector, ComfyMathExpression, MiniMaxH3ImageToVideo and MiniMaxH3SigmaShift are core nodes, so you don’t need extra packs for them.

The workflow, node by node

# Node Setting Why
115 ResolutionSelector 16:9 (Widescreen), 0.4 MP, multiple 32 → 864×480 My backend’s admin/”YouTube” baseline. Site tiers render at 0.3 MP (736×416) to keep the queue moving.
105:111 PrimitiveFloat 6.0 seconds Duration input
105:107 ComfyMathExpression max(5, round(a*24)) + (5 - (max(5, round(a*24)) % 17)) % 17 Converts seconds to frames at 24 fps and snaps up to H3’s 17k+5 grid (6 s → 158 frames, 5 s → 124)
105:6 DiffusionModelLoaderKJ FL2VA pruned W4A8, dtypes default, sage disabled here Sage gets patched later, on its own node
105:13 ClipProjLoader qwen3vl_4b_int4_convrot, type auto, mmh3-4b-ClipProj-v3.1-mlp, cuda:0, resident auto refuses a text-only Qwen3. That’s important, because a text-only model silently ignores your prompt.
105:144 MiniMaxH3TurboLoRA ema_ckpt500, strength 1.0, low_vram False Bypass mode: sharpest, but uses more peak VRAM
105:136 PathchSageAttentionKJ auto, allow_compile True Scoped to this model clone, so no launcher flag is needed
105:140 ModelPreviewOverrideKJ max_res 1024, jpeg 80, preview 360 frames @ 8 fps Keeps ComfyUI’s live preview cheap
105:143 MiniMaxH3SigmaShift video 12, audio 3 Video and audio share one latent but need different sigma spacing, or the audio drifts
105:104 MiniMaxH3ImageToVideo prompt; no first/last frame No frames means pure text-to-video
105:15 RandomNoise any seed
105:148 MiniMaxH3TurboSampler — Required. A stock sampler over-steps the audio at low step counts.
105:9 BasicScheduler simple, 6 steps, denoise 1.0 Do not use beta
105:16 BasicGuider — H3 has no negative prompt or CFG
105:14 SamplerCustomAdvanced —
105:130 / 131 easy cleanGpuUsed → easy clearCacheAll — Free VRAM between sampling and decode
105:10 / 105:23 VAEDecode / VAEDecodeAudio int8 video VAE / fp32 audio VAE
92 VHS_VideoCombine 24 fps, h264-mp4, yuv420p, crf 20, audio connected Muxes with ffmpeg as a separate step, so an audio-encode error can’t hang the worker

What I removed from the backend graph for this download: the SpectrumApplyMiniMaxH3 node. Its default warmup (5) plus tail (1) covers all 6 steps, so at this schedule it forecasts zero steps and only adds overhead. My backend even logs a warning about it. Leaving it out of the download saves you one custom node pack.

Why 6 steps and not 4? The Turbo LoRA author calls 4 the minimum and 4–8 the useful range. My production graph runs 6. Going past 8 doesn’t help and can add over-sharpening.

Prompt tips (with 3 examples)

H3’s prompt does the work that negative prompts and audio models do in other pipelines. What has worked for me:

  1. Describe the audio explicitly and say what to exclude (“No music, no speech, no captions”). If you don’t, H3 will happily add a soundtrack.
  2. One coherent shot per clip at these lengths. Ask for “one continuous shot, no cuts” unless you really want a cut.
  3. Camera direction in plain words: “slow push-in”, “pulls back and rises”, “handheld follow”.
  4. Timed beats work for longer clips: [0s-2s] ... [2s-4s] .... But adherence is the first thing to check if you change the text encoder.
  5. Read MiniMax’s official base prompt guide. It covers the T2V/I2V/FL2V formats.

Example 1: street food (the default in the JSON)

Cinematic live-action, 16:9. A street-food cook in a narrow Delhi lane at dusk flips parathas on a wide iron tawa; steam and smoke drift through warm tungsten light. The camera starts on a close-up of the tawa, then slowly pulls back and rises to reveal the busy lane behind him. One continuous shot, no cuts. Audio: loud sizzling, a metal spatula scraping the tawa, distant scooter horns and soft crowd chatter. No music, no speech, no captions.

Example 2: product/ambient

Macro shot of a mechanical watch on dark slate, a slow 90-degree orbit around it, soft rim light catching the brushed steel. Audio: crisp ticking, a faint room hum. No music, no speech.

Example 3: timed beats

Stylized 3D animation. [0s-2s] A small orange fox peeks out of a snowy burrow, ears twitching. [2s-4s] It hops out and shakes snow off its fur in slow motion. [4s-6s] The camera tilts up to the aurora overhead. Audio: wind, soft crunching snow, a single gentle chime at 4s. No speech.

VRAM and speed tips for 16 GB cards

  • Start at 0.3–0.4 MP. The resolution table in the ComfyUI H3 template goes up to 2.0 MP (1920×1088), but my site tiers render at 0.3 MP. 0.4 MP was the setting that caused a ~48-minute PRO queue backlog when I tried it globally, so I only use it for admin and YouTube jobs.
  • Leave Sage on auto, and listen to the result. Sage quantizes Q/K to INT8, and H3 runs audio and video through the same attention. If something goes wrong, you’ll most likely hear it (drifting or desynced audio) on a video that still looks fine. Set it to disabled to compare.
  • Turbo LoRA low_vram. If you OOM, switch it to True. That changes it from bypass to merge: lowest VRAM, but a little softer on a quantized base.
  • Keep the clean nodes between the sampler and decode.
  • Don’t launch with --use-sage-attention if other workflows share that ComfyUI. It applies to the whole process. The KJ node only affects this model.
  • Expect the first run to be slower. On my box a cold instance after a restart was a big part of the runtime difference (7.94 vs 11.57 s/it in one comparison).

Render times and VRAM on my RTX 5080:
– Current 6-step Turbo graph: render time and peak VRAM depend on your GPU, megapixels, and duration.
– For context, my backend logged an average of 6.4 min per t2v job on the 5080 (n=5) in early August. That was before the Turbo switch, on the older 20-step graph at 0.3 MP, so treat it as a ceiling, not a current benchmark.

Troubleshooting

CUDA out of memory / stalls at sampling 0/6. Lower megapixels first (0.4 → 0.3), then duration. Set the Turbo LoRA low_vram to True. On one of my GPUs, adding a SetReserveVRAM (3 GB) node fixed a text-encoding stall, but it didn’t fix a later sampling stall. VRAM headroom is the real fix.

Log says “lora key not loaded”. You applied the Turbo LoRA with LoraLoaderModelOnly. On a pruned base all 518 keys fail to load, and you’re quietly rendering the base model at 6 steps (soft video and audio). Use MiniMaxH3TurboLoRA. It detects pruned bases and re-injects the time conditioning.

Output is soft or smeared. Check the scheduler is simple, steps are 6–8, and the sampler is MiniMaxH3TurboSampler.

The video ignores the prompt. If you replaced the encoder, make sure it’s a Qwen3-VL (vision-language) model and keep ClipProj type on auto. A text-only Qwen3 of the same size loads without errors but produces prompt-blind conditioning. Also make sure the projection size matches (4B matrix with a 4B encoder).

ClipProj refuses an int8 encoder. int8 weights only work in resident mode in that node. Use resident, or use an fp8_scaled encoder.

Missing asym_w4a8_int8 / the W4A8 model fails to load. Update ComfyUI, or use the official minimax_h3_fl2va_pruned_int8_convrot.safetensors.

Download the workflow

Download the workflow (ZIP with JSON)

It’s an API-format graph (the same one my backend builds), and ComfyUI loads it when you drag it onto the canvas. All model names are generic filenames from the table above; there are no personal paths or keys. Before you queue, change the prompt on the MiniMax H3 Image to Video node and pick your aspect ratio/megapixels in Resolution Selector.

Honest limitations

  • H3 is trained for about 124–362 frames (roughly 5–15 s). Longer clips are untested by the model authors.
  • The Turbo LoRA is labelled a preview by its author. Audio and very fast motion are what’s still improving.
  • The 4B + ClipProj encoder approximates the 32B one; it’s not identical. If a timed storyboard stops landing, try the 32B nvfp4 encoder first.

FAQ

Is there a dedicated MiniMax H3 text-to-video model?
No. Text-to-video uses the FL2VA weights with no first or last frame connected. The reference-to-video (ref2va) weights are a separate download.

Can I run MiniMax H3 on 16 GB VRAM?
Yes. My production backend runs on 16 GB cards. The pruned W4A8 model plus the 4B ClipProj encoder is the most 16 GB-friendly combination I use. Big system RAM helps because weights stream from it.

How many steps should I use with the Turbo LoRA?
6, with the simple scheduler and MiniMaxH3TurboSampler. 4 is the minimum, and above 8 it stops helping.

Does it support negative prompts?
No. H3 has no negative conditioning. Put exclusions in the positive prompt (“No music, no captions”).

Can I use the official 32B text encoder instead?
Yes. Replace ClipProjLoader with core Load CLIP (type minimax) and load qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors. It costs much more RAM and VRAM.

Why is the audio out of sync?
Check MiniMaxH3SigmaShift (video 12 / audio 3) and the Turbo sampler. Then try Sage disabled.