MiniMax H3 Face Refine Manual Review / 人工选择回贴 (Advanced)
The node that forces a human to look before a face fix lands
- base_frames
- candidate_window_frames
- changed_mask
- window_mapping
- review_frames
- result_frames
- accepted_change_mask
- rejected_change_mask
- accepted_frame_count
- rejected_frame_count
- report_json
Here's the uncomfortable truth about face fixing with a video model: the model does not know which face is better. A regeneration that smooths out the melt might also change the identity, the mouth shape, or the lighting - and no loss function is going to argue with you about it. That's why the manual single-window route ends at this node, MiniMaxH3FaceRefineManualReviewT8Advanced: a deliberate human gate that shows you the source window next to the candidate and refuses to let anything change unless you explicitly confirm it. It's the anti-auto-accept node, and it's the whole point of the Window route versus blind batch regeneration.
What it receives
base_frames- your full source timeline (still untouched).candidate_window_frames- what H3 actually generated for the repair window.changed_mask- the MASK marking which pixels the candidate actually changed versus the source. This is the fence: only frames inside this mask are even eligible for acceptance.window_mapping- the mapping fromMiniMaxH3FaceRefineWindowExtractT8Advancedthat tells the node which extracted frames are real repair targets versus context/padding.decision- the combo that does all the work:preview_only,reject, oraccept_selected.accepted_subranges,confirm_accept,edge_fade_frames.
How a decision works
Default is preview_only, and the node leans on that hard: it shows you review_frames (source beside candidate) while the complete source timeline passes through bit-for-bit unchanged. Nothing is decided yet. You look at the candidate - check identity, mouth sync, whether the "fix" is actually better - and then you act:
reject- the candidate is worse or the identity drifted. Output stays original source pixels, exactly. No second-guessing needed, no partial commit.accept_selected- the candidate is good where it changed the face. But notice the two-part guard: acceptance only happens afterconfirm_acceptis switched on, and it can only touch the selected source repair frames inside thechanged_mask.accepted_subrangeslets you narrow further - say only frames 10–16 of a 0–23 window - using the same 0-based inclusive range syntax. Context, padding, and candidate audio can never sneak in; they were never eligible.edge_fade_frames(default 2) - the temporal fade width at the edges of the accepted patch, so the splice doesn't pop against the untouched source.
The two-step accept (decision = accept_selected and confirm_accept = true) isn't bureaucracy. Given how cheap it is to click accept on a bad candidate and bake a wrong identity into your timeline, the explicit confirmation is the safety rail - and the accepted change is meant to be final, not re-litigated.
Outputs
review_frames (the side-by-side you judge), result_frames (source timeline after your decision - the thing you eventually save), accepted_change_mask/rejected_change_mask, accepted_frame_count/rejected_frame_count for a quick numeric read on what landed, and report_json.
Where people get burned
Most common confusion is "I accepted but nothing changed" - which means you're on preview_only with confirm_accept off. That's the node doing its job. The second failure mode is forgetting the philosophy: this node fixes the bad-face window, and the final video always keeps the full original audio track. If the candidate's voice or mouth audio sounds different, that's expected - the window's generated audio is discarded by design. Judge the candidate on pixels and identity, not on audio you were never going to keep.
Example graph: 2026-09-05_H3_Face_Refine_Window_Manual_Review_Advanced_EXP.json under examples/workflows/06-face-refine. Install is the standard pack story: ComfyUI Manager (search "MiniMax H3 Audio T8") or clone + restart. It's marked Advanced EXP, so treat every acceptance as a decision you'll have to live with.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| base_frames | IMAGE | — | |
| candidate_window_frames | IMAGE | — | |
| changed_mask | MASK | — | |
| window_mapping | H3_T8_FACE_REFINE_WINDOW_MAPPING | — | |
| decision | COMBO | preview_only | 3 options: preview_only, reject, accept_selected |
| accepted_subranges | STRING | Optional 0-based inclusive source-frame ranges. Empty means the planned repair range, but only after confirm_accept is enabled. | |
| confirm_accept | BOOLEAN | false | — |
| edge_fade_frames | INT | 20–60 | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| review_frames | IMAGE | — |
| result_frames | IMAGE | — |
| accepted_change_mask | MASK | — |
| rejected_change_mask | MASK | — |
| accepted_frame_count | INT | — |
| rejected_frame_count | INT | — |
| report_json | STRING | — |