MiniMax H3 Director SelfLift
Sample the boring part small, finish big
- bd_grp_selflift_sample
- bd_grp_selflift_lift
- bd_grp_selflift_tile
- model_hires
- selflift
Most of a diffusion run goes into building composition. The last few steps are where texture shows up. This node is the pack's way of charging you different prices for the two halves.
Where it sits in the workflow
MiniMax H3 is MiniMax's 33B omni-modal video model - video and stereo audio generated in one pass, not an audio pass bolted onto a silent generator. MiniMax H3 Director puts a multi-shot timeline in front of it: you wire in the official H3 UNET, a Qwen3-VL text encoder (CLIPLoader type minimax) and both VAEs, lay out shots, and it runs the official chain for you.
MiniMax H3 Director SelfLift isn't a sampler. Nothing samples when it executes; it packages settings into a selflift socket that wires into the Director's selflift input, just above refine. Unconnected, the Director behaves exactly as before. Connected, its first pass is rewritten.
That's the reason to care. A default H3 run is 864×480, 124 frames at 24fps, 25 steps - heavy. The classic hi-res fix samples small, then again at size: simple, VRAM-hungry. SelfLift does that inside one sigma schedule, lifting the latent with a learned 3D (space and time) H3 upscaler instead of a VAE round trip. The canvas never changes; only the order of work does.
How it actually works
The first pass becomes three moves: sample a low-res prefix (canvas × lowres_scale, snapped to H3's ×32 canvas stride) for the first k sigmas, lift that latent to the full canvas with the 3D network, then run the remaining sigmas - the high-res tail - at full size. split_mode decides where the cut lands. highres_steps (default) makes the last N steps high-res: 8 steps with the default highres_steps=2 is 6 low + 2 high. transition_step is the paper's own k, and the author's note says an 8-step turbo run wants 6.
Euler only, both stages - enforced, not suggested. Set sampler_mode to follow_director and it raises if your Director sampler isn't Euler.
The inputs that matter
Five fields do the real work; the rest stay tucked away until VRAM is the wall.
lowres_scale(0.5) - the whole point. The prefix runs at a quarter of the pixels. Set it to 1.0 and SelfLift politely does nothing.split_mode, thenhighres_stepsortransition_step- how much of the run is expensive. The tooltip's own suggestion: keep high-res around 25% of total steps.latent_upscale_model- the 3D latent upscaler, fromComfyUI/models/latent_upscale_models/(the folder Refine also uses). Required at the defaultrho=0;rhois the optional pixel-anchor path, which means a VAE round trip, so leave it alone.native_low_carry(on) - with the Director's segment guidance enabled, it writes the previous shot's native low-res tail into the current prefix so seams don't flicker. Off, the prefix is just a downgraded tail and seams go soft.model_hires- optional MODEL for the high-res stage only. Turbo LoRA on the cheap prefix, something else for the finish.
Also on the node: enable_latent_chunking (temporal chunks inside the lift) and enable_tiling / tile_count / tile_overlap (spatial tiling of the high-res tail only). One output: selflift.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/AIMixer/ComfyUI_MiniMaxH3_Director.git
pip install -r ComfyUI_MiniMaxH3_Director/requirements.txt
Or Manager → Install via Git URL with the same repo. You need ComfyUI 0.30.0+: the official H3 nodes landed in PR #15224 / #15228. requirements.txt pulls opencv-python-headless, imageio-ffmpeg, scenedetect and ultralytics - the last one is only for the Director's FaceRefine, and installs regardless.
Models come separately: pruned int8-convrot H3 UNETs (fl2va for t2v/i2v/fl2v, ref2va for r2v/v2v/rv2v), a ~32B Qwen3-VL text encoder, both VAEs, plus the 3D upscaler this node needs. The author bundles weights and workflows on comfyit.cn (article 506); Comfy-Org/MiniMax-H3 on Hugging Face is the official mirror. Two caveats: H3's community licence excludes the US, EU, UK and South Korea; and the docs are Chinese-first - the Director toolbar has an EN toggle, but this node's tooltips stay Chinese.
Where people get burned
Missing 3D weights fail softly. The dropdown shows a placeholder when models/latent_upscale_models/ is empty, and if the lift still fails at runtime it logs a warning and falls back to plain bilinear interpolation. You get mush instead of an error - so grep the console for SelfLift 3D lift failed before blaming the model.
More high-res steps than you have steps is a silent no-op. Ask for 8 high-res on an 8-step run and the cut clamps to k=1: everything is expensive and you saved nothing.
Chunking and tiling are VRAM savers with seams. Temporal chunks don't match a full forward pass, per the tooltip. And TST isn't bundled - with temporal-stability nodes, patch Director.model upstream.
Last thing: mute the node. Bypassing it restores the plain single-stage first pass, which is the only fair A/B against whatever SelfLift bought you.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| bd_grp_selflift_sample | BDGROUP | 渐进采样 | — |
| split_mode | COMBO | highres_steps | highres_steps = 高清收尾步数(8 步默认 2,即低清 6 + 高清 2)。transition_step = SelfLift 论文的 k(8 步默认 6)。 |
| highres_steps | INT | 21–64 | 仅 split_mode=highres_steps。高清阶段步数,建议约为总步数的 25%。 |
| transition_step | INT | 61–200 | 仅 split_mode=transition_step。低清前缀步数 k。8 步 turbo 用 6。 |
| lowres_scale | FLOAT | 0.500.25–1 | 低清画布 = 导演台画布 × 该倍率,再对齐 ×32。1.0 = 不渐进,走原来的一采。 |
| sampler_mode | COMBO | euler | 默认 euler:SelfLift 两阶段都用 Euler(论文路径,s_churn=0)。不改导演台采样器。follow_director = 跟导演台,但必须也是 euler,否则直接报错。 |
| native_low_carry | BOOLEAN | true | 段间把上一段 native 低清尾写入当前低清前缀(与高清 pin 一起)。关掉则低清前缀只是高清尾再降格,接缝容易闪/糊。导演台未开段间引导时无效。 |
| bd_grp_selflift_lift | BDGROUP | 提升 / 3D | — |
| latent_upscale_model | COMBO | (将 3D 权重放入 models/latent_upscale_models) | H3 3D latent 放大权重,与 Refine 同一目录:ComfyUI/models/latent_upscale_models/。rho=0(默认)时必选。 |
| latent_upsample | COMBO | bilinear | 降格 cond / 升采样过渡态 x 的插值。干净端点 x0 走 3D 网。 |
| rho | FLOAT | 0.000–1 | 论文像素锚混合。0 = 只用 3D lift(推荐,避免 VAE 往返)。>0 时解码低清 x0、lanczos 放大像素再编码,按 w_min/w_max 混进 3D 结果。真正的 3D 权重在上面的 latent_upscale_model。 |
| w_min | FLOAT | 0.500–1 | 仅 rho>0。低频区域的像素锚权重。 |
| w_max | FLOAT | 1.000–1 | 仅 rho>0。高频残差区域的像素锚权重。 |
| enable_latent_chunking | BOOLEAN | false | 3D lift 时间分块(省显存,默认关)。接缝可能和整段前向不同。 |
| bd_grp_selflift_tile | BDGROUP | 高清分块 | — |
| enable_tiling | BOOLEAN | false | 仅高清收尾空间分块(默认关)。低清阶段不分块。音频不切空间。 |
| tile_count | INT | 21–8 | 高清分块数量。1 等同不分块。 |
| tile_overlap | INT | 1280–2048 | 块间重叠,单位为输出像素。 |
| model_hiresopt | MODEL | 可选高清阶段 UNET。不接则低清/高清都用导演台主模型。适合低清挂 Turbo、高清换一套。 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| selflift | MMX_DIR_SELFLIFT | — |