Nodes/comfyui-minimax-h3-audio-T8/H3 Manual Second Pass · Separate Stage Setup (T8 EXP)
ComfyUI Node

H3 Manual Second Pass · Separate Stage Setup (T8 EXP)

Two passes you wire yourself, exactly like the old runner did

By T8mars·Created 2 months ago·Updated about 7 hours ago· 1,158
H3 Manual Second Pass · Separate Stage Setup (T8 EXP)
  • model
  • av_latent
  • model
  • sampler
  • sigmas
  • stage_context
  • report_json
◄stagemanual_first►
◄first_steps20►
◄manual_sigmas0.5,0.412,0.35,0►
◄shift_video12.0►
◄shift_audio3.0►
◄sampler_namedual_clock_euler►
◄schedulernative_flow►

What it is

The pack's long-video runners have always had a "manual second pass" inside them: a full first pass, then a second descent on a hand-written video sigma schedule. This node opens that box. Two instances, one per stage, each preparing a MODEL, a SAMPLER, a SIGMAS tensor and an immutable stage_context - and neither of them sampling anything.

You use it when you want the second pass to be a real second pass with its own model, its own LoRA, its own prompt and its own noise, instead of whatever the monolithic runner decided. That's a meaningful difference for music-video and look-development work: pass one establishes structure, pass two restyles it or pushes detail.

Inputs

  • model, av_latent - the stage's model and the AV latent it will sample. For the second stage, that latent is the first stage's output.
  • stage - manual_first or manual_second.
  • first_steps - default 20. Used by the first stage; the second stage takes its step count from the sigma string instead.
  • manual_sigmas - default "0.5,0.412,0.35,0". That's the video sigma schedule for the manual second descent, and the terminal 0 is doing real work: it's what makes it a complete pass.
  • shift_video / shift_audio - 12 / 3. The AV clock shifts; they must be positive finite numbers and they're bound into the stage context, so they can't quietly drift between the setup and the sampler.
  • sampler_name - default dual_clock_euler, from the pack's Core sampler options.
  • scheduler - default native_flow.

Outputs: model, sampler, sigmas, stage_context, report_json.

The wiring rule people get wrong

First stage's output goes to the second stage's latent_image. Not denoised_output. Not a learned-upscale handoff. This route deliberately has no upscaler pasted in the middle - the node description says it in as many words, because every other two-pass route in this pack does use denoised_output plus an upscaler, and muscle memory will betray you.

Also: each stage gets its own fresh NOISE. The second pass is not continuing a trajectory; it's a new descent from 0.5. To reproduce what the old runner did, keep the same seed, batch index, native mask and FreeNoise segment_index on both stages.

The certification caveat

dual_clock_euler and euler are the two samplers with completion and cross-process resume adapted. Other Core samplers still run - the pack won't stop you - but they don't get certified completion or portable stage reuse, because their multi-evaluation internals aren't covered. If you plan to freeze the first pass and re-run only the second in a fresh process, stay on those two.

The stage_context output is a descriptor, not a tensor receipt and not a checkpoint. Ordinary ComfyUI caching still decides what re-runs in-session.

FreeNoise, if you're using it

The bundled graphs come in native-noise and FreeNoise flavours (examples/workflows/43-manual-second-pass). For FreeNoise you need MiniMaxH3StageNoiseEXPT8 explicitly in the graph with from_model_plan selected - a plan sitting on the MODEL is not consumed by a plain RandomNoise. Same segment_index on both stages, or the two halves won't line up.

Install

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

ComfyUI Manager: search MiniMax H3 Audio T8, install, then fully quit and restart ComfyUI, then refresh the browser. Manager's registry and the GitHub releases move independently - clone if Manager looks behind.

Models: H3 transformer in models/diffusion_models, Qwen3-VL text encoder in models/text_encoders, video and audio VAEs in models/vae, LoRAs in models/loras - and use the workflow's named LoRA, because this pack's acceleration LoRAs are not interchangeable. The repo installs no packages at all; requirements.txt is intentionally empty of them so a fresh install can't replace ComfyUI's torch/CUDA stack.

Common issues

Second pass looks like a whole different clip. You probably fed denoised_output instead of output, or changed the seed between stages. Both are one-wire fixes.

Audio is noisy or oddly quiet after pass two. In this pack that's almost always sampler/scheduler/steps or the video/audio shifts, or a swapped LoRA - not the setup node. Check shift_video/shift_audio match what you intended, and don't drop a generic EMA or turbo LoRA in to compensate.

Save/restore of the first pass doesn't resume. That needs a sampler the pack certifies (dual_clock_euler or euler), plus the frozen first stage's output slot and real path/SHA values. You also have to keep the conditioning geometry identical when you resume.

Red nodes. Update ComfyUI core, frontend and Manager together and restart fully.

CategoryT8/MiniMax H3/Modular Sampling/Experimental

Inputs (9)

NameTypeDefaultDescription
modelMODEL—
av_latentLATENT—
stageCOMBOmanual_first2 options: manual_first, manual_second
first_stepsINT201–10000—
manual_sigmasSTRING0.5,0.412,0.35,0—
shift_videoFLOAT12.00.01–100—
shift_audioFLOAT3.00.01–100—
sampler_nameCOMBOdual_clock_euler45 options: dual_clock_euler, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39
schedulerCOMBOnative_flow11 options: native_flow, beta57, simple, sgm_uniform, karras, exponential, +5

Outputs (5)

NameTypeDescription
modelMODEL—
samplerSAMPLER—
sigmasSIGMAS—
stage_contextT8_STAGE_CONTEXT—
report_jsonSTRING—