H3 AdaLN LoRA Fix (PDD Standalone)
Why Your H3 LoRA Loads Fine and Does Half Nothing
- model
- MODEL
MiniMax H3 comes in two flavours of the same model: dense builds, and pruned "curve-form" builds that throw away the AdaLN time table and reconstruct the modulation from a fitted curve instead. LoRAs are trained against one of them. Load one against the other and ComfyUI's LoRA loader - which matches by tensor shape and warns when it can't - quietly applies the backbone half of your LoRA and drops the AdaLN half. The LoRA "worked". It just isn't doing the part that tells the model what point of the denoising trajectory it's at.
This node puts that half back. It's a two-input utility, and if your LoRA doesn't touch AdaLN it does nothing at all.
What it does
AdaLN projections end in adaln_proj.linear.weight, and on a pruned base the incoming LoRA delta simply doesn't fit the weight it has to modify. The node scans your model's patches for exactly those keys, keeps the ones that fit, and replaces the ones that don't with an equivalent pair of ComfyUI patches on the weight and its bias - translated through a least-squares basis that takes the dense time curve the checkpoint was pruned from and expresses the delta in curve space.
Two things worth knowing. First, direction is decided by the base, not the LoRA: a pruned base takes dense LoRAs, a dense base takes curve-form LoRAs, and both directions are handled. Second, the result is ordinary ComfyUI patches - no forward hooks, no per-step cost - and in the curve→dense direction it stays factored as low-rank weights, because multiplying the delta out would be a ~1GB tensor per key.
The basis has to come from somewhere, and it's what actually goes wrong when this node does nothing. The node looks for a non-pruned H3 checkpoint in models/diffusion_models, then for h3_silu_temb_grid*.safetensors in models/h3_adaln, models/loras and the other ComfyUI model folders. It scores every candidate against the loaded checkpoint's own table and takes the best fit. If the best fit's relative residual is worse than 5e-3 it refuses to guess.
Inputs and output
Two fields, and that's the whole node.
model- the MODEL after your ordinary LoRA loader(s). That ordering isn't cosmetic; the node can only fix patches that are already attached.mode-port(default) rebases the incompatible patches.stripremoves them without replacing them.offpasses the model through untouched, which is handy for an A/B check on whether the fix is doing you any good.
strip is the honest fallback. If the basis is missing or the fit is too poor, port degrades to strip on its own and logs the reason rather than injecting noise, so a "strip" in the log isn't always something you asked for.
The single MODEL output goes into whatever wants your model next - SamplerCustom, a PDD acceleration node, a guider.
Install
Same pack as the acceleration node: ComfyUI Manager, search "MiniMax H3 PDD Acceleration", or
cd ComfyUI/custom_nodes && git clone https://github.com/lukas-9936/ComfyUI-MiniMax-H3-PDD
Restart. No dependencies, no model downloads - the curve grids ship inside the pack (about 11MB each) and are found automatically. If you prefer them outside the repo, ComfyUI/models/h3_adaln works, but then get the right one: h3_silu_temb_grid_fl2va.safetensors for FL2VA-based pruned models and the b15/b20/b25/b30 hybrids, h3_silu_temb_grid_ref2va.safetensors for Ref2VA-based pruned models. Installing both is fine; the node measures candidates and picks.
Where people get burned
- "no AdaLN basis available." Exactly the grid problem above. Put a non-pruned H3 checkpoint in
models/diffusion_models, or the matching named grid in a model search folder, and retry. - Nothing is logged. The node never takes down a workflow: if the fix throws, it passes your model through unchanged. The only evidence is the console. Look for a
[H3PDD AdaLN]line, and note thatno mismatched AdaLN patchesmeans your LoRA was fine and this node has nothing to do. - "could not be ported." The report names what it skipped: DoRA scale, LoHa/LoKr mid weights,
reshape_weight, and any patch whosestrength_modelisn't 1.0, because a strength that scales the base weight can't be translated. Keep the loader's strength at 1.0 and adjust influence elsewhere, and don't expect DoRA-format H3 LoRAs to survive this. - Don't stack two AdaLN fixes. If you also run PlagueKind Nodes, this node deliberately uses a unique ID so both packs can be installed side by side - but putting both fixes on the same MODEL chain is explicitly not supported. Pick one. For the same reason, this node isn't needed on the acceleration node's own output; that node rebases its AdaLN adapters internally.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | MODEL after the ordinary LoRA loader(s). | |
| mode | COMBO | port | port: rebase incompatible AdaLN patches. strip: remove incompatible patches without replacing them. off: pass the model through unchanged. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |