Nodes/comfyui-minimax-h3-audio-T8/MiniMax H3 Subject-Safe RGB Composite / 人物安全RGB合成 (v8 Advanced EXP)
ComfyUI Node

MiniMax H3 Subject-Safe RGB Composite / 人物安全RGB合成 (v8 Advanced EXP)

Subject-safe RGB compositing done honestly

By T8mars·Created about a month ago·Updated a day ago· 1,031
MiniMax H3 Subject-Safe RGB Composite / 人物安全RGB合成 (v8 Advanced EXP)
  • base_frames
  • refined_frames
  • subject_alpha
  • protect_mask
  • audio
  • selected
  • candidate
  • source
  • used_alpha
  • audio
  • report_json
accept_candidatefalse
mask_modeinput_alpha_exact
mask_frame_policystrict_exact
minimum_subject_area0.002
maximum_subject_area0.45
maximum_centroid_jump0.080
strictnessfallback_on_contract_failure
chunk_frames4

Two-pass upscaling has a default failure: the refine pass is so good at your subject that it's also great at wrecking your background. Faces get the detail they need, but the wall behind the singer picks up new texture, the grass drifts, and suddenly the "better" T2 render has background you didn't ask to change. The brute-force fix - composite the refined candidate only where a mask says the subject is - usually comes with an automation rabbit hole: the node tries to detect the person, gets it wrong on frame 47, and you ship a mask error you never saw.

The manual compositor

This node refuses that rabbit hole. Subject-Safe RGB Composite is an explicitly manual post-process: you bring in base_frames (the D0 pass that owns everything), refined_frames (the T2 candidate that's good for your subject), and - the load-bearing input - subject_alpha, a reviewed per-frame mask you made yourself. The compositor blends T2 only inside that alpha. Where the alpha is zero, the output is D0 by construction, pixel for pixel. No automatic person, face, text, camera or quality decision happens anywhere in this node. That's not a limitation; it's the entire design. Its own description says it plainly: no automatic decision is performed.

Defaults that enforce the honesty

The defaults enforce the honesty. accept_candidate is false - until you flip it on, the selected output stays on D0 even if a candidate is sitting in the other socket. You render the candidate, review it at full speed, then enable acceptance. mask_frame_policy defaults to strict_exact: one alpha frame for every video frame, or it refuses - no silently broadcasting a single mask across the whole clip, which is how mask misalignment sneaks in. mask_mode (input_alpha_exact default, or threshold_binary) and a small contract-audit set - minimum_subject_area (0.002), maximum_subject_area (0.45), maximum_centroid_jump (0.08) - catch a mask that claims an implausible region or jumps around frame to frame. strictness defaults to fallback_on_contract_failure: any violation and the whole thing falls back to D0 source rather than pushing a suspect composite. Flip it to audit_only if you want to watch instead of fall back.

Outputs

Outputs: selected (the frame you should actually save - D0 until you accept), candidate, source (clean D0), used_alpha (the exact mask that was applied, for your own verification), audio, and report_json. The audio output matters in the two-pass context: the D0/source audio is returned as the exact same object, untouched - consistent with this pack's rule that refined passes never get to mangle the original audio.

Two optional inputs round it out: protect_mask, which removes T2 ownership from regions you care about (a face, a subtitle, a logo - one frame of T2 influence there and it's gone), and audio, passed through unchanged. chunk_frames (default 4) controls processing granularity.

Where it fits

Where it lives in the pipeline: the 13-latent-upscale post-process for the learned two-pass route, when the refine pass is best-in-subject but not background-safe. The intended usage per the workflow docs: D0 and T2 must come from the same source with identical frames, size, timeline and color path; the alpha should be a lossless greyscale video (black = keep D0, white = take T2); and people-adjacent regions you can't afford to lose go to zero in the alpha up front, or into protect_mask.

Honest boundaries, straight from the author: it does not detect or track people, faces, text, occlusion or camera motion, and multi-person crossings, whip pans, smoke, glass and semi-transparent materials are explicitly unvalidated. Two human-reviewed samples came out as non-inferior ties - one with a local bag-detail note. This is a compositor with strong input discipline, not a magic blender.

Installing it

Install: ComfyUI Manager search MiniMax H3 Audio T8, or git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git into custom_nodes, then restart - after updating ComfyUI core first. The dated v8 workflow in 13-latent-upscale shows D0/T2/alpha loading and the review gate wiring.

CategoryT8/MiniMax H3/Latent Upscale/Experimental

Inputs (13)

NameTypeDefaultDescription
base_framesIMAGED0/base frames that own the background.
refined_framesIMAGET2/refined frames for the subject only.
subject_alphaMASKReviewed per-frame final alpha. Zero means exact D0 ownership.
accept_candidateBOOLEANfalseFalse keeps selected output on D0. Enable only for a reviewed candidate.
mask_modeCOMBOinput_alpha_exact2 options: input_alpha_exact, threshold_binary
mask_frame_policyCOMBOstrict_exactStrict requires one alpha frame for every video frame.
minimum_subject_areaFLOAT0.0020–1
maximum_subject_areaFLOAT0.450–1
maximum_centroid_jumpFLOAT0.0800–1
strictnessCOMBOfallback_on_contract_failure2 options: fallback_on_contract_failure, audit_only
chunk_framesINT41–32
protect_maskoptMASKOptional face/text/identity protection; one removes T2 ownership.
audiooptAUDIOD0/source audio is returned as the exact same object.

Outputs (6)

NameTypeDescription
selectedIMAGE
candidateIMAGE
sourceIMAGE
used_alphaMASK
audioAUDIO
report_jsonSTRING