MiniMax H3 Extender
Chain MiniMax H3 clips into one long video without the seams
- model
- clip
- vae
- audio_vae
- ref_audio
- ref_audio_1
- ref_audio_2
- ref_audio_3
- ref_video_1
- ref_video_audio_1
- ref_video_2
- ref_video_audio_2
- ref_video_3
- ref_video_audio_3
- ref_pack
- prompt_pack
- cache
- clip_count
- validated_count
- status
- cache_size_mb
- build
MiniMax H3 is fantastic and it's also short. A single clip tops out around 15 seconds, and the moment you string several into a minute-long scene, the seams show: the next clip has no memory of the last, colors jump at the cut, and the character slowly stops being the same person. The MiniMax H3 Extender closes that gap - it takes multi-clip generation, motion context, image/video/audio references, disk caching and final export and folds them into a single node, the flagship of the tritant/ComfyUI_MiniMax_H3_Extender pack.
What it actually does
Think of it as a small editing suite wrapped around one H3 sampler. You define a sequence of clips - each with its own prompt, seed and duration - and the Extender generates them one at a time, feeding each new clip the tail of the previous one as Motion Context. The result is a continuous chain instead of four disconnected takes.
Two run modes cover the two ways people actually work:
- clip_by_clip (default): you generate, preview, retry, then tick Validated on the clip. A validated clip is frozen in the disk cache and becomes the motion-context source for the next one - you build a 60-second sequence one 10-second chunk at a time without regenerating an approved clip.
- full_batch: run the whole chain in one pass and come back later.
The validation system is the part to understand first, because it's where people get confused. Validation always forms a continuous chain from clip 1. Change a prompt, seed, duration, reference or sampling setting and every clip after the affected one is automatically unvalidated - that's not a bug, it's the node refusing to bake seams in from stale context. The intended rhythm is Generate → Preview → Retry if needed → Validate → Continue.
The inputs that matter
You always wire model, clip and vae - and audio_vae if you want sound, which you do, because H3 generates audio jointly with the picture. After that, the handful worth touching:
- context_length (
5/22/39/56): how much of the previous clip feeds the next one as motion context. 22 is the default and a sane starting point; longer context means tighter continuity but more VRAM and slower runs. - run_mode: the clip_by_clip / full_batch switch above.
- resolution_mode:
auto_from_refsizes the canvas from your first image reference;manualuses the width/height widgets, which also serve as the auto fallback when no reference is loaded. - clips_json: a JSON card per clip holding prompt, seed, seed mode, duration and validated flag. The UI edits this for you; don't hand-edit unless you know what you're doing.
References are where this pack earns its keep. Up to 9 image references live inside the node (no Load Image spaghetti), addressed in prompts as <Picture N>. On top of that you get up to 3 reference videos (<Video N>), each with an optional ref_video_fps_N input - H3 expects exactly 24 fps, and if your source is 23.976 or 30 fps, wiring the real FPS lets the node resample to 24 instead of silently dropping the end of the video. Standalone audio (ref_audio_1 through ref_audio_3) and per-video soundtracks (ref_video_audio_N) round out the lip-sync and motion-transfer side.
How to install
Via ComfyUI Manager - search MiniMax H3 Extender - or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/tritant/ComfyUI_MiniMax_H3_Extender.git
Restart ComfyUI. The only Python dependency is imageio-ffmpeg (a bundled ffmpeg used for export), so there's no dependency hell to fight. What is heavy is the model: MiniMax H3 runs to roughly 42.5 GB of weights, so budget your VRAM accordingly - and check the license before you start. The MiniMax H3 Community License excludes the US, EU, UK and South Korea from its applicable territory: a hard stop for local weights in those regions, not a soft suggestion.
Where people get burned
- References drift across clips. The README's fix is to put a
subject_definitionsblock at the start of every clip prompt, spelling out that<Picture 1>defines<Subject 1>and so on. It's wordy, but it's the difference between a consistent character and a lookalike who wandered in from another scene. - The reference video ends early. Almost always an FPS mismatch - connect the source FPS to
ref_video_fps_N. - Everything unvalidated after one change. Expected behavior, not data loss; revalidate and it rolls forward again.
The node outputs an H3_MOTION_DISK_CACHE plus clip_count, validated_count, status, cache_size_mb and build. That cache plugs straight into the pack's Final Decode / Preview node, which turns it into a finished MP4 - the natural next stop.
Inputs (33)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| run_mode | COMBO | clip_by_clip | 2 options: clip_by_clip, full_batch |
| width | INT | 89632–4096 | Manual resolution width, also used as Auto fallback when no internal image reference is loaded. |
| height | INT | 57632–4096 | Manual resolution height, also used as Auto fallback when no internal image reference is loaded. |
| ref_image_size | COMBO | match | 2 options: match, max |
| steps | INT | 41–10000 | — |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | simple | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| denoise | FLOAT | 1.000.01–1 | — |
| context_length | COMBO | 22 | 4 options: 22, 5, 39, 56 |
| audio_context_length | INT | 00–240 | — |
| clips_json | STRING | {"version":1,"clips":[{"id":"clip_1","name":"","prompt":"","seed":8682719502030360,"seed_mode":"randomize","duration":10.0,"validated":false,"color_adjustment":{"saturation":100.0,"contrast":100.0,"brightness":100.0}}]} | — |
| resolution_mode | COMBO | auto_from_ref | Auto uses internal Ref 1 as the aspect-ratio guide; with no internal image references it falls back to width/height. |
| megapixels | FLOAT | 0.400.01–16 | Target total pixels for Auto resolution. Auto and Manual canvases use the MiniMax H3 32-pixel grid; Auto snaps downward without exceeding the requested pixel budget. |
| refs_json | STRING | {"version":2,"refs":[null,null,null,null,null,null,null,null,null]} | — |
| audio_vaeopt | VAE | — | |
| ref_audioopt | AUDIO | Legacy alias of ref_audio_1. Kept for older workflows; new workflows should prefer ref_audio_1..ref_audio_3. | |
| ref_audio_1opt | AUDIO | Optional MiniMax H3 standalone reference audio 1. Up to three standalone audio references are supported. | |
| ref_audio_2opt | AUDIO | Optional MiniMax H3 standalone reference audio 2. | |
| ref_audio_3opt | AUDIO | Optional MiniMax H3 standalone reference audio 3. | |
| ref_video_1opt | IMAGE | Optional MiniMax H3 reference video 1 as an IMAGE frame batch. H3 expects 24 fps; use ref_video_fps_1 when the source batch came from another frame rate. Use <Video 1> in prompts. | |
| ref_video_fps_1opt | FLOAT | Optional source FPS from Get Video Components for ref_video_1. When disconnected the Extender assumes the IMAGE batch is already 24 fps. | |
| ref_video_audio_1opt | AUDIO | Optional soundtrack of ref_video_1. | |
| ref_video_2opt | IMAGE | Optional MiniMax H3 reference video 2 as an IMAGE frame batch. H3 expects 24 fps; use ref_video_fps_2 when the source batch came from another frame rate. Use <Video 2> in prompts. | |
| ref_video_fps_2opt | FLOAT | Optional source FPS from Get Video Components for ref_video_2. When disconnected the Extender assumes the IMAGE batch is already 24 fps. | |
| ref_video_audio_2opt | AUDIO | Optional soundtrack of ref_video_2. | |
| ref_video_3opt | IMAGE | Optional MiniMax H3 reference video 3 as an IMAGE frame batch. H3 expects 24 fps; use ref_video_fps_3 when the source batch came from another frame rate. Use <Video 3> in prompts. | |
| ref_video_fps_3opt | FLOAT | Optional source FPS from Get Video Components for ref_video_3. When disconnected the Extender assumes the IMAGE batch is already 24 fps. | |
| ref_video_audio_3opt | AUDIO | Optional soundtrack of ref_video_3. | |
| ref_packopt | H3_REF_PACK | Optional external image-reference pack. Connected Ref N slots are imported into the matching internal Ref N slots on Queue; empty slots leave internal references untouched. | |
| prompt_packopt | H3_PROMPT_PACK | Optional external prompt pack. New/changed packs are imported into the normal clip textareas and synchronize the clip count. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| cache | H3_MOTION_DISK_CACHE | — |
| clip_count | INT | — |
| validated_count | INT | — |
| status | STRING | — |
| cache_size_mb | FLOAT | — |
| build | STRING | — |