MiniMax H3 Aicg 双时钟采样器 T8
The sampler MiniMax H3 actually wants
- model
- av_latent
- model
- sampler
- sigmas
MiniMax H3 doesn't generate video and then generate audio - it runs one pass over a latent holding both, because the whole point of H3 is sound that lines up with the picture. That joint latent's video and audio channels have genuinely different noise behaviour, and a stock KSampler applies one denoise schedule to the whole tensor, dragging the audio along at the video's rate. Fine when the schedule happens to suit both. Wrong when you want each half to converge on its own terms.
AICG3D_H3DualClockT8GH (双时钟采样器, "dual clock sampler") gives you two schedules over one latent. It doesn't sample for you - it hands back a patched model, a sampler and a sigma ladder, and you attach them to a sampler box.
The mechanism, briefly
The node takes your MODEL and your av_latent, sanity-checks the latent's H3 channel layout (24 video channels, 32×2 audio), then clones the model. On the clone it swaps in a flow model_sampling configured with shift_video and shift_audio, and stashes both values in transformer_options so anything downstream sees the same clocks.
The default dual_clock_euler path is where it earns the name. Per step the model runs once at the video sigma, then the two halves take different steps: the video half advances by the ordinary delta between consecutive sigmas, while the audio half's delta is recomputed by mapping that sigma through a shift_audio time-shift. One model evaluation, two clocks. Locked audio - a masked region holding your source drive track - advances on the video clock instead, so it doesn't drift away from the picture it's driving.
There's a second, sneakier fix. ComfyUI's generic FLOW inpaint path mixes noise into the latent image before the denoise mask is applied, so an H3 model with locked source audio doesn't reliably see the clean audio latent. When the incoming av_latent carries a noise mask, this node patches scale_latent_inpaint on the clone to return the latent untouched. That's the "clean locked-audio compatibility" in the node's description, and the reason to use it over a hand-rolled ModelSampling node.
Inputs you'll actually touch
model is your H3 diffusion model from a UNET loader - the panel doesn't provide it.
av_latent must be the joint AV latent from the Integration panel (via the Adapter). Not an empty image latent.
steps defaults to 4, and that's not a placeholder. H3 is a few-step model; the pack's own guidance for the DMAD four-step accelerator is 4 steps with shift 12, and piling on 20 steps mostly buys you time.
shift_video (12) and shift_audio (3) are marked advanced, which is the pack's polite way of saying leave them alone first. They're the two clocks' sharpness knobs - higher shift pushes more of the schedule into high noise. The pack recommends shift_video=12, shift_audio=2 alongside its SigmaShift node, so 3 isn't sacred.
sampler_name and scheduler are optional combos. scheduler: native_flow is the pack's own shifted linear ladder; pick any core scheduler and it falls back to ComfyUI's calculate_sigmas. sampler_name often shows exactly one option, dual_clock_euler - the core samplers only appear if your ComfyUI exposes ModelSamplingAV, and picking one without it raises an error telling you to use dual_clock_euler. Version gate, not a bug.
Three outputs, and they travel together: model (the patched clone), sampler (a SAMPLER object) and sigmas (a SIGMAS ladder). Those plus your conditioning and latent are what SamplerCustom / SamplerCustomAdvanced expect - a custom-sampling trio, not a KSampler replacement.
[UNETLoader] ─► model ─┐
[Adapter] ─► av_latent ┴─► [AICG3D_H3DualClockT8GH] ─► model+sampler+sigmas ─► [SamplerCustom]
[Adapter] ─► positive ─────────────────────────────────────────────────────────►
[SamplerCustom] ─► LATENT ─► [AICG3D_H3AVDecodeT8GH]
Install
Same pack, nothing else to fetch:
cd ComfyUI/custom_nodes
git clone https://github.com/JGRFW/comfyui-AICG3D
Restart, then right-click → AICG3D → H3 集成. Manager users: search AICG3D or 短剧工作台 (Registry id aicg3d-h3-suite). Dependencies are just imageio-ffmpeg, psutil, requests, aiohttp. The real requirement is a recent ComfyUI - the module imports comfy.ldm.minimax, so on a build without H3 support the nodes simply don't appear.
And if you're running an older H3 workflow, mind the AICG3D_H3_ prefix: a graph saved with an upstream MiniMaxH3DualClock… node loads with a red missing-node block. Swap it for this one.
Where it bites
"Unexpected MiniMax H3 AV channels: video=(…), audio=(…)". You wired an ordinary latent in. This node only accepts the joint AV latent the panel produces.
"MiniMax H3 packed latent changed: expected N, got M". The latent arrived at a different resolution or duration than the sampler expected - usually something upstream resized, or you changed megapixels mid-graph. Re-run from scratch rather than re-queueing.
The output looks like it sampled at the wrong strength for the audio. Check shift_audio before you touch steps. If dialogue arrives clipped or the room tone is mush while the picture is fine, the audio clock is the dial, not the step count.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| av_latent | LATENT | — | |
| steps | INT | 41–1000 | — |
| shift_video | FLOAT | 12.000.01–100 | — |
| shift_audio | FLOAT | 3.000.01–100 | — |
| sampler_nameopt | COMBO | dual_clock_euler | 45 options: dual_clock_euler, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| scheduleropt | COMBO | native_flow | 10 options: native_flow, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| sampler | SAMPLER | — |
| sigmas | SIGMAS | — |