MiniMax H3 Dual-Clock NFE Checkpoint + Resume / 双时钟步边界断点恢复 (Advanced EXP/T8)
Checkpointing H3 mid-render at exact step boundaries, then resuming in a fresh process
- model
- av_latent
- model
- sampler
- sigmas
- status
- checkpoint_path
- report_json
ComfyUI crashes are a fact of life with a 33B model. The usual recovery is "start over and hope it doesn't die at step 40 again." MiniMaxH3NFEResumeSamplerT8Advanced is the pack's serious answer: an Euler dual-clock sampler that can checkpoint after every completed NFE step and resume from the last valid boundary - even in a completely new ComfyUI process. The author actually proved it: a real 256×256×22, 4-step H3 task was interrupted at step 2, resumed in a fresh process, and the final AV latent, decoded RGB, and PCM audio were bit-identical to the uninterrupted control run.
But read the fine print before you get excited, because this thing is picky on purpose.
What it supports (and what it refuses)
Only the pack's own dual_clock_euler sampler with native_flow scheduling. That's it. DPM++, SDE/ancestral samplers, third-party samplers, and any interruption that lands inside a transformer forward pass all fail closed. Mid-forward recovery is not a thing here - the checkpoint is only written at completed NFE boundaries, atomically, so you're never restoring a half-finished step. "Exact continuation is supported only for T8 dual_clock_euler/native_flow" is a hard check in the code, not a suggestion.
The write location is output/MiniMaxH3/nfe_checkpoints/ with a .h3nfe.safetensors extension. Relative paths only - absolute paths, path traversal, and symlinks are rejected outright. Use a unique filename per render, because a stale checkpoint from a different run will fail the contract checks.
The inputs that matter
mode-disabled(default): performs the same Euler math but writes nothing, so you can keep the node in a workflow and it behaves like a normal sampler.checkpoint_each_step: writes after every completed NFE, requires the safety gate below.resume: loads the last valid boundary and emits only its remaining sigmas.confirm_checkpoint_write- the safety gate. Required forcheckpoint_each_step. Inresumemode,falsemeans read-only;truealso advances the checkpoint as you go.model_contract_id- required outside disabled mode. Record the exact base checkpoint/hash, every LoRA and strength, and any attention/model wrappers. A mismatch blocks resume. The tooltip is honest that this text doesn't hash all your loaded weights - it's a discipline aid, not cryptographic proof.run_contract_json- required non-empty JSON outside disabled mode. Connect theMiniMaxH3NFERunContractT8Advancedoutput here. Do not wire the plain conditioning report text into this - that's text, not valid JSON, and the node will tell you so.steps,shift_video(12),shift_audio(3) - the usual dual-clock knobs; keep them identical between runs or the resume sigma check fails.
Outputs: model, sampler, sigmas (in resume mode, only the remaining ones), status, checkpoint_path, report_json.
Where people get burned
The classic chain of misery: swap the scheduler, change the seed, edit the prompt, or reorder LoRAs between the checkpoint and the resume. Each one is a deliberate mismatch that fails closed - "resume seed does not match checkpoint seed", "resume sigmas do not match the checkpoint's remaining schedule", "scheduler is not native_flow". These aren't bugs; they're the feature. If you want checkpoints that survive edits, keep the contract node's JSON and the model_contract_id in a text file next to your workflow and treat them as immutable once sampling starts.
Install
This is part of the MiniMax H3 Audio T8 pack - Manager search "MiniMax H3 Audio T8", or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
Restart. No forced pip dependencies; the pack doesn't auto-download H3 weights. The example lives at examples/workflows/04-long-video/2026-08-23_H3_Dual_Clock_NFE_Checkpoint_Resume_Advanced_EXP.json - that workflow shows the required wiring, including the four conditioning outputs feeding the Run Contract compiler. And remember: one passing test on a fixed contract proves that contract, not that every workflow is now crash-proof.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| av_latent | LATENT | — | |
| steps | INT | 81–100 | — |
| shift_video | FLOAT | 12.000.01–100 | — |
| shift_audio | FLOAT | 3.000.01–100 | — |
| mode | COMBO | disabled | disabled performs the same Euler math without file I/O; checkpoint_each_step writes after every completed NFE; resume loads the last valid boundary and emits only its remaining sigmas. |
| checkpoint_path | STRING | h3_nfe_resume.h3nfe.safetensors | Relative path under output/MiniMaxH3/nfe_checkpoints. Absolute paths, traversal and symlinks are rejected. Use a unique name per render. |
| model_contract_id | STRING | Required outside disabled mode. Record the exact base checkpoint/hash, all LoRAs and strengths, and attention/model wrappers. A mismatch blocks resume; the node does not pretend this text hashes all loaded weights. | |
| run_contract_json | STRING | {} | Required non-empty JSON outside disabled mode. Connect the MiniMax H3 NFE Run Contract output, or paste another strict immutable JSON object. The plain Conditioning report is text, not valid JSON. |
| confirm_checkpoint_write | BOOLEAN | false | Safety gate. Required for checkpoint_each_step. In resume mode, false continues read-only; true also advances the same atomic checkpoint. |
| allow_replace_existing | BOOLEAN | false | Only for intentionally starting a new session at an existing path. Resume of the already verified same session does not need this switch. |
| hash_chunk_megabytes | INT | 81–64 | Upper CPU chunk used to verify every checkpoint tensor. It changes verification memory/speed, never the mathematical state. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| sampler | SAMPLER | — |
| sigmas | SIGMAS | — |
| status | STRING | — |
| checkpoint_path | STRING | — |
| report_json | STRING | — |