MiniMax H3 Skin Finish Video Stream / 两遍低内存肤质收尾 (Advanced)
Skin finish on a long H3 clip without ever materializing all the frames
- source_video
- video
- saved_path
- report_json
Here's the pain this node exists for: a long H3 video finishes decode, and the image-based Skin Finish nodes want the whole frame batch in memory at once. On a 16GB card that's where the fun stops. MiniMaxH3SkinFinishVideoStreamT8Advanced is the pack's two-pass, file-streaming answer - it consumes the untrimmed file-backed VIDEO directly, never calls GetVideoComponents, and never builds a complete IMAGE batch.
Two passes, low memory:
- Pass 1 reads the video and keeps only tiny per-frame metadata: pinned CPU YuNet face boxes, scene-cut positions, and a source summary. No images retained.
- Pass 2 walks the file in bounded chunks (default 4 frames), applies the same conservative skin finish to each chunk, incrementally encodes H.264, and packet-copies the verified source audio.
Peak memory for the post-processing stage drops dramatically, because you're holding 4 frames instead of 124. The author is careful to scope the claim: this lowers the memory of this stage only - it's not a claim that the generation chain, encoder, arbitrary long clips, or universal 16GB safety are certified.
The controls that matter
Most are the same as the image-based finish: preset (subtle/oil_control), amount, texture_keep, shine_control, face gates like detection_threshold (0.45), minimum_face_height_px (24), minimum_detail (0.01), bbox_ema_alpha (0.55) for smooth box tracking, and scene_cut_threshold (0.28) so boxes reset at cuts. maximum_faces (4), mask_feather_px (3), proxy_long_side (640) and chunk_frames (4) bound the work per chunk.
Then the file-level bits: filename_prefix (default MiniMaxH3/SkinFinish/stream_skin_finish), crf (18), and - the gate that matters - accept_candidate. While false, the node returns the source VIDEO with no analysis and no file writes. Nothing gets analyzed, nothing gets written, until you choose to render a review candidate.
Outputs are video, saved_path, and report_json.
Requirements and quirks
- FFmpeg on PATH. Hard dependency for the file-level path, same as Video Finalize. Missing FFmpeg = explicit accept fails closed.
- Untrimmed 8-bit SDR file VIDEO, plus the local YuNet detector. HDR/10-bit, rotated, cropped or unknown codecs are refused.
- Single-threaded encode + strict decode before publish. Same
libx264 threads=1+-xerror -err_detect explodecorrectness posture as Video Finalize - this pack found multithreaded encoding could produce corrupt-but-look-right files on Windows, and refuses to ship those.
Reference workflow: examples/workflows/17-skin-finish/2026-08-24_H3_Skin_Finish_Two_Pass_Video_Stream_Advanced_EXP.json (it hooks into the Long Video / Studio final file).
Install
Pack standard:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
then restart ComfyUI (or search "MiniMax H3 Audio T8" in Manager). No extra pip packages, no model downloads beyond the existing YuNet.
Where it differs from Video Finalize: Finalize wants your full processed_frames IMAGE batch in memory and is for clips you've already reviewed; this node never materializes the batch and is for long files where memory is the constraint. If your clip is short, Finalize is simpler. If it's long and your card is groaning, this is the one.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| source_video | VIDEO | — | |
| preset | COMBO | subtle | 2 options: subtle, oil_control |
| amount | FLOAT | 0.350–1 | — |
| texture_keep | FLOAT | 0.900–1 | — |
| shine_control | FLOAT | 0.350–1 | — |
| detection_threshold | FLOAT | 0.450.1–0.95 | — |
| minimum_face_height_px | FLOAT | 244–512 | — |
| minimum_detail | FLOAT | 0.0100.001–0.1 | Downweights already blurred faces; this node never sharpens or reconstructs missing detail. |
| bbox_ema_alpha | FLOAT | 0.550–1 | — |
| scene_cut_threshold | FLOAT | 0.280.05–1 | — |
| maximum_faces | INT | 41–12 | — |
| mask_feather_px | INT | 30–64 | — |
| proxy_long_side | INT | 640128–1280 | — |
| chunk_frames | INT | 41–32 | — |
| filename_prefix | STRING | MiniMaxH3/SkinFinish/stream_skin_finish | — |
| crf | FLOAT | 180–51 | — |
| accept_candidate | BOOLEAN | false | False returns the source VIDEO without analysis or file writes. Enable only after choosing to render a review candidate. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| saved_path | STRING | — |
| report_json | STRING | — |