Nodes/ComfyUi-MpiNodes/Mpi H3 Image To Video
ComfyUI Node

Mpi H3 Image To Video

One MiniMax H3 conditioning node for every mode — t2v, first-frame, last-frame, or both

By MadPonyInteractive·Created 11 months ago·Updated a day ago· 3
Mpi H3 Image To Video
  • clip
  • vae
  • first_frame
  • last_frame
  • positive
  • latent
prompt
width1344
height768
length124

If you've loaded any MiniMax H3 workflow into a recent ComfyUI, you know the shape of it: before the sampler sits an image-to-video conditioning node that takes your clip, your VAE, a prompt and - optionally - a first or last frame, and hands the sampler a positive conditioning and a latent. H3 is the 33B omni-modal video model that landed with day-zero ComfyUI support (in 0.30.0) and does something most local video models can't: it generates a soundtrack with the picture, one joint AV latent.

Core ComfyUI ships a node for that job, MiniMaxH3ImageToVideo. MpiH3ImageToVideo, from the MadPonyInteractive/ComfyUi-MpiNodes pack ("ComfyUi-MpiNodes"), is a wrapper around that core node that fixes two genuine annoyances - which is a nicer place to be than a from-scratch reimplementation, because the tensor math stays ComfyUI's own and can't drift from it.

Why you'd reach for this one

It tolerates empty frames. Core's node skips a keyframe that arrives as None, but a graph can't push None down a connected link. So covering all four modes - text-to-video, first-frame i2v, last-frame-only, and first+last - meant keeping four copies of the node behind a lattice of boolean switches. That's what a host app had to compile, and what this node kills: "empty" means nothing connected or an Mpi loader with block_if_empty off (which emits a 1×1 image). A genuinely black frame reports its real size and passes through untouched, so you don't lose legitimately black keyframes.

It cover-crops both frames to the canvas. Core is asymmetric about this: it stretches first_frame (crop disabled) while it cover-crops last_frame. Feed an off-aspect source and the first frame comes back squashed, and the two keyframes disagree with each other. This node crops both before delegating. Crop, never pad - letterbox bars baked into frame 0 get animated as scenery.

There's a second payoff that matters if you do H3 latent upscaling: because the keyframe latent is encoded at the first stage's dimensions, a second conditioning at upscaled dimensions is what a refine pass needs - an upscaled latent otherwise raises a shape mismatch inside SamplerCustomAdvanced.

The inputs that matter

  • clip, vae - from your H3 checkpoint loader and VAE loader, same as any core setup.
  • prompt - your positive text.
  • width / height - canvas size, default 1344×768, stepped to multiples of 32.
  • length - frame count at 24 fps. Default 124 (about 5 s); the trained range is roughly 124–362 frames. Feed this from the pack's MpiH3Length node - H3 only generates frame counts where n % 17 == 5, so a "clean" number like 120 isn't reachable and whole seconds mostly aren't either.
  • first_frame / last_frame - optional IMAGE inputs, exactly as described above.

The two outputs are positive (CONDITIONING) and latent (LATENT). Wire positive into your sampler's positive socket and latent into its latent input; decode the result with the pack's H3 decode/save side (MpiH3DecodeAV, or a VAE decode) to get your clip plus its soundtrack.

Install

Same as every node in this pack. In ComfyUI Manager, search ComfyUi-MpiNodes, install, restart. Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/MadPonyInteractive/ComfyUi-MpiNodes

Then restart ComfyUI. No extra Python dependencies and no model download for the node itself - but you need ComfyUI 0.30.0 or newer for H3 support, and this node will tell you so with a clear error if it's missing. The H3 weights themselves are the real install: roughly 42.5 GB, and under the MiniMax H3 Community License they're not licensed for local use in the US, EU, UK or South Korea. Worth knowing before you build a workflow around it. Note the pack switched to AGPL-3.0 at version 1.2.7 (earlier releases remain MIT).

Troubleshooting

  • "MiniMax H3 nodes are missing - MpiH3ImageToVideo needs ComfyUI 0.30.0 or newer." The pack's import guard caught your ComfyUI being too old. Update ComfyUI; H3 only exists there.
  • Frame count feels wrong - you typed a raw number instead of feeding length from MpiH3Length. H3 snaps to its 17k+5 grid, so hand-picked "round" counts land you somewhere else entirely.
  • First frame looks squashed or the keyframes disagree - that's the core asymmetry this node fixes; if you're still seeing it, the image is probably already at canvas size and being passed through, or you're looking at a workflow wired straight to core's node instead.
  • Sampler raises a shape mismatch on an upscaled latent - you need the second conditioning at upscaled dimensions, which is exactly the case this node is built for.
CategoryMpiNodes/Utils

Inputs (8)

NameTypeDefaultDescription
clipCLIP
vaeVAE
promptSTRING
widthINT134432–16384
heightINT76832–16384
lengthINT1245–3600Frame count at 24 fps (124 = ~5 s, trained range ~124-362). Feed it from MpiH3Length.
first_frameoptIMAGEGeometry anchor at frame 0. Leave unconnected, or feed a loader with block_if_empty OFF, to skip it.
last_frameoptIMAGEFollower at the final frame. Leave unconnected, or feed a loader with block_if_empty OFF, to skip it.

Outputs (2)

NameTypeDescription
positiveCONDITIONING
latentLATENT