Nodes/ComfyUI-Universal_Prompt_Optimizer/Universal MiniMax_H3 导演台mini
ComfyUI Node

Universal MiniMax_H3 导演台mini

Model in, video out, no widget soup

By aihaipan·Created about a month ago·Updated about 22 hours ago· 2
Universal MiniMax_H3 导演台mini
  • model
  • clip
  • vae
  • audio_vae
  • media_bundle
  • prompt_finite
  • segments_json
  • video
◄director_config►
◄width864►
◄height480►
◄fps24►
◄steps8►
◄seed0►
◄second_passfalse►
◄second_pass_model►
◄second_pass_high_steps2►

The pack has three tiers of "just make a video": the segment sampler with its twenty widgets, the Max director that hides everything behind a panel, and this one in the middle. UniversalMiniMax_H3Director ("Universal MiniMax_H3 导演台mini") is the tier I'd hand a beginner, because it has exactly one job and almost nothing to misconfigure.

Its own description is the whole manual: 「直接接收模型和素材,一键输出最终视频和音频」 - take the model and the material, output the final video and audio. For once the description sells it short. It does not require AIMixer's MiniMax H3 Director pack or Songssx's TimelineDirector, despite the surrounding documentation being full of both. Install this pack, wire it, run it.

What it really is

A preset. execute() checks its four required inputs, then calls the segment sampler with a fixed set of choices: no finite_plan (so the sampler builds one itself), duration_sec=5.0, sampler_name="euler", scheduler="simple", denoise=1.0, continue_audio_latent=True, ref_image_size="match", and your steps and seed. Then it returns the fifth output of that call - the packaged VIDEO - and nothing else.

Two consequences follow, and both matter more than the widget list.

First, the length of your video is not a widget here. It comes from the segments JSON that the optimizer builds, so the mini director inherits whatever segment count, per-segment durations and overlaps your timeline had. If you wired it up with no segments_json, that hardcoded 5.0 is what you get, every time.

Second, director_config is a JSON escape hatch, not a parameter block. The node looks for a director_config key inside segments_json, extracts it, deletes it from the JSON before the plan parser sees it, and uses it to override width, height, steps and seed. That's the author fixing a real bug where the optimizer's own config leaked into the plan. Practically: leave it alone unless a workflow hands you one.

The wires

model, clip, vae and audio_vae are required, and H3 means all four - it generates picture and audio in one pass, so the audio VAE isn't optional whatever the layout suggests. Miss one and you get 「缺失核心模型输入(model/clip/vae/audio_vae),请检查上游连线!」.

Then three optional inputs that only this pack speaks: media_bundle, prompt_finite and segments_json. They come straight off the pack's base optimizer node, and they're the reason the mini director needs so few widgets - your prompt, your reference images and your timeline all arrive on those wires. If you connect neither media_bundle nor segments_json, the node refuses: 「缺少数据输入!请连接万能节点的 media_bundle 和 segments_json。」

This is the classic bundled-context pattern, with its classic cost: those socket types are the pack's own invention, so nothing else in ComfyUI produces them. No rgthree Context, no generic string node, no swapping in another optimizer. Adopt this node and you're inside aihaipan's ecosystem for the prompt side.

What's left is honest: width/height (864×480 default, step 32), fps (24), steps (8), seed, and the second-pass trio - second_pass, second_pass_model, second_pass_high_steps. Note second_pass_model is a free-text STRING here, not the sampler's dropdown, so a typo doesn't get caught until the render starts. Copy the filename exactly, and don't enable second pass without a latent upscaler in models/latent_upscale_models whose name contains both minimax_h3 and latent.

fps is packaging only. H3's internal rate is 24, so changing this re-times the container rather than giving you a smoother generation.

The single output is video, type VIDEO. Wire it to SaveVideo / PreviewVideo, or to whatever combine node your install already has.

Install

Manager, search "Universal Prompt Optimizer", or:

cd ComfyUI/custom_nodes
git clone https://github.com/aihaipan/ComfyUI-Universal_Prompt_Optimizer.git

Restart ComfyUI. There's no requirements file and no pip install step - the pack declares one dependency, aiohttp, which ComfyUI already ships. It does need Python 3.10+ and a ComfyUI recent enough to support the comfy_api.latest node API; on anything older the entire pack fails to import rather than just this node.

Model files are your job: the diffusion model in models/diffusion_models, the text encoder in models/text_encoders, and both VAEs in models/vae - including the audio one, which people file elsewhere and then can't find. H3 is a 33B omni-modal model at roughly 42.5GB reported, so a quantised weight dtype is the realistic path on a single consumer card.

Honest troubleshooting

"Why is my video always five seconds?" Your segments_json isn't connected, or the timeline upstream is a single segment. The 5.0 in the source is the fallback, not a setting.

You can't pick the audio mode. audio_mode is passed as 参考音色 inside this node's call, and there's no widget to change it. Need 强制使用音频1, or per-segment audio locking? Use the segment sampler, where it's exposed.

Nothing downstream is getting the prompt string. By design - this node only outputs video. If you want the optimized text for a second consumer (a RefMod text encode, an image branch), tap it off the base optimizer instead.

Second pass made it slower, not better. Check second_pass_high_steps sits comfortably below steps, and that the upscaler you named is actually an H3 latent upscaler. Wrong model plus a valid filename is a quiet quality hit rather than an error.

It's a thin wrapper, so debug it as one. Every failure inside it is a failure of the segment sampler or the plan. Read the message, then go stand at the sampler with the same plan and watch Sampling Status. That's a much faster loop than guessing from the top.

CategoryUniversal Prompt/Director

Inputs (16)

NameTypeDefaultDescription
modelMODEL—
clipCLIP—
vaeVAE—
audio_vaeVAE—
media_bundleoptGH_MEDIA_BUNDLE—
prompt_finiteoptGH_PROMPT_STR—
segments_jsonoptGH_SEGMENTS_STR—
director_configoptSTRING—
widthoptINT86464–4096—
heightoptINT48064–4096—
fpsoptINT241–60—
stepsoptINT81–100—
seedoptINT00–18446744073709550000—
second_passoptBOOLEANfalse—
second_pass_modeloptSTRING—
second_pass_high_stepsoptINT21–10—

Outputs (1)

NameTypeDescription
videoVIDEO—