MiniMax H3 Image-to-Video Sampler
Real frame anchoring, not prompt roulette
- model
- vae
- positive
- negative
- start_image
- end_image
- video_latent
- joint_audio
If you're coming from the Wan/Hunyuan era you already know the drill: image-to-video beats text-to-video for consistency, because anchoring the first frame to a known image solves most of the "this clip doesn't look like anything I described" problem before it starts. MiniMaxH3ImageToVideoSampler is that move for MiniMax H3 - and it does something the T2V sampler can't: it actually encodes your reference image through the model's VAE and splices it into the latent before sampling, so the first frame is genuinely yours, not a hope.
This is the node to reach for when you have a character, a product shot, or a still you want to bring to life. It's also the one with the extra input, so let's go through the mechanism carefully.
How it works. It takes your start_image, resizes it to the target resolution (bilinear), encodes it through the VAE you supply, and writes it into the first temporal slot of an empty latent - scaled by image_strength. The rest of the latent is noise, and the sampler denoises toward a video that starts from that locked-in frame. The interesting part is the optional end_image input: if you give it one, that gets encoded and spliced into the last temporal slot too, which turns the clip into a first-frame-to-last-frame animation. That's the "interpolation-style" I2V the README talks about, and it's a genuinely useful trick for zooms, transitions, or any shot where you know both endpoints.
image_strength is your main creative dial here (0–1, default 1). At 1, the first frame is fully baked in - the video respects it hard. Dial it down and the anchor loosens: more freedom, more drift from the reference, sometimes more motion. There's no right answer; low values are how you get a still to "move away" from itself.
The inputs that matter:
start_image(required) andend_image(optional) - the bookends.vae- you must wire in the VAE that came with your H3 checkpoint. This is a required input, unlike the T2V sampler, because the frame has to be encoded.image_strength(0–1) - anchor tightness.num_frames(9–257, step 8, default 65) - again, 4× temporal compression, so 65 frames ≈ 2.7 s at 24 fps.width/height,steps(30),cfg(6),sampler_name,scheduler,seed,generate_audio- the standard sampler stack.
Outputs. video_latent (LATENT) into a VAE Decode for your frames; joint_audio (AUDIO) into MiniMaxH3VideoExport if your checkpoint has the audio head and you want a soundtrack. Same wiring as the T2V node, which is the nice thing about this pack - all the samplers speak the same two outputs.
Install. Identical to the rest of the pack - ComfyUI Manager (search "Minimax-H3-Video-Music-Nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/Minimax-H3-Video-Music-Nodes
then restart. Deps are just torch, torchaudio, numpy, Pillow.
Where people get burned. Three spots. First, use the H3 VAE - the whole point is that the reference frame enters the same latent space the sampler works in, so a mismatched VAE (say, an SDXL one lying around) will smear your image into noise. Second, the license again: H3's Community License excludes the US, EU, UK, and South Korea from running the local weights, and there's no consumer-VRAM floor yet for the ~42.5GB checkpoint - the pack can't fix either. Third, image_strength at 1 with a wildly different end_image can fight the sampler; if the last frame looks like a jump-cut, lower the strength or resize the end frame to match your subject. Oh, and the audio caveat from the T2V node applies here too - decode_joint_audio is a scaffolded integration point, so if your build lacks it you'll get a silent AUDIO output rather than an error. Verify it once, then forget it.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| vae | VAE | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| start_image | IMAGE | — | |
| width | INT | 84864–2048 | — |
| height | INT | 48064–2048 | — |
| num_frames | INT | 659–257 | — |
| image_strength | FLOAT | 1.000–1 | — |
| steps | INT | 301–150 | — |
| cfg | FLOAT | 6.00–30 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| seed | INT | 00–18446744073709550000 | — |
| generate_audio | BOOLEAN | true | — |
| end_imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_latent | LATENT | — |
| joint_audio | AUDIO | — |