Nodes/comfyui-minimax-h3-audio-T8/MiniMax H3 双MODEL潜空间放大长视频 / Dual Model Long Video (EXP/T8)
ComfyUI Node

MiniMax H3 双MODEL潜空间放大长视频 / Dual Model Long Video (EXP/T8)

The 4+4 long-video node

By T8mars·Created about a month ago·Updated a day ago· 1,031
MiniMax H3 双MODEL潜空间放大长视频 / Dual Model Long Video (EXP/T8)
  • model_pass1
  • model_pass2
  • clip
  • video_vae
  • audio_vae
  • prompt_relay_plan
  • drive_audio
  • final_audio
  • first_frame
  • last_frame
  • persistent_identity_image
  • ref_images
  • ref_videos
  • ref_video_audios
  • ref_audios
  • source_motion
  • video
  • video_path
  • manifest_path
  • completed_segments
  • status
  • report_json
low_width512
low_height288
upscaler_model
coarse_steps4
refine_steps4
first_shift_video12.00
first_shift_audio3.00
second_shift_video12.00
second_shift_audio3.00
second_audio_sourceauto
second_audio_strength0.00
chain_idh3_dual_model_long_video
total_duration_seconds24.00
width1024
height576
render_window_frames124
context_frames22
global_prompt
segment_prompts_json
prompt_relay_modedisabled
query_chunk_rows256
eav_modedisabled
eav_tau4.00
eav_start_video_progress0.00
eav_end_video_progress1.00
eav_max_workspace_mib32
eav_g_hard_limit1.50
minimum_free_vram_mib512
base_seed123456789
seed_policyincrement
task_typeauto
context_audiovideo_and_audio
audio_modenative
audio_denoise_strength0.35
add_source_as_referencetrue
prompt_primary_audio_ordinal0
strict_prompt_tagstrue
ref_image_sizematch
reference_video_policyofficial_2_to_15s
first_frame_reusesegment0_only
persistent_identity_strategysingle_reference
persistent_identity_interval1
resume_existingtrue
filename_prefixH3_In_Node_Effects_Long_Video
audio_seam_policycosine_bridge
bridge_ms5.0
bit_depth8
crf18
color_matchtrue
video_context_modereference_only
low_context_sourceindependent_low_x0

Long video with a diffusion model is a stitching problem wearing a costume. The interesting answer in this pack is that you don't have to generate every second of your 24-second clip at full resolution: run a coarse pass at 512×288 on one model, learn-upscale the latent, then refine on a second, independent model at 1024×576. Four steps, upscale, four steps. That's the whole idea, and it's why this node takes two MODEL inputs instead of one.

It's the honest kind of experimental node too. The author's own release notes say the 24-second chains are the ones still failing on seams, and that after a 2026-09-12 fix only the two-segment 8-second template got the "接缝似乎还行 / the seams seem OK" verdict. So: read the 8-second templates as the supported path and 24 seconds as a thing you're allowed to try.

How it works

Everything happens inside this one node, serially - you queue once. For each segment of total_duration_seconds, the first pass samples coarse_steps (default 4) at low_width × low_height, and hands the learned upscaler a predicted clean latent x0, not a noisy mid-trajectory tensor. The learned H3 latent upscaler (models/latent_upscale_models/minimax_h3_latent_upscaler_3d_fp16.safetensors) doubles the latent geometry. Then the second pass runs refine_steps (default 4) on model_pass2 with its own dual-clock, native-flow schedule - not a copy of the first pass's time steps.

Segments overlap by context_frames (default 22, which is 7 latent time units) and render_window_frames defaults to 124, in multiples of 17. chain_id names the resumable job; if you change the prompt, model, LoRA, duration or size, change the id.

Audio is the part to actually understand, because that's what broke in earlier builds. With second_audio_source=auto, a 4+4 pass lets the second sampler finish the audio jointly - only a complete Stock20 first pass locks it. Both spatial continuations then carry the completed audio forward. Older workflows that froze half-finished first-pass audio are migrated, and the log says so. If you want to nudge rather than replace that behaviour, second_audio_strength defaults to 0 and does not override the native mask in auto mode.

color_match (default on) samples the last five frames of the accepted previous segment and applies bounded colour correction to the first 24 frames of the continuation. video_context_mode defaults to reference_only; the EXP alternative, high_native_mask_exp, drops the previous segment's final high-resolution tail into the known region of the second pass and locks it there. Don't switch that mode while reusing a chain_id - the stage cache belongs to the mode.

The inputs you set first

model_pass1 / model_pass2 (each with its own LoRA chain - that's the point), low_width/low_height and the final width/height, upscaler_model, coarse_steps/refine_steps, clip (native H3 Qwen3-VL), video_vae and audio_vae, plus total_duration_seconds, global_prompt and chain_id. There are optional first_frame/last_frame, reference images/videos/audios, drive_audio, final_audio and color_match.

It outputs video, video_path, manifest_path, completed_segments, status and report_json. Wire video into a save/preview node; the manifest is what makes resume work.

Install

ComfyUI Manager → search MiniMax H3 Audio T8, or:

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

Then restart completely. This node adds no Python dependencies of its own, but you need the H3 base models in models/diffusion_models, the Qwen3-VL encoder in models/text_encoders, both VAEs in models/vae, and the latent upscaler in models/latent_upscale_models. No download of the pack's models happens automatically.

Traps, in the order you'll hit them

Both final dimensions must be strictly larger than the first-pass ones, and the target size has to be representable by the learned upscaler's geometry - miss it and you get a geometry error before any GPU work happens, which is the right behaviour and still annoying at 11pm. eav_mode only applies to a Stock20 (coarse_steps=20) first pass; for 4+4 it must stay disabled, so if you turned it on, turn it off.

Resume verifies content: hashes of both models, the upscaler, your media, and the pack's own Python files. Updating the nodes invalidates a half-finished chain, and that's deliberate - just re-run.

And don't stack this with VDN, or with SLA/VSA/Sol-Attn/BlockCache model-takeover nodes. VDN's 8+4 is a different route; two attention owners in one graph is how you get silent wrongness rather than an error message. If you're on 16GB, run one job at a time and lower resolution before you lower step counts.

CategoryT8/MiniMax H3/Long Video/Experimental

Inputs (67)

NameTypeDefaultDescription
model_pass1MODEL
model_pass2MODEL
low_widthINT51232–16384
low_heightINT28832–16384
upscaler_modelCOMBO0 options:
coarse_stepsCOMBO42 options: 4, 20
refine_stepsCOMBO43 options: 3, 4, 5
first_shift_videoFLOAT12.000.01–100
first_shift_audioFLOAT3.000.01–100
second_shift_videoFLOAT12.000.01–100
second_shift_audioFLOAT3.000.01–100
second_audio_sourceCOMBOauto4 options: auto, legacy_policy, first_pass, highres_template
second_audio_strengthFLOAT0.000–1
clipCLIPNative MiniMax H3 Qwen3-VL CLIP.
video_vaeVAE
audio_vaeVAE
chain_idSTRINGh3_dual_model_long_video
total_duration_secondsFLOAT24.000.04–3600
widthINT102432–16384
heightINT57632–16384
render_window_framesINT124124–362
context_framesCOMBO223 options: 5, 22, 39
global_promptSTRINGUsed when Prompt Relay is disabled. With Relay, leave empty or copy the Plan global prompt exactly.
segment_prompts_jsonSTRINGPrompt overrides must be empty when Prompt Relay owns the timeline.
prompt_relay_modeCOMBOdisableddisabled is exact bypass; report_only compiles/projects Relay without attention bias; apply_exp enables the projected route.
query_chunk_rowsINT25632–2048
eav_modeCOMBOdisabledStock20 only. report_only audits CFI/g without modifying attention; apply_exp enables target-video FETA gain.
eav_tauFLOAT4.00-32–32
eav_start_video_progressFLOAT0.000–0.99
eav_end_video_progressFLOAT1.000.01–1
eav_max_workspace_mibINT324–512
eav_g_hard_limitFLOAT1.501–3
minimum_free_vram_mibINT5120–65536Rechecked before every segment; this is a start floor, not a peak guarantee.
base_seedINT1234567890–18446744073709550000
seed_policyCOMBOincrement3 options: increment, fixed, hash_chain_segment
task_typeCOMBOauto7 options: auto, T2VA, I2VA, FL2VA, L2VA, Ref2VA, +1
context_audioCOMBOvideo_and_audio2 options: video_and_audio, video_only
audio_modeCOMBOnative4 options: lock_source, remix_source, reference_only, native
audio_denoise_strengthFLOAT0.350–1
add_source_as_referenceBOOLEANtrue
prompt_primary_audio_ordinalINT00–9
strict_prompt_tagsBOOLEANtrue
ref_image_sizeCOMBOmatch2 options: match, max
reference_video_policyCOMBOofficial_2_to_15s2 options: official_2_to_15s, model_minimum
first_frame_reuseCOMBOsegment0_only2 options: segment0_only, persistent_identity_reference
persistent_identity_strategyCOMBOsingle_reference2 options: single_reference, scene_plus_identity
persistent_identity_intervalINT11–32
resume_existingBOOLEANtrue
filename_prefixSTRINGH3_In_Node_Effects_Long_Video
audio_seam_policyCOMBOcosine_bridge2 options: cosine_bridge, none
bridge_msFLOAT5.00–50
bit_depthCOMBO82 options: 8, 10
crfINT180–51
prompt_relay_planoptH3_T8_PROMPT_RELAY_PLAN
drive_audiooptAUDIO
final_audiooptAUDIO
first_frameoptIMAGE
last_frameoptIMAGE
persistent_identity_imageoptIMAGE
ref_imagesoptCOMFY_AUTOGROW_V3
ref_videosoptCOMFY_AUTOGROW_V3
ref_video_audiosoptCOMFY_AUTOGROW_V3
ref_audiosoptCOMFY_AUTOGROW_V3
source_motionoptH3_T8_DANCE_MOTIONDance RGB motion source. Read a different source interval per segment; generated continuity is separate.
color_matchoptBOOLEANtrueMatch each continuation to the accepted RGB tail; bounded color correction only, not geometry repair.
video_context_modeoptCOMBOreference_onlyEXP: constrain high-pass overlap to the accepted final tail. Audio unchanged; inspect the full continuation.
low_context_sourceoptCOMBOindependent_low_x0Accepted picture: re-encode the previous accepted movie tail for LOW video guidance only. Adds a short VAE encode, no sampling steps. New chain_id when switching. Example reviewed at 0.4MP/8s/22 context/4+4.

Outputs (6)

NameTypeDescription
videoVIDEO
video_pathSTRING
manifest_pathSTRING
completed_segmentsINT
statusSTRING
report_jsonSTRING