Nodes/comfyui-minimax-h3-audio-T8/MiniMax H3 Long Video Voice Context / 长视频人物音色与句界 (Advanced EXP/T8)
ComfyUI Node

MiniMax H3 Long Video Voice Context / 长视频人物音色与句界 (Advanced EXP/T8)

Keep the right voice on the right character across long H3 segments

By T8mars·Created about a month ago·Updated a day ago· 1,031
MiniMax H3 Long Video Voice Context / 长视频人物音色与句界 (Advanced EXP/T8)
    • voice_context_plan
    • segment_prompts_json
    • audio_pin_frames_json
    • ready
    • first_shot_review_required
    • report_json
    chain_idmy_h3_voice_context
    total_duration_seconds30.00
    render_window_frames124
    context_frames22
    global_prompt
    dialogue_timeline_json[{"character_id":"Character_A","text":"你好。","start_seconds":0,"end_seconds":1.5}]
    voice_bindings_json{"Character_A":1}
    cross_boundary_policyabstain
    first_shot_review_requiredtrue

    Long H3 videos have a voice problem. H3 can pin a character's look across segments, but the audio side of a multi-segment shoot drifts the same way the picture does: segment three's line reads flat, the wrong voice sneaks in for a character, or a sentence is cut mid-word at a segment boundary. This node is the planning layer that keeps voices and sentence boundaries consistent across the long-video runtime. It doesn't touch a single waveform - it never reinjects or cuts audio - what it does is compile the plan: which character is bound to which <Audio N> tag, exactly where audio should be pinned in global and local frame coordinates, and what each segment's prompt should say to keep the voice honest.

    Think of it as the translation between your story and the model's media tags. You tell it who's talking when, in a timeline; it turns that into per-segment prompts and audio pin frames that the long-video runtime can actually use. The output plugs straight into the existing long-video pipeline - this is a companion for the established runtime, not a new renderer.

    Inputs that matter

    • chain_id - names the job (default my_h3_voice_context)
    • total_duration_seconds (30), render_window_frames (124), context_frames (5/22/39, default 22) - the segmentation grid
    • global_prompt - the story-level prompt
    • dialogue_timeline_json - the actual script, as JSON: character, text, start/end seconds. The default is a one-line example (Character_A saying "你好。"), which shows the shape
    • voice_bindings_json - who gets which audio slot: {"Character_A": 1} means Character_A is bound to <Audio 1>
    • cross_boundary_policy - default abstain; how to handle a sentence that would span a segment boundary (abstain = don't force it, which is the safe choice)
    • first_shot_review_required (true) - whether to demand a human review of the first shot before release

    Outputs: voice_context_plan, segment_prompts_json (the per-segment prompts to feed the runtime), audio_pin_frames_json (the exact global/local pin frames), ready (BOOLEAN), first_shot_review_required, and report_json.

    Installing it

    Part of the T8mars/comfyui-minimax-h3-audio-T8 pack - search "MiniMax H3 Audio T8" in ComfyUI Manager, install, restart, or:

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

    Update ComfyUI first (recent core: comfy_api.latest, comfy.weight_adapter, comfy.patcher_extension, comfy.ldm.minimax); requirements.txt is intentionally empty.

    Where people get burned

    The numbering. This node's whole job is correct <Audio N> bindings, and the pack's standing rule is that media tags must match the connected inputs - here that means voice_bindings_json must line up with the audio slots the runtime actually has. Mismatch the numbers and you'll get a confident plan that voices the wrong characters. The other trap is cross_boundary_policy: a sentence that must cross a segment boundary is a real problem, and abstain handles it by refusing to force it - which is safe but means the sentence may just get clipped or rephrased by the runtime. If your script has long sentences, budget the dialogue so lines land inside segments, not across them. And remember this is a planning node: it produces JSON, not audio. The actual waveform is generated by the long-video runtime downstream, and first_shot_review_required is where the human gets to verify the voice actually stuck before the chain runs away.

    CategoryT8/MiniMax H3/Long Video/Advanced

    Inputs (9)

    NameTypeDefaultDescription
    chain_idSTRINGmy_h3_voice_context
    total_duration_secondsFLOAT30.000.04–3600
    render_window_framesINT124124–362
    context_framesCOMBO223 options: 5, 22, 39
    global_promptSTRING
    dialogue_timeline_jsonSTRING[{"character_id":"Character_A","text":"你好。","start_seconds":0,"end_seconds":1.5}]
    voice_bindings_jsonSTRING{"Character_A":1}
    cross_boundary_policyCOMBOabstain2 options: abstain, duplicate_exact_text_exp
    first_shot_review_requiredBOOLEANtrue

    Outputs (6)

    NameTypeDescription
    voice_context_planH3_T8_LONG_VIDEO_VOICE_CONTEXT_PLAN
    segment_prompts_jsonSTRING
    audio_pin_frames_jsonSTRING
    readyBOOLEAN
    first_shot_review_requiredBOOLEAN
    report_jsonSTRING