MiniMax H3 NFE Run Contract / 断点运行合约编译器 (Advanced EXP/T8)
The immutable JSON receipt that makes NFE resume safe to trust
- positive
- run_contract_json
- contract_sha256
- report_json
MiniMaxH3NFERunContractT8Advanced is the boring half of the pack's NFE checkpoint system, and boring is the point. The Dual-Clock NFE Checkpoint + Resume sampler can only be trusted to resume a render if you can prove the render you're resuming is the render you interrupted. That proof is this node: it compiles the exact final prompt, the media map, the conditioning report, and - here's the part that actually matters - the real contents of the conditioning tensors into one strict, deterministic JSON object.
Why the tensors? Because "the prompt text matches" is a lie waiting to happen. Text can look identical while the conditioning tensors differ - a LoRA loaded in a different order, a CLIP that picked up a changed sidecar file, a reference image that resized differently. The contract hashes the actual conditioning data, chunked through CPU so it doesn't spike VRAM, and folds that digest in with the prompt and media map. If the resume run's tensors aren't byte-identical, the contract hash won't match, and the sampler refuses to continue.
How it works
Feed it the positive conditioning from your Conditioning node, the conditioned prompt string, the media map JSON, and the conditioning report - the same report your Long Video or Prompt Relay Conditioning node emits. It canonicalizes everything into deterministic JSON (field order, whitespace, the works), streams the conditioning tensors through a hash, and emits run_contract_json plus a contract_sha256. That JSON is what you paste into (or wire into) the NFE Resume Sampler's run_contract_json input. The node never mutates conditioning or sampler state - it's a pure witness, an accountant standing to the side taking notes.
This is exactly the "Run Contract compiler" the README points to when it says the NFE system "binds the final prompt, media map, report and actual Conditioning tensors." It's why the resume test the author ran - interrupt at step 2, resume in a new process, bit-identical output - was reproducible instead of lucky.
The inputs that matter
positive- the CONDITIONING output, fed straight from your conditioning node.conditioned_prompt- the final prompt text as encoded.media_map_json- the media binding map (which<Picture N>/<Audio N>maps to what).conditioning_report- the report JSON from the conditioning node. This is the one that trips people up: it's text that happens to be JSON-shaped, and you must connect it here for the compiler to parse it. Do not take that string and jam it into the NFE sampler's JSON input directly - the sampler will reject it with "run_contract_json is required" because a raw report isn't a contract.hash_chunk_megabytes- 8 default; only changes hashing memory/speed, never the resulting hash.
Outputs: run_contract_json, contract_sha256, report_json.
Where it fits
Chain it between your conditioning node and the MiniMaxH3NFEResumeSamplerT8Advanced: the pack's example workflow examples/workflows/04-long-video/2026-08-23_H3_Dual_Clock_NFE_Checkpoint_Resume_Advanced_EXP.json wires the conditioning's four outputs into the compiler and the compiler's JSON into the sampler. Save the contract_sha256 somewhere you can see it - if your resume fails a contract check, that's the fingerprint you compare against the original run to find out which input changed.
Install
Ships in the MiniMax H3 Audio T8 pack (Manager: search "MiniMax H3 Audio T8"):
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
Restart. No pip deps, no model downloads - the contract compiler is pure bookkeeping and runs on anything. It won't make a render resumable by itself; pair it with the NFE sampler and use it as the discipline device it's designed to be.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| conditioned_prompt | STRING | — | |
| media_map_json | STRING | — | |
| conditioning_report | STRING | — | |
| hash_chunk_megabytes | INT | 81–64 | Upper CPU transfer chunk while hashing conditioning tensors. It only changes verification memory/speed, never the contract hash. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| run_contract_json | STRING | — |
| contract_sha256 | STRING | — |
| report_json | STRING | — |