SimpleShot H3 - First/Last Frame to Video + Audio
MiniMax H3 with sound in one node — no sampler wiring, no missing-node hunts
- model
- clip
- vae
- audio_vae
- first_frame
- last_frame
- images
- audio
- info
You type a sentence, optionally drop in a first frame, a last frame, or both, and out comes a clip that has sound - footsteps, room tone, a voice, whatever the prompt asks for. No audio pass bolted on afterwards, no second model to align, no sampler to babysit. That's the whole pitch of SimpleShot H3 - First/Last Frame to Video + Audio, and it's why the pack calls itself "workflows that run the first time."
MiniMax H3 is the open-weight turn in video that people actually got excited about: a 33B omni-modal model that treats text, image, video and audio as one input context, producing 2–15 second clips at 24 fps with native stereo audio - the first serious open answer to Veo's audio advantage. The catch is that a text-to-video+audio ComfyUI graph is a small forest of nodes, and any one can be wired wrong. This node is the forest, collapsed into one block.
How it works
It's not some novel engine - the node is a thin wrapper around ComfyUI core's own MiniMaxH3ImageToVideo node. It builds your conditioning and an empty AV latent from the prompt and any frames you fed in, then samples with a Basic guider (no negative prompt) using res_multistep + simple, the exact pairing ComfyUI's own H3 template ships. The fun part is the latent: H3 renders picture and audio in one NestedTensor, so the video VAE decodes one element and the audio VAE the other. That's why there are two VAEs as inputs.
The pack's philosophy shows in what it doesn't expose - no sampler, scheduler, cfg, sigma shift or negative prompt, on the fair argument that those only break a working render here. Frame counts and canvases are menus rather than numbers because H3 has hard constraints: frames snap up to a 17k+5 grid, and a canvas that isn't a multiple of 32 fails deep inside the sampler. The menu only offers values that work.
The inputs that matter
- model / clip / vae / audio_vae - the four model links. Any loader works, so you can point
modelat a smaller community quant if the 21 GB checkpoint doesn't fit your card. The one trap: the video VAE is the larger file (minimax_h3_video_vae), easy to swap with the audio one by accident. - prompt - this is where H3 differs from everything before it. Describe the shot and the sound: voices, footsteps, room tone. The model listens to audio cues because it renders picture and audio together.
- duration - start on the 2 s quick test; it exists to prove your install before you burn a long render.
- resolution - the "match my image" entries take the shape from your first frame and only the size from the menu, so nothing stretches or crops.
fastis ~40% of the pixels,draft~20%. - steps - the one real cost/quality dial; 14 is the default, and the difference from 20 is usually hard to see.
- first_frame / last_frame - and here's the gotcha the pack exists to surface: the first frame is stretched to the canvas, the last frame is centre-cropped. A wrong-shape image in the wrong slot distorts or loses its edges, invisibly, unless you know.
Outputs are images, audio, and info. Wire images into Create Video then Save Video; audio goes to whatever saves sound; and info - a text report of frame count, canvas, checkpoint and how each image was fitted - into a Preview Any node, so you can see what actually ran.
Installing it
Open Manager → Custom Nodes Manager, search SimpleShot, install, restart. Or, if that's your habit:
cd ComfyUI/custom_nodes
git clone https://github.com/manzakin/ComfyUI-SimpleShot
That's genuinely it - the pack has no dependencies of its own, no pip install, no second pack. The ~42 GB of H3 model files get fetched by ComfyUI itself the first time, and it asks before placing each one.
Where people get burned
The wrong checkpoint family. H3 ships as fl2va (renders between frames) and ref2va (renders from reference photos). They load through the same loader, and a ref2va file here is a wasted render - so the node reads the filename off the graph and hard-stops with a message saying exactly which file to pick.
The licence. Before you clear disk space, know this: the MiniMax H3 Community License excludes the US, EU, UK and South Korea from its territory. The geofence is real, and it bites local video harder than it ever did for images.
The hardware. 21 GB of weights is the honest floor - launch-day threads were full of people with 3060s asking if it would be minutes or geological timescales. The "match my image - draft" resolution and 2 s duration exist precisely so you can find out cheaply.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The H3 fl2va checkpoint, from a Load Diffusion Model node. Any loader works — swap in a smaller community quant if 21 GB of weights is too much for your card. | |
| clip | CLIP | The H3 text encoder, from a Load CLIP node. | |
| vae | VAE | The VIDEO vae (minimax_h3_video_vae). Easy to swap with the audio one by accident — this is the larger file. | |
| audio_vae | VAE | The AUDIO vae (minimax_h3_audio_vae), the small one. | |
| prompt | STRING | Describe the shot: subject, what it does, the camera, the light, and the sound you want. This model listens to sound cues in the prompt — voices, footsteps, room tone — because it renders picture and audio together. | |
| duration | COMBO | 5 s (124 frames) | Clip length at 24 fps. Start on the 2 s quick test to prove your install before spending a long render. |
| resolution | COMBO | match my image - full quality (~1.0 MP) | The 'match my image' entries take the SHAPE from your first frame and only the SIZE from the menu, so your picture is never stretched or cropped — use those unless you have a reason not to. Smaller is much faster: 'fast' is about 40% of the pixels of full quality and 'draft' about 20%. The fixed sizes are for text-only clips, where there is no image to match. |
| steps | INT | 141–100 | The one real cost/quality dial, and time scales almost linearly with it. 14 is a good balance; the model's own template uses 20, and this sampler converges early enough that the difference is often hard to see. Try 8 on a draft canvas when you are only checking an idea. |
| seed | INT | 00–18446744073709550000 | Changes the take. Left on randomize you get a fresh one each time you press Run; set it to fixed to keep a take you liked while you edit the prompt. |
| first_frameopt | IMAGE | Optional. The clip starts here. This is the geometry anchor: it is STRETCHED to the canvas, so give it the same shape as the resolution you picked or it distorts. | |
| last_frameopt | IMAGE | Optional. The clip lands here. This one is CENTRE-CROPPED instead of stretched, so a different shape loses its edges rather than squashing. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | The frames. Wire into Create Video, then Save Video. |
| audio | AUDIO | The generated soundtrack, already in step with the picture. |
| info | STRING | What actually ran: frame count, canvas, checkpoint, how the frames were fitted. Wire it into a Preview Any node if you want to read it on the canvas. |