Nodes/MiniMaxH3-Director-V1.2/Muse MiniMax Director V1.4
ComfyUI Node

Muse MiniMax Director V1.4

The Muse MiniMax Director

By muse-collective-26·Created 19 days ago·Updated a day ago· 30
Muse MiniMax Director V1.4
  • model
  • clip
  • vae
  • audio_vae
  • model_fl2va
  • images
  • audio
  • compiled_prompt
  • ref_images_used
  • candidate_1_images
  • candidate_1_audio
  • candidate_2_images
  • candidate_2_audio
  • candidate_3_images
  • candidate_3_audio
  • candidate_4_images
  • candidate_4_audio
  • candidate_1_latent
  • candidate_2_latent
  • candidate_3_latent
  • candidate_4_latent
  • ref_audio_1_used
  • ref_audio_2_used
  • ref_audio_3_used
modeReference (Omni) — up to 7 images, 3 videos, 3 audio
aspect_ratio16:9 (Widescreen)
megapixels0.50
multiple32
resize_methodoriginal
duration_seconds15.0
chunk_duration_seconds15.0
ref_image_sizemax
hybrid_continuationfalse
seam_interpolation_frames2
vae_reencode_carry_testtrue
vae_reencode_carry_length39
seed42
seed_huntfalse
use_prompt_overridetrue
steps10
sampler_nameeuler
schedulerbeta
two_stage_samplingtrue
two_stage_first_pass_steps6
two_stage_latent_upscale_model
two_stage_target_megapixels1.00
two_stage_seed_hunt_latent_onlyfalse
shift_video12
shift_audio3
timeline_data{}
enable_seed_huntfalse
candidate_count1
vae_reencode_carry_video_only_testfalse
long_form_enabledfalse
long_form_project_id
render_chunk_start1
render_chunk_end999
two_stage_enable_temporal_chunkingfalse
raw_latent_carry_testtrue
prompt_override

MiniMax H3 is a genuinely strong open-weights video model - 33B, omni-modal, with audio generated in the same pass as the picture. But the stock ComfyUI path is fiddly in three ways: you hand-order its <Picture N> / <Video N> reference tags, each generation call tops out around 15 seconds, and anything longer than that means stitching chunks where the cut loves to visibly jump. Muse MiniMax Director V1.4 is a control layer that turns all three into UI. You write your video as a script of timed CUTs on a visual timeline, drop references into slots, and it handles the prompt compilation, chunking, tag numbering, and continuity for you. No API, no key - it's a local layer over ComfyUI's own stock H3 nodes.

The mechanism is the interesting part. Each CUT is a timed script segment the node maps into every H3 chunk it overlaps in time (straddling CUTs land in both), then compiles each chunk into MiniMax's full six-section reference prompt - subject_definitions, summary, retention_analysis, and so on - with tags numbered by H3's actual assignment rule (iteration order, not the numeric slot you dropped the image into). That numbering fix alone saves real headaches.

A mode toggle picks which checkpoint drives the run: Reference (Omni) takes up to seven image references plus three video and three audio clips for character/scene consistency; First/Last Frame hard-locks your start and end frames positionally instead (no reference-tag system there, so you write plain motion prose); Hybrid does both. Two more headline features: two-stage sampling (on by default - a few low-res steps, then a direct latent upscale to full resolution on the same noise schedule) and Seed Hunt, which runs your timeline at up to four low-res seeds so you can pick a winner before spending real compute.

The inputs you'll actually set

  • model - the Reference/Omni (ref2va) H3 checkpoint. Wire the First/Last-Frame checkpoint into model_fl2va for First/Last Frame or Hybrid mode.
  • clip, vae, and audio_vae - all required. The audio VAE isn't optional even in First/Last Frame mode, because H3 always builds a joint audio+video latent internally.
  • duration_seconds and chunk_duration_seconds - your total length and the per-call target (keep it under H3's ~15s ceiling; the final chunk absorbs whatever's left over).
  • Seed Hunt: enable_seed_hunt plus candidate_count (1–4), and two_stage_seed_hunt_latent_only if you want each scout to stop after the cheap Stage 1.

Everything else - sampler, scheduler, and the continuity toggles that hard-freeze the previous chunk's real ending into the next chunk's opening so seams stop looking like seams - has sane defaults. Leave them alone until something looks wrong.

Outputs and where they go

images + audio feed a standard Video Combine node to get a playable file. compiled_prompt is your debug window - it shows exactly what got sent to H3, including every resolved tag. ref_images_used, the candidate_1..4_latent outputs, and ref_audio_1..3_used are what you feed the bundled Muse Minimax Refine companion for the high-resolution second pass on a scouted winner. One trap baked into the design: with Seed Hunt on, images/audio are deliberately blocked - a scouting run isn't a picked result, so read your candidates instead.

Install

ComfyUI Manager: search Muse Minimax Director and click Install. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/muse-collective-26/MiniMaxH3-Director-V1.2

Restart ComfyUI. Manager installs the pack's requirements.txt (faster-whisper, used for the in-timeline audio transcription that builds timed shot breaks). PyAV (av) is imported at module top level, so a node that won't register usually just needs pip install av. Two more installs the README underplays: multi-chunk continuity needs ComfyUI-H3-Motion-Context-MultiRef, and because two-stage sampling is on by default the code hard-requires the Comfyui_Minimax_h3_latent_Upscaler pack plus a trained upscale checkpoint in ComfyUI/models/latent_upscale_models/ - the dropdown shows a placeholder until you add one, and the node errors until you do.

Then the model itself, which isn't bundled: grab the MiniMax H3 weights from Hugging Face (MiniMaxAI/MiniMax-H3) - both checkpoints, plus CLIP and the video/audio VAEs - and read the H3 Community License before you do. It's permissive-ish but geofenced: users in the US, EU, UK, and Korea aren't licensed to run the open weights at all, a detail that keeps biting people.

Where people get burned

If two-stage sampling errors at runtime, read the message - it literally tells you which pack or model file is missing. A ModuleNotFoundError: No module named 'comfy_extras.nodes_minimax_h3' means your ComfyUI core predates native H3 support, so update core, not this node. And if a multi-chunk render still cuts oddly, check compiled_prompt first, then make sure the pack is current - the changelog shows real fixes for reference videos being capped at 200 frames and played at the wrong frame rate. This repo is obsessively documented - the changelog reads like a bug diary, which is the energy you want from something sitting between you and a 15-minute render.

CategoryMuse Collective

Inputs (41)

NameTypeDefaultDescription
modeCOMBOReference (Omni) — up to 7 images, 3 videos, 3 audio3 options: Reference (Omni) — up to 7 images, 3 videos, 3 audio, First/Last Frame — zero, one, or two frame images, Hybrid — First/Last Frame + References
modelMODEL
clipCLIP
vaeVAE
audio_vaeVAENeeded for final audio decode in both modes — H3 always builds a joint audio+video latent internally, even in First/Last Frame mode.
aspect_ratioCOMBO16:9 (Widescreen)8 options: 1:1 (Square), 2:3 (Portrait Photo), 3:2 (Photo), 3:4 (Portrait Standard), 4:3 (Standard), 9:16 (Portrait Widescreen), +2
megapixelsFLOAT0.500.2–2
multipleINT328–128
resize_methodCOMBOoriginalHow every character/background reference image and First/Last Frame image gets fit to the output resolution when its own aspect ratio doesn't match. 'crop' scales up and center-crops the excess (no distortion, may crop the edges of a person/scene). 'pad' scales down to fit entirely within the frame and adds black bars (nothing cropped, but the bars become visible reference content). 'stretch' resizes directly, distorting proportions.
duration_secondsFLOAT15.01–900Total length of the finished video. Automatically split into multiple H3 generation calls if longer than chunk_duration_seconds, stitched together.
chunk_duration_secondsFLOAT15.03–15Length of each individual H3 call. H3's own trained range tops out around 15s per call — longer totals get split into chunks this long (the final chunk absorbs whatever's left over, so it may be shorter). Reference mode: each continuation chunk is fed the previous chunk's own last few frames and last few seconds of audio as reference video/audio, plus an explicit instruction to continue seamlessly rather than cut. First/Last Frame mode: continuation falls back to the previous chunk's last frame only.
ref_image_sizeCOMBOmax'match' scales references down to the generation's pixel area (faster). 'max' keeps up to a 2048px short edge for stronger identity fidelity, but reference tokens ride every sampling step so it's several times slower. Reference (Omni) mode only.
hybrid_continuationBOOLEANfalseReference (Omni) mode only, needs model_fl2va connected. Reference mode's own carry-over (ref_video/ref_audio) is a soft reference, not a hard lock — H3 can still cut to a new composition at a chunk boundary despite it. When this is on, continuation chunks (2nd onward) switch to a hard-locked first-frame anchor instead: the exact last frame of the previous chunk, via the separate First/Last-Frame checkpoint's real keyframe-lock mechanism. The first chunk always runs Reference (Omni) normally, so character/background images still establish identity — continuation chunks just don't get fresh reference-image reinforcement after that (the anchor frame itself already carries the correct likeness forward, since it's real output from the reference-anchored first chunk, not a blank start).
seam_interpolation_framesINT20–8Reference (Omni) mode only, 2+ chunks. Two chunks are independent generation calls, so even with a working continuation anchor, the camera position can drift a few pixels right at the seam. Replaces the next chunk's first N real frames with N real in-between frames computed via RIFE optical-flow interpolation (requires ComfyUI-Frame-Interpolation) from the two actual boundary frames, rather than a naive cross-dissolve — a plain alpha blend doesn't know the camera moved and ghosts instead of smoothing. Replaces rather than inserts so total output length never changes and audio can never drift out of sync with it. 0 disables it (hard cut).
vae_reencode_carry_testBOOLEANtrueAny mode, 2+ chunks (same scope as the plain anchor mechanism it replaces). Proven out and confirmed working (2026-09-03) — on by default now, a real option, not a test/experimental one. Replaces the plain first-frame-anchor continuity (_KEYFRAME_INJECTION_FRAMES discard) with LTX Director's own mechanism: the previous chunk's actual final vae_reencode_carry_length frames of decoded output (+ matching audio) are freshly VAE re-encoded (not the sampler's own raw latent tail) and hard-frozen (noise-masked) as this chunk's own opening latent prefix, via MiniMaxH3GeneratedAVMaskedContext (ComfyUI-H3-Motion-Context-MultiRef) — the same extend-then-trim shape as the plain anchor path, just a different, ground-truth-pixel source for the carried prefix. Works with two_stage_sampling on or off: with it off, injects once, before the single sampling pass; with it on, injects TWICE — once before Stage 1 (so the early, composition-deciding steps are actually anchored) and again after the Stage-2 upscale, right before the real final pass (since the upscale's own priming step forces the mask back to unprotected regardless of the first injection). Confirmed the Stage-1 injection alone isn't optional: skipping it let a real two-stage render invent an entirely different shot at the cut. When off, behaves exactly as before.
vae_reencode_carry_lengthINT3922–90Only used when vae_reencode_carry_test is on. Requested carry window in pixel frames — snapped internally to H3's own valid video-VAE / audio-clock grid (39 is both a valid H3 run and the shared audio boundary, matching MiniMaxH3GeneratedAVMaskedContext's own default).
seedINT420–18446744073709550000
seed_huntBOOLEANfalseWhen on, runs 4 full passes total — identical settings, only the seed differs — and fills the candidate_1..4 outputs (candidate_1 is always the main seed; 2-4 use seed + N*1,000,003). Wire candidate_1..4_images/audio into MuseMinimaxRefine to pick one and refine it at higher resolution. Takes ~4x as long as a single run — set megapixels low here for cheap scouting, then refine at full resolution downstream.
use_prompt_overrideBOOLEANtrueWhen on, every chunk's prompt is replaced with whatever's wired into prompt_override — the timeline's characters/CUTs/soundscape are ignored for prompt purposes (reference images, sampling, and chunking still work normally). For someone who already has a fully-formatted H3 prompt and wants to skip the Director's own compiler entirely, same as typing directly into the stock node's prompt box. For a multi-chunk render, split prompt_override into one section per chunk with a '--- Chunk N/M ---' header line (same format this node's own compiled_prompt output uses) — each chunk then gets only its own section; with no such headers, the whole string is used as-is for every chunk, same as before this per-chunk splitting existed.
stepsINT101–100
sampler_nameCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBObeta9 options: simple, normal, beta, sgm_uniform, karras, exponential, +3
two_stage_samplingBOOLEANtrueOn by default. Runs the first few steps at a lower resolution, upscales the video latent directly (no VAE round-trip), then finishes the remaining steps at full resolution on the same continuous noise schedule. Off keeps the older single-pass behavior.
two_stage_first_pass_stepsINT61–50How many of the total steps run at the lower resolution before the upscale. 6 is the confirmed shipped default (2026-09-03). Cap raised from 6 to 50 (2026-09-02) so higher Stage-1 step counts (another public H3 workflow uses 8-15) can actually be tested — clamped internally to steps-1 either way, so setting this above your own 'steps' total just uses everything up to the last step, not an error.
two_stage_latent_upscale_modelCOMBOWhich trained latent-upscale checkpoint to use (from ComfyUI/models/latent_upscale_models/). Real learned network, not interpolation.
two_stage_target_megapixelsFLOAT1.000.2–2Target resolution for the Stage-2 upscale, in megapixels. Aspect ratio is preserved and the result is aligned to MiniMax H3's 32-pixel canvas grid.
two_stage_seed_hunt_latent_onlyBOOLEANfalseFor scouting with Seed Hunt: stops each pass after Stage 1 instead of also running the expensive Stage 2 upscale for all 4 candidates. images/audio become a cheap low-res preview of Stage 1 only; the real, continuable Stage 1 latent is exposed on the candidate_N_latent outputs — wire those into Muse Minimax Refine V1.2, pick your favorite there, and only that one pays the Stage 2 cost.
shift_videoFLOAT120–100
shift_audioFLOAT30–100
timeline_dataSTRING{}
enable_seed_huntBOOLEANfalseOff: exactly one normal run, full stop — candidate_count below is ignored. On: runs a Seed Hunt scouting session using candidate_count candidates.
candidate_countCOMBO1Only used when Enable Seed Hunt (above) is on. How many candidates to scout — always candidates 1 through N in sequence (never a gap), seed + N*1,000,003 per extra pass — filling that many candidate_N outputs. Each extra candidate is one more full pass, so 4 takes ~4x as long as 1; set megapixels low here for cheap scouting, then refine your favorite at full resolution downstream.
vae_reencode_carry_video_only_testBOOLEANfalseOnly used when vae_reencode_carry_test is also on. Proven out and confirmed working (2026-09-03) — a real option, not a test/diagnostic-only one. Use it when you want the proven video-continuity splice across a chunk boundary WITHOUT carrying the previous chunk's audio into the next one — same video-prefix/video-mask math, same carry_n/alignment, same post-generation trim as vae_reencode_carry_test's own video half. The difference: chunk 2's own audio latent and its noise mask are left completely untouched (H3 generates that audio fully fresh, no continuity anchor) instead of going through MiniMaxH3GeneratedAVMaskedContext's own audio re-encode+splice. Originally built to isolate a reported audio-degradation symptom from the video carry — turning this on confirmed the audio re-encode/splice as the cause, so it's also the right toggle whenever you specifically want fresh audio per chunk with continuous video.
long_form_enabledBOOLEANfalseLip Sync only. Saves a named project, completed chunks, and the latest continuation checkpoint to persistent disk storage.
long_form_project_idSTRING
render_chunk_startINT11–999
render_chunk_endINT9991–999
two_stage_enable_temporal_chunkingBOOLEANfalseOnly used when two_stage_sampling is on. The Stage-2 latent upscaler (MinimaxH3LatentUpscaler3D) internally splits long chunks into overlapping temporal pieces and blends them, rather than upscaling the whole chunk as one piece. Off (default, confirmed 2026-09-03) upscales the whole chunk in one piece — slower/more VRAM, but skips the internal overlap-blend. On splits into overlapping temporal pieces instead — this node's older always-on behavior.
raw_latent_carry_testBOOLEANtrueAny mode, 2+ chunks. Proven out and confirmed working (2026-09-03) — on by default now, a real option, not an experimental one. Takes priority over vae_reencode_carry_test when both are on (mutually exclusive per chunk, not stacked). Copies the previous chunk's own raw final sampled AV latent straight into this chunk's opening vae_reencode_carry_length frames and hard-freezes them via MiniMaxH3GeneratedAVMaskedContext — no VAE decode/re-encode round trip for that carried window, unlike vae_reencode_carry_test. Ported from the Beta Director, where it was confirmed to hold room/prop geometry across a cut better than conditioning-only approaches. No guarantee content past the carried window won't still drift — this only makes the boundary itself a hard constraint instead of a soft one.
model_fl2vaoptMODELThe separate First/Last-Frame checkpoint (not the same weights as the main Reference/Omni model input) — load it via its own loader. Used whenever a First/Last-Frame-style generation actually happens: First/Last Frame mode itself, and Hybrid Continuation's chunk-to-chunk lock while in Reference mode. If left unconnected, First/Last Frame mode falls back to the main model input instead — which should normally hold the Reference/ref2va checkpoint, not this one, so results may be degraded.
prompt_overrideoptSTRINGWire in any plain text node (e.g. a Text Multiline node) with an already-formatted H3 prompt. Only takes effect when use_prompt_override is on.

Outputs (19)

NameTypeDescription
imagesIMAGE
audioAUDIO
compiled_promptSTRING
ref_images_usedIMAGE
candidate_1_imagesIMAGE
candidate_1_audioAUDIO
candidate_2_imagesIMAGE
candidate_2_audioAUDIO
candidate_3_imagesIMAGE
candidate_3_audioAUDIO
candidate_4_imagesIMAGE
candidate_4_audioAUDIO
candidate_1_latentLATENT
candidate_2_latentLATENT
candidate_3_latentLATENT
candidate_4_latentLATENT
ref_audio_1_usedAUDIO
ref_audio_2_usedAUDIO
ref_audio_3_usedAUDIO