FastH3 V2 · Save Bound Candidate, Not Accepted (T8 EXP)
The FastH3 V2 candidate writer
- media_receipt
- candidate_json_path
- candidate_video_path
- source_provenance_path
- report_json
What it is
The word doing all the work in the title is not. This node writes your rendered segment to disk as a candidate - a durable file plus a sidecar recording where it came from - and then stops. It does not accept it. Acceptance is a separate, explicit, human step in this pack, and this node is careful to leave that door shut.
It's a terminal node (it executes and produces output), which makes it the natural end of the sampling half of a split graph. If you're used to "the render finished, so the clip is done," this pipeline will feel pedantic for about one run and then you'll appreciate it: a candidate you haven't accepted can be reviewed, rejected, and re-rendered without anything downstream having consumed it.
How it works
It consumes exactly one thing: media_receipt, the typed receipt from the decode-and-trim node. That's a deliberate narrowing - this node won't take raw frames, won't take a video object, won't take a path you typed. It requires the provenance a real decode produced, and it writes the durable candidate through the pack's existing candidate writer, adding a source-provenance.json sidecar alongside.
candidate_id (optional, blank by default) is your label for the segment. Blank is fine and the pack will name it; set it when you're juggling several candidates for the same chain and want to tell them apart in the filesystem.
Outputs are all paths: candidate_json_path, candidate_video_path, source_provenance_path, and report_json. The JSON path is the one you'll copy-paste into the review node later - that's the handoff from the render half of your session to the review half, and it's a file path rather than a live wire on purpose. The pack is built so you can close ComfyUI, sleep, and review tomorrow.
The honest caveat about the sidecar
The pack's own workflow notes say this plainly, and it's worth repeating: the candidate sidecar is local integrity tracking, not a digital signature. It proves the file on disk matches what the graph wrote. It doesn't prove the render is good, and it doesn't prove anything to anybody but you. Treat it as a bookmark that self-validates, not as a chain of custody.
Where it fits
Sampling → decode/trim → here → colour match (optional) → review and explicit accept → chain verification → compose. The raw path and the colour-matched path both exist: this node writes the uncoloured candidate, and the coloured writer does the same job for the output of the colour-match node. Keeping both is what lets you compare "with colour match" and "without" on the same render rather than re-rendering to find out.
Install
ComfyUI Manager → MiniMax H3 Audio T8, or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Fully restart ComfyUI, refresh the browser. Note that Manager's listing and the GitHub release are published independently - if Manager is showing an older version than the repo, install from GitHub. There's no pip step at all: the pack's requirements.txt is intentionally empty so nothing can replace ComfyUI's Torch/CUDA stack, and optional EXP features check their own dependencies only when they're used. You need a recent ComfyUI with native H3 support, H3 weights in models/diffusion_models, Qwen in models/text_encoders, both VAEs in models/vae, and the FastH3 V2 ConvRot INT8 checkpoint.
Where people get burned
The complaint that comes up most often is "the node ran but nothing happened" - which in practice means nothing downstream ran. This is a terminal node; if it's not connected to the output side of your graph, or you've cued only part of the workflow, it can look like a no-op. Check that it actually appears in the executed node list.
The second one is subtler: writing candidates for two different chain IDs into the same folder and then feeding the wrong JSON into review. The review gate will notice (it checks the chain, the parent and the media hashes), but the error message is about provenance, not about file paths, so it can read as a mystery. Name your candidates.
And if you're expecting this to also publish or assemble the clip: it won't, by design. Composition happens after acceptance, and only if every segment in the chain was accepted.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| media_receipt | T8_FAST_H3_V2_CURRENT_MEDIA_RECEIPT | — | |
| candidate_id | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| candidate_json_path | STRING | — |
| candidate_video_path | STRING | — |
| source_provenance_path | STRING | — |
| report_json | STRING | — |