MiniMax H3 Save Candidate / 保存候选片段 (EXP/T8)
Save a segment without touching your accepted history — the candidate half of long video
- frames
- audio
- av_latent
- candidate_json_path
- candidate_video_path
- report_json
H3 tops out around 15 seconds a clip, so "long video" in this pack means something specific: you render one segment, review it, accept it, and chain the next segment's context from what you accepted. The two words that keep that pipeline honest are candidate and accepted. This node is the candidate side - it atomically writes only the current trimmed segment plus its bounded audio-video tail, and it does not touch your accepted history. Nothing gets promoted until a human (or the explicit auto-accept node) says so.
It's in T8/MiniMax H3/Long Video/Experimental, and it's the node that actually needs ffmpeg on your PATH - the README says so up front: candidate saving and final compose require it, and the node errors clearly before writing anything if it's missing.
How it works
You feed it the rendered frames (IMAGE), audio (AUDIO), and the av_latent they came from, plus the bookkeeping that ties this segment into a chain: chain_id (default my_h3_long_video), segment_index, timeline_start_seconds, and - critically - the parent_candidate_id and parent_manifest_revision. That parent link is what prevents a stale continuation from being accepted later: the manifest knows which candidate each segment was built on, so a segment rendered from outdated context can't quietly claim the chain.
save_context (default true) writes the bounded AV tail that the next segment's conditioning needs. candidate_id defaults to blank, which means "generate a unique id" - the tooltip's advice is the part to remember: set a new id for every intentional re-roll, or the manifest can't tell your second attempt from your first.
You also record provenance: model_id, sampling_summary (default dual_clock_euler/native_flow), prompt, seed, bit_depth (8) and crf (18) for the MP4 encode.
The inputs that matter
frames/audio/av_latent- the render. All three required.chain_id+segment_index+parent_candidate_id+parent_manifest_revision- the identity that keeps the chain consistent. Get the parent from Accepted Context Load, not from memory.save_context- leave true; the next segment needs the tail.candidate_id- blank for a fresh try, explicit for a re-roll.
Outputs
candidate_json_path and candidate_video_path (the descriptor and the MP4 - wire the descriptor to Review & Accept), plus report_json.
Installing it
Pack install: ComfyUI Manager → "MiniMax H3 Audio T8", or git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8 into ComfyUI/custom_nodes, restart. No mandatory pip deps - but ffmpeg must be callable from PATH or this node refuses before writing.
Common issues
"ffmpeg not found" before anything is written. That's the fail-fast doing its job. Install ffmpeg (standard ComfyUI portable builds usually include it) and make sure it's on PATH, not just somewhere on disk.
The manifest rejects your candidate as a stale continuation. The parent_candidate_id you fed didn't match the accepted manifest. Pull it from Accepted Context Load's accepted_candidate_id output instead of typing it from memory - this is exactly the staleness trap the parent link exists to catch.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | — | |
| audio | AUDIO | — | |
| av_latent | LATENT | — | |
| chain_id | STRING | my_h3_long_video | — |
| segment_index | INT | 00–99999 | — |
| timeline_start_seconds | FLOAT | 0.0000–86400 | — |
| save_context | BOOLEAN | true | — |
| parent_candidate_id | STRING | — | |
| parent_manifest_revision | INT | 00–999999 | — |
| candidate_id | STRING | Blank creates a unique id. Set a new id for every intentional re-roll. | |
| model_id | STRING | unknown | — |
| sampling_summary | STRING | dual_clock_euler/native_flow | — |
| prompt | STRING | — | |
| seed | INT | 00–18446744073709550000 | — |
| bit_depth | COMBO | 8 | 2 options: 8, 10 |
| crf | INT | 180–51 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| candidate_json_path | STRING | — |
| candidate_video_path | STRING | — |
| report_json | STRING | — |