MAI Concept Inject Delta (alpha)
Put a measured capture back into the model
- model
- model
The mirror of the capture tap. MAI Concept Capture Arm measures what a condition does to MiniMax-H3's internal block states; MAI Concept Inject Delta takes that measurement and puts it back. It loads a delta pack - a .safetensors of per-(block, step) frame_mean maps, optional patch_mean maps, optional full block states, plus a sidecar JSON - and adds it, scaled by alpha, to the target-video rows of the block output. On a clone of the model, like every other patching node in this family, so your original is untouched.
The pack is admirably honest about what this node does and doesn't claim: "It answers one question and holds no theory: does a delta measured at the tap do anything when it is put back?" That's it. This is a scientific instrument, not a filter you drop on your renders.
Run it against its own controls
The whole point is the control enum. If you add a delta and something happens, you don't yet know the something is the delta:
zero- runs every line of the patch with zeroes. If that render differs from the unpatched one, the plumbing itself is the effect.time_shuffle- keeps the delta's energy but destroys its timing. If it renders the same asnone, timing isn't doing the work.space_shuffle- same, but scrambles where the delta sits inside a frame (refused inmode='frame', which has no space axis).sign_flip- the last arm.
control_seed seeds the shuffle permutations on the CPU, so any arm is re-runnable from its label.
The settings that matter
pack_path- absolute path to the pack; its sidecar<pack>.json(or<pack>.safetensors.json) must sit right beside italpha- scale on the delta, default 1.0; negative subtractsmode-frame(one vector per latent frame),separable(frame + patch − grand mean, the rank-2 map, needspatch_meanin the pack), orfull(the whole stored block state, ~160 MB per position, read from disk one at a time on first use)step_mode-captured_onlyfires only on the steps the pack was captured at;nearest_allfires every step using the nearest captured entryblocks- which DiT blocks to inject at; empty means every block the pack carries. Must not collide with a tap's blocks on the same model.
One hard constraint: the pack's (latent_t, frame_rows) must match the run's, or the node refuses before the first block. A different prompt or a different audio length is fine - the delta lives on video rows.
Should you touch it?
Only if you're doing Concept Lab research. The pack itself flags the whole subsystem as alpha and its conversion pipeline (capture → factor → conditioning) as not yet built. If that describes you, it's a genuinely careful piece of instrumentation with real experimental hygiene - the controls, the mismatch refusal, the read-one-at-a-time full mode are all things a sloppier tool wouldn't bother with. It ships in ComfyUI-MAINodes (GPL-3.0, matlowai):
cd ComfyUI/custom_nodes
git clone https://github.com/matlowai/ComfyUI-MAINodes
Restart, find it under MAI/concept (alpha), and remember H3's weights are licence-restricted in the US, EU, UK and Korea - if you're capturing and injecting, you're doing it somewhere the model is legal to run.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | a patched CLONE comes out; the input is untouched | |
| pack_path | STRING | absolute path to the pack .safetensors; its sidecar <pack>.json (or <pack>.safetensors.json) must sit beside it | |
| blocks | STRING | comma-separated DiT blocks to inject at; empty = every block the pack carries. Must not collide with a tap's blocks on the same model | |
| alpha | FLOAT | 1.00-8–8 | scale on the delta; negative subtracts |
| step_mode | COMBO | captured_only | captured_only fires only on the steps the pack was captured at; nearest_all fires every step using the nearest captured entry |
| mode | COMBO | frame | frame = one vector per latent frame; separable = frame + patch - grand mean, the rank-2 map (needs patch_mean in the pack); full = the whole stored block state, row for row (needs full states in the pack, ~160 MB each, read one at a time) |
| control | COMBO | none | the arm: none / zero (plumbing control) / time_shuffle (same energy, wrong timing) / space_shuffle (same energy, wrong place; refused in mode 'frame', which has no space axis) / sign_flip |
| control_seed | INT | 00–4294967295 | seeds the shuffle permutations, on the CPU, so an arm is re-runnable from its label |
| cond_onlyopt | BOOLEAN | true | inject only on the conditional forward; CFG makes two per step and they are two different conditions |
| enabledopt | BOOLEAN | true | False installs the patches and adds NOTHING: the pass-through control |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |