H3 Shot (seconds, presets, reference) - SatoDive
Type in seconds, get frames the model will actually accept
- clip
- vae
- ref_image_1
- ref_image_2
- ref_image_3
- first_frame
- last_frame
- positive
- latent
- frames
- fps
- seconds
- width
- height
- prompt_used
The stock MiniMax H3 node wants a frame count, and the number it accepts is almost never the number you want. Ask for "5 seconds" and the honest answer is 124 frames, not 120. H3 Shot (display name "H3 Shot (seconds, presets, reference) - SatoDive") does that arithmetic, picks a sane canvas, and quietly writes the backdrop into your prompt so the clip you get back can actually be keyed later.
H3 itself is MiniMax's 33B omni-modal video model, opened in August 2026 - 24 fps, native stereo audio rather than a bolted-on second pass.
What it really does
It is a thin, well-behaved wrapper: shot_node.py calls ComfyUI's own MiniMaxH3ImageToVideo.execute for text, image-to-video or first/last-frame work, or MiniMaxH3ReferenceToVideo.execute when reference images are plugged in. The conditioning and latent you get back are the native nodes' own objects.
Three things it adds.
Seconds to frames, on the grid. The count snaps up to H3's 17k+5 grid - 5, 22, 39 … 124, 141 - because the model only accepts those. seconds is clamped to 0.2–150.
Resolution presets, 13 of them, all multiples of 32 and inside the area the model was trained up to (768×1344), from 16:9 Fast 864×480 and Balanced 960×544 up to 1344×768, 21:9 Cinema, and the portrait and vertical pairs. width and height are only read with resolution set to Custom.
Prompt assembly. shot.py builds the prompt in blocks: a reference lead-in, your prompt, the camera sentence, the backdrop paragraph, then an Audio: line. The backdrop text is the one that matters - a verbose "isolated on a perfectly flat, evenly lit chroma-key green backdrop (#00B140)… no floor, no horizon, no set, no cast shadows, no gradient, no vignette" instruction. It reads like prompt bloat; it is the difference between a green screen and a kitchen with a green wall behind the actor. The same preset names live in the H3 Transparent Video node, so the two agree on what "Green screen" means.
The inputs you'll actually touch
seconds and resolution are the two you set every time; backdrop is the one to keep in sync with the keyer downstream (five options, including "None (do not add backdrop text)").
Then pick a lane: either ref_image_1, _2, _3 - each documented as <Picture 1> and friends, referenced that way in your prompt - with subject naming the thing to lift out of them, or first_frame plus optional last_frame. Wire both and the node raises rather than guessing. ref_image_size is the speed/identity tradeoff: match scales the reference to the generation size and is fast, max goes to a 2048 px short edge and can be several times slower.
Outputs, and where they wire
positive goes to a Guider and latent to the sampler's latents input; that is the whole graph. The rest is convenience: frames, fps, seconds, width, height as plain numbers for filenames or the video node's fps, plus prompt_used - the assembled prompt as a string, worth previewing once to see what the backdrop and camera blocks added.
The pack's workflow runs UNETLoader → ModelSamplingMiniMaxH3 (6 / 3) → LoraLoaderModelOnly (turbo at 0.8), CLIPLoader (type minimax), two VAELoaders, then H3 Shot → KSamplerSelect (res_multistep) → BasicScheduler (simple, 7 steps) → RandomNoise → BasicGuider → SamplerCustomAdvanced → VAEDecode + VAEDecodeAudio.
Installing
ComfyUI Manager, search the pack title "MiniMax H3 Transparent Video - SatoDive", or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/SatoDive/Minimax-H3-Transparent-Video
Restart. Nothing to pip install beyond torch, numpy, Pillow and av, which your ComfyUI already has. The one hard requirement is a ComfyUI recent enough to include the native H3 nodes.
Where it bites
The frame count surprises people. Ask for 5.0 seconds and you get 124 frames - 5.16 s at 24 fps - and two nearby values can snap to the same grid point, so nudging seconds sometimes does nothing. Budget VRAM on the frame count, not the number you typed.
No turbo LoRA? Bypass LoraLoaderModelOnly and run ~20 steps instead of 7, and keep CFG at 1 - H3 is the guidance-distilled kind of 2026 model where CFG 7 is the classic fried-output mistake.
The model has to actually produce your backdrop, and the README is honest about where that fails: floors, horizons and props the prompt didn't forbid get keyed along with your subject. A subject wearing the backdrop colour punches holes in the matte - switch to Blue, or use the keyer's keep_mask. Fire, sparks and orange glow want Black, not green. Dark-on-white mode treats dark grey as partly transparent by design, which is right for ink and smoke and wrong for a solid grey object.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| vae | VAE | — | |
| prompt | STRING | What happens in the shot. Refer to reference images as <Picture 1>, <Picture 2>... | |
| resolution | COMBO | 16:9 Fast - 864x480 | Size preset. Pick 'Custom' to use width / height below. |
| width | INT | 96032–4096 | Used only when resolution is Custom. |
| height | INT | 64032–4096 | Used only when resolution is Custom. |
| seconds | FLOAT | 5.00.2–150 | Length in seconds at 24 fps. Snaps up to the model's frame grid: 5 s = 124 frames. Trained range is about 5-15 s. |
| backdrop | COMBO | Green screen | Adds the matching 'isolated on a flat backdrop' text to the prompt. Use the same backdrop in the H3 Transparent Video node. |
| camera | COMBO | Locked-off static (best for keying) | 7 options: Locked-off static (best for keying), Slow push-in, Slow pull-out, Slow orbit, Handheld, Tracking shot, +1 |
| subject | STRING | With a reference image: the object to take from it, e.g. 'the red sports car'. Everything else in the reference is ignored. | |
| audio_prompt | STRING | Optional sound description, added as an 'Audio:' line. | |
| ref_image_size | COMBO | match | match = reference scaled to the generation size (fast). max = 2048 px short edge (best identity, can be several times slower). |
| ref_image_1opt | IMAGE | Reference image (<Picture 1>). | |
| ref_image_2opt | IMAGE | Reference image (<Picture 2>). | |
| ref_image_3opt | IMAGE | Reference image (<Picture 3>). | |
| first_frameopt | IMAGE | Start the video from this image. Cannot be combined with reference images. | |
| last_frameopt | IMAGE | End the video on this image. Cannot be combined with reference images. |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| latent | LATENT | — |
| frames | INT | — |
| fps | INT | — |
| seconds | FLOAT | — |
| width | INT | — |
| height | INT | — |
| prompt_used | STRING | — |