MiniMax H3 SelfLift Project — Experimental
Sample at half size, then finish at full — the switch that turns it on
- plan
- plan
- status
The usual way to get a big H3 video is to generate small and upscale afterwards, with a model that never saw your scene at that resolution. SelfLift takes the other route: run the first part of your step schedule at half resolution, lift the latent to full size, and let the same H3 model spend the last two or three steps denoising at the final resolution, with all of the chain's context and continuity intact.
Sound appealing? Yes. Also experimental. SelfLift Project is the node that switches it on and holds its settings - it's the project-wide control panel, not the sampler.
What it actually does
It doesn't sample anything. It writes a selflift_sampling block onto the incoming plan and returns it, so the dedicated SelfLift sampler downstream knows to do two stages instead of one. Plan width and height are the final size; the low stage is lowres_scale times that (rounded to H3's even latent grid), and high_resolution_steps of the scene's total steps happen at full resolution. A 6-low / 2-high split of 8 is the shape the author uses in the example. Turning enabled off leaves ordinary single-stage sampling completely alone - and be aware that switching it off later doesn't regenerate clips you already saved.
Nothing is monkey-patched at startup, which is worth saying plainly: the pack's own description notes it "does not patch ComfyUI or change any other workflow."
Inputs and outputs that matter
plan- the production plan. Wide/height here are final output dimensions.enabled- the project-wide switch. Off by default.upscaler_model- how the latent gets lifted: an installed LBH H3 3D checkpoint,tridae(Tr1dae's FP32 clean-latent 2× model; it downloads a pinned, SHA-256-verified ~59 MB checkpoint intomodels/latent_upscale_modelson first execution), orbilinear(spatial interpolation per time token, no weights, no temporal mixing). Generic image or LTX upscalers are not compatible with this path.high_resolution_steps- must be lower than each scene's total steps, or there's no low stage left to run.
The optional half is where the experiments live. cleanup_between_stages releases the retired checkpoint's DynamicVRAM buffers before the lift and unloads the learned upscaler afterwards (Tr1dae's legacy upscaler gets offloaded to CPU) - it preserves your shared models and saved takes, and can slow the next scene's reload. rho with w_min/w_max turns on a pixel/VAE consistency correction: at rho > 0 the sampler finds the most inconsistent latent locations and pulls them toward a decode → pixel resize → re-encode anchor. It costs a full VAE round trip and can change detail and colour. It is not a guaranteed artifact fix, and rho=0 - the default - is the honest recommendation until you've compared output.
Outputs are just plan (carry it on to Preflight and Loop Start) and status, which reports the resolution base, step count, upscaler and whether the correction pass is on. Send status to Preview Any and actually read it; the failure you'll otherwise hit is a two-hour render that was never lifted because you forgot to enable it.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/seitanism/ComfyUI-H3-Motion-Context-MultiRef.git
git clone --branch main https://github.com/ethanfel/ComfyUI-MiniMaxH3-Context-Loop.git
Restart. SelfLift needs the dedicated Chain SelfLift sampler or SelfLift Seed Hunt in the graph - the ordinary sampler ignores the settings. tridae needs final dimensions divisible by 64 with lowres_scale at exactly 0.5, so 1920×1088 is a good target; an incompatible grid is rejected before the low pass, with no hidden second resize. Note the licence caveat that applies to all H3 weights: the community licence excludes the US, EU, UK and South Korea from its applicable territory.
The catch, from the author's own notes
Some learned-lift results develop localized coloured patches or blocky detail that weren't in the low-resolution latent. It's been observed with the LBH lift and is listed as unresolved in this release. tridae and bilinear are comparison options, not equal-quality replacements, and high-resolution denoising tiles don't change the lift - so they shouldn't be sold to you as a fix. Inspect the fully decoded take and keep rho=0 until you have a reason not to.
Also: enabling SelfLift changes the profile's recipe. Use a new profile or reprocess rather than resuming a prefix built with the old setting.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| plan | H3_CHAIN_PLAN | — | |
| enabled | BOOLEAN | false | Project-wide switch in the dedicated SelfLift workflow. Off uses ordinary single-stage sampling; saved clips are not regenerated automatically. |
| upscaler_model | COMBO | Select an installed LBH H3 3D checkpoint, tridae (FP32 clean-latent 2x; downloads verified weights on first use), or bilinear (spatial-only, no weights). Tr1dae requires final dimensions divisible by 64. Required only when enabled; generic image/LTX upscalers are not compatible. | |
| high_resolution_steps | INT | 21–10000 | Final steps at the Plan's full resolution. Must be lower than each generated scene's total steps (e.g. 6 low + 2 high out of 8). |
| cleanup_between_stagesopt | BOOLEAN | false | Release the retired checkpoint's DynamicVRAM buffers before lifting, and unload the learned upscaler after use. Tr1dae's small legacy upscaler is specifically offloaded to CPU; other classic/non-dynamic models are skipped. Preserves shared models and saved takes; can slow next-scene reloads. |
| lowres_scaleopt | FLOAT | 0.500.25–1 | First-stage width/height relative to the final Plan size, rounded to H3's even latent grid. 0.5 keeps the existing half-resolution behavior. Tr1dae requires an exact 2x lift: use 0.5 and final dimensions divisible by 64. |
| rhoopt | FLOAT | 0.000–1 | Fraction of the most inconsistent latent locations to correct toward a pixel/VAE anchor. 0 keeps the existing direct lift. Above 0 (with w_max > 0) adds a full video VAE decode, pixel resize and VAE encode; costs time/memory and can change detail/color. Experimental, not a guaranteed artifact fix. |
| w_minopt | FLOAT | 0.500–1 | Minimum pixel/VAE correction strength at selected locations. Inactive when rho=0. Must be <= w_max; 0 keeps the direct lift and 1 uses the pixel/VAE anchor. |
| w_maxopt | FLOAT | 1.000–1 | Maximum pixel/VAE correction strength at the most inconsistent locations. Inactive when rho=0. Must be >= w_min; setting both weights to 0 skips the pixel/VAE pass. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| plan | H3_CHAIN_PLAN | — |
| status | STRING | — |