Zoey - MiniMax H3 长视频 (循环·末帧续接)
MiniMax H3 Stops at 15 Seconds — This Node Chains It Into a Long Take
- model
- vae
- audio_vae
- clip
- first_frames
- first_audio
- negative
- ref_image_0
- ref_image_1
- ref_image_2
- ref_image_3
- ref_image_4
- ref_image_5
- ref_image_6
- ref_image_7
- ref_image_8
- ref_video_0
- ref_video_audio_0
- ref_video_1
- ref_video_audio_1
- ref_video_2
- ref_video_audio_2
- ref_audio_0
- ref_audio_1
- ref_audio_2
- 视频帧
- 音频
MiniMax H3 is a 33B omni-modal model that shoots 4–15 second clips at up to 2K/24fps with native stereo audio - audio generated jointly with the picture, not bolted on afterward. That ceiling gets in your way the moment you want a 60-second shot. ZoeyMiniMaxH3LongVideo is the pack author's answer: drive it N times, hand each new segment the previous segment's last frame, stitch the frames together at the end.
It's a companion node, not a standalone one. It only works alongside the same pack's ZoeyMiniMaxH3ReferenceToVideo (「Zoey - MiniMax H3 参考转视频 (@)」), the node that actually loads the DiT, the Qwen3-VL text encoder and the two VAEs.
How the chaining actually works
The trick is that it doesn't re-run the whole graph per segment. Wire the main node's model, vae, audio_vae, clip and settings outputs in, and it re-enters the main node's own generation routine in-process, once per segment - no reloading, no second copy of a 33B model in VRAM.
Segment 1 is already done - it's the first_frames you fed in from the main node. This node generates segments 2 through N. Before each pass it takes the previous segment's last frame and injects it as an extra reference image, then appends a continuity line to your prompt (keep the same character, scene, wardrobe and lighting).
Be clear-eyed about what that is: reference conditioning, not latent-level blending or keyframe alignment. It's the same class of trick as taking a last frame into an i2v node, and it inherits the same weakness - motion and identity drift across a chain, with color and detail degrading a little each hop. The long-video crowd complains about exactly this on Wan continuations. Two or three segments is fine. Ten is a science experiment.
The inputs that matter
segments (default 2, max 40) is the total shot count. prompt_0…prompt_38 are the prompts for segments 2 through 40 - the frontend shows and hides the boxes to match your segments value. Leave one blank and it reuses the previous segment's prompt, which gives you a lazy chained continuation.
Canvas size and per-segment length are derived from first_frames - height/width from the tensor shape, duration as frames / 24. You don't retype resolution or duration, and if your main node's first segment doesn't match what you want, fix it there first. Sampling parameters come in through the settings string (steps, cfg, sampler, scheduler, seed) straight from the main node; unwired, it falls back to 25 steps / cfg 4.0 / res_multistep / simple. The same seed is reused for every segment.
Beyond that it takes negative conditioning plus the full reference set - ref_image_0…ref_image_8, ref_video_0…ref_video_2 with their matching ref_video_audio_*, and ref_audio_0…ref_audio_2 - and forwards all of them into every segment, so a character reference survives the whole take instead of just the first shot.
Outputs
Two: 视频帧 (IMAGE) and 音频 (AUDIO). Frames are concatenated with torch.cat, so feed them to VHS VideoCombine or a core video saver to get a file - the node is an output node, but it doesn't write mp4s itself. Audio is only returned if every segment produced audio; if any segment came back silent, the whole output is None and you get a picture-only result. Set segments to 1 and it's a plain passthrough of the main node's output, which is a handy sanity check.
Install
ComfyUI Manager, search the pack (comfyui-ZoeyTool / ZoeyTool), or:
cd ComfyUI/custom_nodes
git clone https://github.com/liangzoey/comfyui-ZoeyTool.git
cd comfyui-ZoeyTool
pip install -r requirements.txt
Restart. The requirements install torch, Pillow, numpy, opencv-python-headless, requests, transformers, comfyui-extra-nodes and rembg - nothing exotic. PyAV is listed as optional in the README and genuinely isn't in requirements.txt, so if a batch-video node complains about av, that's why.
The H3 model files live in the normal ComfyUI folders: the DiT under diffusion_models, the Qwen3-VL CLIP under text_encoders, the video VAE and (for reference audio) the audio VAE.
Where people get burned
- The node may not exist in your menu at all. The pack imports
comfy_extras.nodes_minimax_h3in a try/except and only registers the H3 nodes if that succeeds. On a ComfyUI build without official H3 support you get no error - just an empty category. - Nothing gets saved for you. Wire the frames into a saver; the node emits a tensor and a waveform, not a file.
- Pinned seed, unchanged inputs, same output. Like the rest of this pack, the H3 nodes define no
IS_CHANGED, so ComfyUI's cache can hand you back the previous render without a warning. - The licence is geographic. The MiniMax H3 Community License excludes the US, EU, UK and South Korea - users there aren't licensed to run the local weights at all.
Inputs (66)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | 主节点「model」输出(复用已加载模型,不重复加载) | |
| vae | VAE | 主节点「vae」输出 | |
| audio_vae | VAE | 主节点「audio_vae」输出(无音频可为空) | |
| clip | CLIP | 主节点「clip」输出(post-LoRA,直接复用) | |
| settings | STRING | 主节点「设置」输出:steps/cfg/sampler_name/scheduler/seed,自动同步采样参数 | |
| segments | INT | 21–40 | 总段数:第1段用主节点首帧,此节点续接 2..N。 |
| first_framesopt | IMAGE | 主节点「视频帧」输出:第1段 + 末帧续接的种子 | |
| first_audioopt | AUDIO | 主节点「音频」输出(可选;无音频则输出纯视频) | |
| negativeopt | CONDITIONING | — | |
| ref_image_0opt | IMAGE | — | |
| ref_image_1opt | IMAGE | — | |
| ref_image_2opt | IMAGE | — | |
| ref_image_3opt | IMAGE | — | |
| ref_image_4opt | IMAGE | — | |
| ref_image_5opt | IMAGE | — | |
| ref_image_6opt | IMAGE | — | |
| ref_image_7opt | IMAGE | — | |
| ref_image_8opt | IMAGE | — | |
| ref_video_0opt | IMAGE | — | |
| ref_video_audio_0opt | AUDIO | — | |
| ref_video_1opt | IMAGE | — | |
| ref_video_audio_1opt | AUDIO | — | |
| ref_video_2opt | IMAGE | — | |
| ref_video_audio_2opt | AUDIO | — | |
| ref_audio_0opt | AUDIO | — | |
| ref_audio_1opt | AUDIO | — | |
| ref_audio_2opt | AUDIO | — | |
| prompt_0opt | STRING | 第 2 段提示词 | |
| prompt_1opt | STRING | 第 3 段提示词 | |
| prompt_2opt | STRING | 第 4 段提示词 | |
| prompt_3opt | STRING | 第 5 段提示词 | |
| prompt_4opt | STRING | 第 6 段提示词 | |
| prompt_5opt | STRING | 第 7 段提示词 | |
| prompt_6opt | STRING | 第 8 段提示词 | |
| prompt_7opt | STRING | 第 9 段提示词 | |
| prompt_8opt | STRING | 第 10 段提示词 | |
| prompt_9opt | STRING | 第 11 段提示词 | |
| prompt_10opt | STRING | 第 12 段提示词 | |
| prompt_11opt | STRING | 第 13 段提示词 | |
| prompt_12opt | STRING | 第 14 段提示词 | |
| prompt_13opt | STRING | 第 15 段提示词 | |
| prompt_14opt | STRING | 第 16 段提示词 | |
| prompt_15opt | STRING | 第 17 段提示词 | |
| prompt_16opt | STRING | 第 18 段提示词 | |
| prompt_17opt | STRING | 第 19 段提示词 | |
| prompt_18opt | STRING | 第 20 段提示词 | |
| prompt_19opt | STRING | 第 21 段提示词 | |
| prompt_20opt | STRING | 第 22 段提示词 | |
| prompt_21opt | STRING | 第 23 段提示词 | |
| prompt_22opt | STRING | 第 24 段提示词 | |
| prompt_23opt | STRING | 第 25 段提示词 | |
| prompt_24opt | STRING | 第 26 段提示词 | |
| prompt_25opt | STRING | 第 27 段提示词 | |
| prompt_26opt | STRING | 第 28 段提示词 | |
| prompt_27opt | STRING | 第 29 段提示词 | |
| prompt_28opt | STRING | 第 30 段提示词 | |
| prompt_29opt | STRING | 第 31 段提示词 | |
| prompt_30opt | STRING | 第 32 段提示词 | |
| prompt_31opt | STRING | 第 33 段提示词 | |
| prompt_32opt | STRING | 第 34 段提示词 | |
| prompt_33opt | STRING | 第 35 段提示词 | |
| prompt_34opt | STRING | 第 36 段提示词 | |
| prompt_35opt | STRING | 第 37 段提示词 | |
| prompt_36opt | STRING | 第 38 段提示词 | |
| prompt_37opt | STRING | 第 39 段提示词 | |
| prompt_38opt | STRING | 第 40 段提示词 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| 视频帧 | IMAGE | — |
| 音频 | AUDIO | — |