One-Sentence Answer
MiniMax H3 runs locally now. ComfyUI Desktop ships with all models included, and the Hermes skill I built handles the workflow — one command for T2V, I2V, or R2V generation, zero API keys.
Why Run It Locally
The MiniMax API is decent, but I had two complaints: video length capped by credits, and generation subject to platform moderation. Running locally removes both. Plus the RTX 5080 was sitting there underutilized.
The first time a generated video actually played back smoothly, my reaction was: okay, we're actually here.
Environment Setup
Paths (Windows)
C:\Users\<user>\AppData\Local\Comfy-Desktop\
├── ComfyUI-Installs\ComfyUI\ComfyUI\ ← core application
├── ComfyUI-Shared\
│ ├── models\ ← all model files
│ │ ├── diffusion_models\
│ │ │ ├── minimax_h3_fl2va_pruned_int8_convrot.safetensors
│ │ │ └── minimax_h3_ref2va_pruned_int8_convrot.safetensors
│ │ ├── text_encoders\
│ │ │ └── qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors
│ │ └── vae\
│ │ ├── minimax_h3_video_vae_fp16.safetensors
│ │ └── minimax_h3_audio_vae_fp32.safetensors
│ └── output\ ← generation output
Desktop installation ships with all models ready. No Hugging Face token, no extra downloads.
Starting the Server
ComfyUI needs to run headless, not the desktop GUI:
cd "C:\Users\<user>\AppData\Local\Comfy-Desktop\ComfyUI-Installs\ComfyUI\ComfyUI"
# Critical: clear PYTHONPATH, or the venv imports the wrong Pillow
env -u PYTHONPATH ".venv\Scripts\python.exe" main.py \
--listen 127.0.0.1 --port 8188 \
--extra-model-paths-config "C:\Users\<user>\AppData\Local\hermes\scripts\minimax_h3_extra_paths.yaml" \
--output-directory "C:\Users\<user>\AppData\Local\Comfy-Desktop\ComfyUI-Shared\output"
Health check:
curl http://127.0.0.1:8188/system_stats
The Node Chain (Where It Went Wrong)
This is the part that cost me the most time. The official ComfyUI templates use subgraph format — posting them directly to the /prompt API returns missing_node_type errors. Local generation requires building the workflow from standard nodes.
Correct Node Connections
MiniMaxH3ImageToVideo / MiniMaxH3ReferenceToVideo
output[0] = CONDITIONING ← do not connect here
output[1] = LATENT ← connect here
LATENT ──► VAEDecode (samples=[H3, 1], vae=video_vae) ──► IMAGE
──► VAEDecodeAudio (samples=[H3, 1], vae=audio_vae) ──► AUDIO
AUDIO ──► CreateVideo (images, fps, audio, bit_depth=8)
IMAGE ────────────────────────────────────────────────► CreateVideo
CreateVideo output ──► SaveVideo ──► .mp4
Three mistakes that took hours to debug:
Mistake 1: Wrong output index. H3 nodes emit CONDITIONING at index 0 and LATENT at index 1. I connected to [node_id, 0] first, which gave received_type(CONDITIONING) mismatch input_type(LATENT).
Mistake 2: CLIPLoader missing the type parameter. Standard SDXL CLIPLoader nodes do not require a type field. But the H3 model uses qwen3vl_32b_minimax_h3_nvfp4_awq, which requires type: "minimax". Without it: required_input_missing: type.
Mistake 3: CreateVideo bit_depth is an INT. Passed the string "auto" initially. Error: invalid literal for int() with base 10: 'auto'. Correct values are 8 or 10.
Three Modes Tested
T2V — Text to Video
python run_h3.py \
--mode t2v \
--prompt "A sleek red sports car races through a neon-lit night city. Rain on the asphalt. Cinematic slow motion. Camera follows from behind." \
--seconds 5 \
--aspect 16:9 \
--mp 0.4 \
--seed 12345
Output: MiniMax_H3_00010_.mp4, 1.2MB, 864×480, 124 frames (~5 seconds).
I2V — Image to Video
python run_h3.py \
--mode i2v \
--first-frame "C:\path\to\character.png" \
--prompt "The character walks confidently toward the camera. Cinematic. Audio: footsteps, city ambience." \
--seconds 5 \
--aspect 16:9 \
--seed 42
Adding --last-frame enables first-last frame interpolation (FL2VA) — the model generates transitions between two keyframes.
R2V — Reference to Video
python run_h3.py \
--mode r2v \
--ref-image "C:\path\to\char_ref.png" \
--ref-image "C:\path\to\style_ref.png" \
--prompt "The character walks confidently toward the camera. Cinematic." \
--seconds 5
Supports up to 9 reference images, 3 reference videos, and 3 reference audio clips. The ref_image_size parameter controls reference scaling: "match" scales to the output resolution (preserves aspect ratio); "max" uses 2048px short edge for maximum identity fidelity (significantly slower).
Resolution and Duration
H3 uses fixed 24fps and a frame grid aligned to 17k+5 (k = 0, 1, 2...).
| Duration | Frames | Note | |----------|--------|------| | 5s | 124 | closest grid point | | 10s | 175 | | | 15s | 192 | | | 20s | 209 | |
Pass --seconds and the script converts to frame count. Use --length 124 to override directly.
Resolution parameters:
| megapixels | 16:9 output | 9:16 output | |------------|-------------|-------------| | 0.2 (preview) | 864×480 | 480×864 | | 0.98 (native) | 1344×768 | 768×1344 | | 2.0 (Full HD) | 1920×1088 | 1088×1920 |
H3 caps the short edge at 768px — anything larger gets auto-scaled.
Results
RTX 5080, single T2V 5-second generation: approximately 2-3 minutes depending on scene complexity.
On quality: H3's strengths are camera motion and scene consistency. You can tell it's AI-generated if you look closely, but with accurate text prompts the output is directly usable for concept presentations, material references, and early creative validation stages.




