Universal MiniMax_H3导演台Max
The Max Director that swallows your whole MiniMax H3 graph
- model
- clip
- vae
- audio_vae
- video
Most ComfyUI node articles are about a part. This one is about a whole pipeline wearing one node's clothes.
UniversalDirectorUI - display name "Universal MiniMax_H3导演台Max", the Max director - is the flagship of aihaipan's Universal Prompt Optimizer pack. You add it, write your rough idea in the panel, drag in reference images (and optionally video and audio), click ✦, and a video pops out the other side. Under the hood it's a prompt-rewriting LLM, a timeline planner, a segment sampler and both H3 VAEs, all welded together and pointed at a single video output.
That's the appeal. Getting an LLM to restructure your half-formed idea before it hits the encoder is routine now - literal mentions of "prompt enhancer" went 12 → 66 → 188 → 253 across 2023 to mid-2026 in our corpus, and the local-LLM-in-a-node pattern won that argument years ago. What most enhancer nodes don't do is then also hold the sampling graph. Here they're the same node.
What the panel is actually doing
The interesting part isn't in the node schema, it's behind it. The visible widgets are modest: prompt (the rich-text box), width and height (1024 default), and resize_mode with three options - cover, contain, stretch. The media slots aren't widgets at all. They're fourteen hidden string fields (ref_image_1 through ref_image_9, three ref_video_*, three ref_audio_*) that the front-end fills with filenames when you upload, plus a hidden gh_state_json blob holding the panel's own settings: dirWidth, dirHeight, dirSteps, dirSecondPass, dirSecondPassModel, dirSecondPassSteps, dirAudioMode, dirSavePrefix, dirBridgeOverlaps.
At run time the node reads those back - and the panel's dirWidth/dirHeight override the width/height widgets, so the number you typed can lose to the panel. It then packs your media into a bundle of paths only, deliberately skipping the image-tensor loading, and hands the whole thing to the pack's mini director, which calls the segment sampler. This node is the pack's whole stack in one body.
Worth knowing: resize_mode doesn't resize anything on the backend. The node defines cover/contain/stretch helpers, but the path this node takes never calls them - your references keep their own aspect until the sampler's timeline encoder handles them. Treat resize_mode as a panel-side preference.
The prompt optimization itself is genuine network/AI work: aiohttp is the pack's only declared dependency precisely because it POSTs images and text to OpenAI, Gemini, OpenRouter, DashScope, SiliconFlow or RunningHub, or to a local GGUF vision model with an mmproj.
The wires
Four model-ish inputs matter and the tooltips are the author's own. model says it plainly: connect a model plus VAE and this node renders the video itself. clip claims to be optional; vae and audio_vae are what make H3's joint audio track possible at all.
Connect all four. The UI marks clip optional, but the director it delegates to refuses to run without it, so an unconnected CLIP gives you a Chinese error instead of a video. Missing model, vae or audio_vae trips an earlier, clearer guard: 「请连接 model, vae, audio_vae 才能出片!」.
The output list is one entry: video, type VIDEO. This is where the node's own help text lies to you - its description still promises "the first image, the prompt string, an optional conditioning, and an optional latent". That's stale copy inherited from the sibling optimizer node. If you want the optimized prompt string, the frames, the audio or the latent, you need the plain optimizer up front or the segment sampler behind.
Install
ComfyUI Manager, search "Universal Prompt Optimizer". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/aihaipan/ComfyUI-Universal_Prompt_Optimizer.git
Restart. There's nothing to pip install - aiohttp already ships in a normal ComfyUI environment. Requires Python 3.10+ and the newer comfy_api.latest node API - on an older ComfyUI you lose all seven nodes at import, not just this one.
Beyond the pack itself, the optional pieces are ComfyUI-MiniMaxH3Mod (Luisacaotica) for RefMod character mods, and AIMixer's MiniMax H3 Director if you want the R2V bridge route. H3's own weights are a 33B omni-modal model, ~42.5GB reported - and check the licence before you download, since the MiniMax H3 Community License excludes the EU, UK, Korea and the US from its applicable territory.
Ready-made examples live in workflows/, including a full H3 pipeline and a two-stage unlimited-length demo.
Where people get burned
- "API is not configured." The panel will tell you 「尚未配置提示词优化 API」 and offer to open settings. Either paste a key and pick a provider, or switch to the local vision model - which needs a GGUF plus an mmproj file and will otherwise say "Missing local model dependencies".
- Your edit didn't reach the graph. Optimization results are cached per mode and you can toggle between the raw idea and the optimized version. If downstream is still getting your 大白话, you're on the wrong side of that toggle or looking at a stale cache, not a broken wire.
- The prompt is faithful but the subject drifts. That's the classic unconstrained-rewrite failure of LLM prompt enhancement, and it hits every node in this category. Short, specific notes beat long wishlists.
- No community answers. The corpus has literally zero mentions of this pack, so there are no threads to lean on when it misbehaves. Read the error string, then read the source - the guard messages in
universal_director_ui_node.pyare unusually specific.
One honest caveat: this node is the convenience tier. When it fights you, drop to the loader, the segment sampler and the base optimizer and wire them yourself. Same engine, visible parameters, and you can actually see what the panel was setting for you.
Inputs (25)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 102464–16384 | — |
| height | INT | 102464–16384 | — |
| resize_mode | COMBO | cover | 3 options: cover, contain, stretch |
| prompt | STRING | — | |
| modelopt | MODEL | 接入模型及VAE后,将在本节点内部直接出视频 | |
| clipopt | CLIP | 可选:接入文本编码器后节点输出 conditioning | |
| vaeopt | VAE | — | |
| audio_vaeopt | VAE | — | |
| ref_image_1opt | STRING | — | |
| ref_image_2opt | STRING | — | |
| ref_image_3opt | STRING | — | |
| ref_image_4opt | STRING | — | |
| ref_image_5opt | STRING | — | |
| ref_image_6opt | STRING | — | |
| ref_image_7opt | STRING | — | |
| ref_image_8opt | STRING | — | |
| ref_image_9opt | STRING | — | |
| ref_video_1opt | STRING | — | |
| ref_video_2opt | STRING | — | |
| ref_video_3opt | STRING | — | |
| ref_audio_1opt | STRING | — | |
| ref_audio_2opt | STRING | — | |
| ref_audio_3opt | STRING | — | |
| gh_state_jsonopt | STRING | — | |
| segments_jsonopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |