MiniMax H3 Shot (Legacy)
Build H3's shot timeline without hand-typing timestamps
- previous_shots
- shot_plan
- shot_plan_preview
Here's a sentence H3 understands: [Shot 2] At 00:02.500, close-up of the woman reading the note. Here's what happens when you type [Shot 2] at 2.5 sec... into a conditioning node: the model shrugs. H3's prompt format wants exact, millisecond-level cut times and strictly increasing shot order, and hand-writing that across five shots is exactly where people introduce typos that silently derail a render.
The Shot node turns one shot into one node: you set a float time range and describe what happens in it, then chain shots in playback order. The pack validates the chain - no gaps, no overlaps, no reversed ranges - and generates the [Shot N] At MM:SS.mmm markers for you.
How it works
Each Shot node holds four things you set and one chain input:
- start_time - Shot 1 must be 0.000. Every later shot must start exactly where the previous connected shot ended; that boundary becomes its H3 cut timestamp.
- end_time - greater than start, up to 15 s. The final node's end time becomes the requested duration.
- description - what's visible and what changes during this range only: composition, subject action, setting, lighting, ending state.
- camera_direction - optional per-shot camera behavior. State motion type, speed/amplitude, or "static camera." It overrides no other shot.
- transition - how this shot begins when it follows another: Direct cut (the sane default), cross-dissolve, fade, or wipe. Shot 1 ignores it.
previous_shots takes the shot_plan from the preceding Shot node; leave it disconnected only for Shot 1. The chain builds left to right and the validation prevents gaps, overlaps, or reversed ranges - the "shot must start where the last one ended" rule is enforced, which is the thing people most often botch by hand.
Outputs
shot_plan connects to the next Shot's previous_shots, then - at the end of the chain - to Target Timing for a reference-context workflow, or directly to Prompt Guide's shot_plan input in the simple legacy path. shot_plan_preview is a readable list of the accumulated ranges and descriptions; wire it to a text viewer and check the whole chain before you queue.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-MiniMax-H3-Guide
Restart ComfyUI; this lands under MiniMax H3/Prompting. No Python dependencies. You just need a ComfyUI build with native MiniMax H3 support (the H3 Image to Video / Reference to Video nodes and the MiniMax tokenizer).
Where people get burned
Two habits cause most of the pain. First, treating the shot description like a prompt to the whole model - it's not; it only covers this time range, so the establishing details of Shot 1 should live in Shot 1. Second, forgetting that H3 rounds the whole timeline up to its native 17k+5 frame grid at 24 FPS. Your final shot says 6.0 s; the delivered clip is 158 frames, 6.58 s. That's fine - just don't schedule your last cut at 6.5 s expecting the video to end there. Keep every cut comfortably inside the requested duration and the extension is harmless.
One honest caveat: this is the legacy Shot node. The Plan v2 pipeline has its own Shot nodes with attachable keyframes and motion - if you're starting fresh, that's the newer route. But for the classic Guide workflow, this chain is still the cleanest way to a multi-shot timeline that H3 actually reads.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| start_time | FLOAT | 0.0000–15 | Start time in seconds. Shot 1 must start at 0.000. Every later shot must start exactly when the previous connected shot ends; this becomes its H3 cut timestamp. |
| end_time | FLOAT | 6.0000.001–15 | End time in seconds; it must be greater than start_time. The final node's end_time becomes the requested duration when connected to Target Timing or directly to Prompt Guide; the resolved timeline may extend slightly to native H3's frame grid. |
| description | STRING | Describe what is visible and what changes during only this time range: composition, subject action, setting, lighting, and ending state. | |
| camera_direction | STRING | Optional camera behavior for this shot. State motion type, meaningful speed/amplitude, or 'static camera'. It overrides no other shot. | |
| transition | COMBO | Direct cut | How this shot begins when it follows another shot. Shot 1 ignores this setting. A direct cut is the clearest default; use dissolves/fades/wipes only when intended. |
| previous_shotsopt | MINIMAX_H3_SHOT_PLAN | Connect shot_plan from the preceding MiniMax H3 Shot. Leave disconnected only for Shot 1. Chains are validated to prevent gaps, overlaps, or reversed ranges. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| shot_plan | MINIMAX_H3_SHOT_PLAN | Connect to the next MiniMax H3 Shot.previous_shots input. For a role-aware reference workflow, connect the final shot to Target Timing.shot_plan; connect directly to Prompt Guide.shot_plan only in the simple legacy timing path. |
| shot_plan_preview | STRING | Readable list of the accumulated float ranges and descriptions. Connect to a text viewer to inspect the complete chain. |