Nodes/MiniMax H3 Audio T8/MiniMax H3 Face Refine Per-Frame Denoise / 逐帧去噪 (Advanced)
ComfyUI Node

MiniMax H3 Face Refine Per-Frame Denoise / 逐帧去噪 (Advanced)

Denoise that scales with face size — 30px faces get more help

By T8mars·Created 20 days ago·Updated a day ago· 807
MiniMax H3 Face Refine Per-Frame Denoise / 逐帧去噪 (Advanced)
  • av_latent
  • face_plan
  • av_latent
  • report_json
strength_small_face0.80
strength_large_face0.35
scale_modeabsolute_px
face_px_small30
face_px_large120
gamma1.00
smooth_frames9
video_mask_modereplace_video_parity
require_locked_audiotrue

Here's the smart bit of the whole face-refine pipeline, and it's a small node that does one thing well. A distant face that's 30 pixels tall needs a much stronger second pass than a close-up that fills 120 pixels - the mush is worse and there's less information to work with. So instead of a single denoise value for every frame, this node applies the audited upstream face-size curve: it reads the face size from the plan (crop height divided by crop factor), maps small faces to a high denoise and large faces to a low one, and smooths the result across frames so it doesn't pulse.

The defaults encode the reference curve: a 30px face maps to strength_small_face (0.8) and a 120px face maps to strength_large_face (0.35), with 9-frame smoothing (smooth_frames). It applies this to the video noise mask only - the nested audio mask stays exactly zero, which is how you guarantee the second pass can't move the sound.

Inputs:

  • av_latent - the latent from the parity latent node (or your own AV latent).
  • face_plan - the parity plan, which supplies the per-frame face sizes.
  • strength_small_face / strength_large_face (0.8 / 0.35) - the curve endpoints. Lower both if identity is drifting; raise the small end if distant faces still aren't cleaning up.
  • face_px_small / face_px_large (30 / 120) - where the curve anchors. If your footage is mostly medium shots, pull face_px_large down so more frames get meaningful denoise.
  • gamma (1) - curve shaping between the endpoints.
  • smooth_frames (9) - temporal smoothing so denoise doesn't flicker frame to frame.
  • scale_mode (absolute_px), video_mask_mode (replace_video_parity), require_locked_audio (true) - contract knobs; leave them alone unless you know better.

Outputs: av_latent (denoise curve applied to the video mask) and report_json so you can see what strength each frame actually got.

The trap: don't read the two strength values as "this is the denoise." The actual per-frame denoise is a curve between them, and the tooltip is the usual pack-level honesty - the curve is the audited upstream behavior, but nothing here is a calibrated quality guarantee. Watch a couple of frames at both ends of the size range when you review; the smoothing exists precisely because per-frame denoise flicker is a classic face-refine artifact.

Install: ComfyUI Manager → "MiniMax H3 Audio T8", or:

cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8

Restart after. No forced pip deps, no downloads. This node is pure latent/mask manipulation - the expensive H3 sampling happens in the sampler nodes you feed the result into.

CategoryT8/MiniMax H3/Quality/Experimental/Face Refine Parity

Inputs (11)

NameTypeDefaultDescription
av_latentLATENT
face_planH3_T8_FACE_REFINE_PARITY_PLAN
strength_small_faceFLOAT0.800–1
strength_large_faceFLOAT0.350–1
scale_modeCOMBOabsolute_px2 options: absolute_px, relative_to_clip
face_px_smallFLOAT301–2048
face_px_largeFLOAT1202–4096
gammaFLOAT1.000.05–8
smooth_framesINT91–121
video_mask_modeCOMBOreplace_video_parity2 options: replace_video_parity, cap_existing
require_locked_audioBOOLEANtrue

Outputs (2)

NameTypeDescription
av_latentLATENT
report_jsonSTRING