MiniMaxH3Director
Turn a model that does one clip into a node that edits a scene
- model
- video_vae
- audio_vae
- clip
- bd_grp_sample
- i2v_groups
- r2v_groups
- refine
- bd_grp_advanced
- bd_grp_perf
- sigmas
- images
- audio
- fps
- frame_count
- source_images
- report
- images_pre_refine
MiniMax H3 was the release that finally gave open weights what Veo had in closed ones: video and stereo audio generated together in one pass, no separate "add a soundtrack" step. The catch for ComfyUI users is that the official H3 nodes are single-shot. One prompt, one clip, done. That's fine for a clip. It's wrong for a scene.
MiniMaxH3Director (also registered under the legacy id ComfyMiniMaxH3Director) is what you reach for when one clip isn't the job: a timeline editor packed into one node. You split, trim, and reorder segments, type a prompt per segment, queue - and it handles conditioning, sampling, AV decode and export for every segment in order, handing you one finished video with sound. No API, no key; it just drives the official H3 pipeline harder.
How it works
Each segment runs through ComfyUI's official MiniMaxH3ImageToVideo or MiniMaxH3ReferenceToVideo conditioning (tokenization happens internally, so you don't wire up text encoding yourself), then a single-stage KSampler at CFG 1.0 with MiniMaxH3SigmaShift applied, then an AV-latent decode that splits picture and stereo audio apart. The task_type menu decides which official node runs per segment: t2v, i2v, and fl2v (first-last frame) go down the fl2va path; r2v, v2v, and rv2v go down the reference path and need the audio_vae. There's a "mixed" mode too, if you want different segment types in one timeline.
The interesting trick is segment continuity. With inter-segment guidance on in the UI (default off), the tail motion and generated audio of one segment get pinned into the next and cropped off after sampling - which is what stops a multi-segment video from feeling like five videos glued together. Credit for the approach goes to ComfyUI-H3-Motion-Context.
Wiring it up
The pack needs ComfyUI 0.30.0+ - it calls ComfyUI's official MiniMax H3 nodes (PRs #15224/#15228) and refuses to load without them. Install:
cd ComfyUI/custom_nodes
git clone https://github.com/AIMixer/ComfyUI_MiniMaxH3_Director.git
pip install -r ComfyUI_MiniMaxH3_Director/requirements.txt
Restart, or use ComfyUI Manager → Install via Git URL with the same URL. requirements.txt adds opencv-python-headless, imageio-ffmpeg, and scenedetect for the v2v/rv2v source-video features and smart shot-splitting.
Models aren't bundled - that's the heavy part. You need the H3 video VAE, the H3 audio VAE (fp32), a Qwen3-VL CLIP loaded with CLIPLoader type = minimax, and two UNETs: fl2va for t2v/i2v/fl2v, ref2va for r2v/v2v/rv2v. The README points at Comfy-Org's MiniMax-H3 repo on Hugging Face or the author's Comfyit pack. This is a 33B model at roughly 42.5 GB full precision, so grab the pruned/int8 variants the README recommends and bring a real GPU. And check your region before downloading: the MiniMax H3 Community License excludes the US, EU, UK, and South Korea from running the local weights - a licensing fact, not a technical one.
The inputs that matter
The four model inputs are model, video_vae, audio_vae, and clip (minimax-type Qwen3-VL). Then the few you actually touch:
task_type- t2v / i2v / fl2v / r2v / v2v / rv2v / mixed. Picks the official node and the UNET the workflow expects.global_prompt- sent straight to the H3 node. In r2v you reference a loaded image as<Picture 1>; in v2v the source segment is auto-bound as<Video 1>.frame_rate,width,height,total_frames- defaults 24 fps, 864×480 (0.4MP 16:9), 124 frames ≈ 5s; frame counts snap to MiniMax's 17k+5 grid.cfg(1.0 - not a typo, H3 wants it low),seed, plus the advanced group:steps25,samplerres_multistep,schedulersimple,shift_video12 /shift_audio3. All mirror the official template.
The optional sockets are where this gets interesting: i2v_groups / r2v_groups take multi-group packs from this pack's Group nodes (external input overrides the UI cards), and refine takes the MiniMax H3 Director Refine node for a second-pass polish or upscale.
Outputs
images (one frame list per segment), audio (native AUDIO - wire it to your sound-saving node), fps, frame_count, and a report string summarizing each segment's plan. With a refine node attached, images_pre_refine carries the first-pass result for comparison. Leave source_images disconnected unless you explicitly want the original timeline frames decoded - it won't touch the main images output.
Where people get burned
Same three complaints every time: missing official H3 nodes (upgrade ComfyUI), a ref2va clip dropped on the fl2va UNET (wrong model for the task type), and a CLIP loaded without type=minimax (garbage conditioning). One more: the report output is where decode failures get explained - the node prints gray placeholders rather than fake frames, so read it before assuming the sampler broke.
Inputs (28)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | MiniMax H3 UNET (UNETLoader). | |
| video_vae | VAE | MiniMax H3 video VAE (minimax_h3_video_vae). | |
| audio_vae | VAE | MiniMax H3 audio VAE (minimax_h3_audio_vae). Required for r2v / v2v / rv2v. | |
| clip | CLIP | CLIPLoader type=minimax (qwen3vl). | |
| task_type | COMBO | t2v — 文生视频(Text to Video) | MiniMax H3 支持 t2v / i2v / fl2v / r2v / v2v / rv2v / mixed。提示词直接送入 MiniMaxH3ImageToVideo 或 MiniMaxH3ReferenceToVideo(内部 tokenize)。mixed 为每段自选 t2v/i2v/fl2v/r2v;r2v 用 <Picture 1>;v2v/rv2v 为源视频时间轴编辑(自动绑定 <Video 1>);rv2v 另可挂参考图。 |
| global_prompt | STRING | A cinematic scene with natural motion and synchronized ambience | User prompt — sent directly to MiniMaxH3ImageToVideo / ReferenceToVideo. r2v: <Picture 1>. v2v: source-timeline edit (<Video 1>). rv2v: source timeline + reference images (<Video 1> + <Picture N>). |
| bd_grp_sample | BDGROUP | 采样设置 | — |
| cfg | FLOAT | 1.000–30 | CFG for KSampler. |
| seed | INT | 00–18446744073709550000 | Random seed for sampling. |
| frame_rate | FLOAT | 24.001–240 | Timeline / output FPS (H3 trained at 24). |
| width | INT | 86432–8192 | — |
| height | INT | 48032–8192 | — |
| ref_max_size | INT | 86432–8192 | — |
| total_frames | INT | 1245–100000 | Frame count at 24 fps; snapped to MiniMax 17k+5 grid (124 ≈ 5s). |
| timeline_data | STRING | Internal — video, segments, refs (populated by UI). | |
| i2v_groupsopt | MMX_DIR_GROUP | External Image to Video group(s) (t2v / i2v / fl2v). When connected, overrides UI cards for execution (external priority). Connect Group (Image to Video).group, or Groups Combine. | |
| r2v_groupsopt | MMX_DIR_GROUP | External Reference to Video group(s). When connected, overrides UI cards for execution (external priority). Connect Group (Reference to Video).group, or Groups Combine. | |
| refineopt | MMX_DIR_REFINE | Optional Refine node. When connected, each segment runs a second sample pass (same-size refine, or upscale then sample). Wire a MODEL into Refine.refine_model to use a different UNET for that pass; unwired uses this Director model. images is the refined result; images_pre_refine is the first pass. Unconnected = single-pass (current behavior). | |
| bd_grp_advancedopt | BDGROUP | 高级采样 | — |
| stepsopt | INT | 251–200 | 一采步数(官方模板 25)。接了 sigmas 口后忽略此项,改用外接噪声表。 |
| sampleropt | COMBO | res_multistep | Official template: KSamplerSelect res_multistep. |
| scheduleropt | COMBO | simple | 一采调度器(官方模板 simple)。接了 sigmas 口后忽略此项,改用外接噪声表。 |
| shift_videoopt | FLOAT | 12.000.01–100 | MiniMaxH3SigmaShift shift_video. |
| shift_audioopt | FLOAT | 3.000.01–100 | MiniMaxH3SigmaShift shift_audio. |
| bd_grp_perfopt | BDGROUP | 性能 | — |
| clear_vram_between_segmentsopt | BOOLEAN | true | 段间清理显存:每段结束后卸载模型并清空 CUDA 缓存。 |
| export_source_imagesopt | BOOLEAN | false | 将时间轴原片解码到独立的 source_images 输出口;需将 source_images 另接预览/合成节点才能查看,不会改变主 images。默认关以节省内存。 |
| sigmasopt | SIGMAS | 可选。一采噪声表,接 BasicScheduler 或 ManualSigmas。接线后覆盖导演台「步数」和「调度器」(采样器下拉仍有效)。BasicScheduler 请接 SigmaShift 之后的同一套 H3 MODEL。不接则仍用步数 + 调度器、denoise=1 自动算表。 |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| fps | FLOAT | — |
| frame_count | INT | — |
| source_images | IMAGE | — |
| report | STRING | — |
| images_pre_refine | IMAGE | — |