MiniMax H3 Skin Finish Studio Timeline / 逐人物肤质时间执行 (Advanced EXP)
Keyframed skin finish, per person, per shot
- frames
- studio_timeline
- timeline_plan
- track_plan
- semantic_skin_mask
- identity_assignment
- audio
- candidate
- source
- selected
- audio
- used_skin_mask
- rejected_skin_mask
- ownership_preview
- skin_finish_state
- report_json
If the Timeline Keyframe node writes the script, the Studio Timeline node is the production. It takes your keyframed timeline_plan and applies it to the exact semantic skin owned by each SAM3.1 person track - deciding, for every frame, whose face gets which treatment at which intensity. It's the most complete node in the Skin Finish family, and it's also the one where every safety decision the pack makes comes together in one place.
How it works
Inputs: frames, a studio_timeline (the shot structure), the timeline_plan (built by chaining Timeline Keyframe nodes), a track_plan (H3_T8_SAM31_MULTIFACE_TRACK_PLAN), the semantic_skin_mask plus its semantic_report_json from the same source-bound Multi-Person Semantic Mask node, and optional identity_assignment and audio.
The routing precedence is explicit and worth memorizing: SAM shot:track → character_id → global → bit-exact source. A shot-local key overrides a character profile; a character profile overrides a global key; anything unmatched stays untouched. And the two hard rules: it never blends across Studio cuts (keyframes interpolate only within their shot), and it never accepts automatically.
Outputs: candidate, source, selected (source until you flip accept_candidate), audio, used_skin_mask, rejected_skin_mask, ownership_preview, skin_finish_state (H3_T8_SKIN_FINISH_STATE, which carries the applied state for downstream nodes), and report_json. Like the Per-Person node, execution_mode (default candidate_only), chunk_frames (2), proxy_long_side (640), and preview_count (6) tune CPU/RAM and the review previews - treatment runs on proxies, masks are built at full res.
Why you'd reach for it
When "one profile for the whole clip" isn't good enough and "one profile per person" isn't good enough either - you need the full matrix: person × shot × time. A character who's subtle in the wide but needs serious oil control in the close-up, or a treatment that eases in across a shot, is exactly this node's job. The ownership_preview output is your friend here: it shows which track owns which mask pixels, so you can catch routing mistakes before accepting anything.
Installing it and gotchas
Pack install: ComfyUI Manager "MiniMax H3 Audio T8", or clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git into custom_nodes, update ComfyUI core, restart. Upstream dependencies: SAM3.1 for the track plan and the pinned ParseNet checkpoint (models/facedetection/parsing_parsenet.pth) for the semantic mask.
Where people get burned: wiring a semantic_report_json from a different source batch - the hash binding breaks and everything routes to source; and expecting cross-cut interpolation, which never happens by design (it would smear treatment across a hard cut). And the eternal pack rule: accept_candidate=false means selected is bit-exact source no matter how good the candidate looks. If you want the applied result, flip the switch after review - not before.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | — | |
| studio_timeline | H3_T8_STUDIO_TIMELINE | — | |
| timeline_plan | H3_T8_SKIN_FINISH_TIMELINE_PLAN | — | |
| track_plan | H3_T8_SAM31_MULTIFACE_TRACK_PLAN | — | |
| semantic_skin_mask | MASK | — | |
| semantic_report_json | STRING | Connect report_json from the same source-bound Multi-Person Semantic Mask node. | |
| execution_mode | COMBO | candidate_only | 3 options: candidate_only, review_only, bypass |
| accept_candidate | BOOLEAN | false | False preserves source on selected output; acceptance is never automatic. |
| chunk_frames | INT | 21–32 | — |
| proxy_long_side | INT | 640128–1280 | — |
| preview_count | INT | 61–8 | — |
| identity_assignmentopt | H3_T8_MULTIFACE_IDENTITY_ASSIGNMENT | — | |
| audioopt | AUDIO | — |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| candidate | IMAGE | — |
| source | IMAGE | — |
| selected | IMAGE | — |
| audio | AUDIO | — |
| used_skin_mask | MASK | — |
| rejected_skin_mask | MASK | — |
| ownership_preview | IMAGE | — |
| skin_finish_state | H3_T8_SKIN_FINISH_STATE | — |
| report_json | STRING | — |