MiniMax H3 Finite Latent Continuation (Internal)
The quiet node that makes segments into one shot
- positive
- target_latent
- model
- sigmas
- previous_latent
- previous_images
- vae
- audio_vae
- positive
- Target Latent
- Actual Overlap Frames
- Sampling Model
You will probably never drag this node onto the canvas - it's marked (Internal), it lives in MiniMax H3/Internal, and the pack builds it for you inside the Finite Segment Sampler and inside Prepare Loop Segment. But it is doing the single most important thing in the whole long-video feature, and understanding it is the difference between "my segments have seams" and knowing why.
The claim it implements: carry the previous segment's sampled audio-video latent tail directly into the next segment's opening, so continuation never round-trips through pixels. That's the mechanism the README credits for avoiding the progressive degradation, blur and white flashes that normal decode-and-restart chaining gives you.
How it works
The 0.8.0-era design is worth stating because it explains the node's shape: Drift-Control is now the only continuation path, and the user-facing mode selector was removed. So this node is unconditional about applying Drift-Control and just needs to know how much overlap it's dealing with.
overlap_framesof 0 → straight passthrough. Touching windows with no overlap are genuinely independent, and the node respects that instead of inventing a connection.overlap_framesof 1 at iteration > 0 → routes through nativeMiniMaxH3AddGuideusing the previous segment's final decoded frame. This is the only branch that needsprevious_images,vaeandaudio_vae.- Anything else → the real work. The requested overlap is snapped down to H3's legal temporal grid, the previous latent's tail is copied into the target's opening, and a linear temporal noise mask is applied: preserved at the seam, re-noised across the disposable prefix, and 1 beyond the overlap. Then the model gets patched with Drift-Control AV, with
prefix_stepsderived from the overlap's video-token count, so the masking follows the sigma schedule you're actually running - including 4-step and 8-step accelerated ones.
For audio it uses what the README calls Soft AV: the carried overlap stays exact until its final eight audio-latent ticks, where a half-cosine releases it into newly generated sound. The seam-side video latent stays clean while the prefix is disposable.
There's also a detail you can't see from the UI: if the previous latent carries a selflift_low_resolution_carry - the low-res prediction SelfLift keeps alongside the high-res result - it's forwarded so the two-stage path doesn't have to reconstruct that state by shrinking the final high-res latent, which is what caused a fixed dark/bright pulse at trimmed boundaries.
Inputs and outputs
Required: positive, target_latent, iteration (force-input), overlap_frames (default 22), continue_audio_latent (default true), model, sigmas. Optional: previous_latent, previous_images, vae, audio_vae.
Outputs, and this is the useful part:
- positive - conditioning, passed through (the Guides branch can add to it).
- Target Latent - the masked, carried latent.
- Actual Overlap Frames - the snapped value. Not the number you asked for: ask for 24, get 22; ask for 48, get 39. Everything downstream that trims must use this, not your request.
- Sampling Model - the Drift-Control-patched model. Sample with this one.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Songssx/ComfyUI-MiniMaxH3-TimelineDirector.git
Restart, search MiniMax H3. It's a dev-only internal node, so it won't appear in the add-node menu unless ComfyUI's dev mode is enabled in settings - that's the intended state, not a broken install. No pip dependencies; the pack's pyproject.toml declares an empty list. Prerequisite is a recent ComfyUI with native H3 nodes, the H3 Ref2VA model, CLIP, video VAE and audio VAE, and Python 3.10+.
Common issues
"Segment 2 and later require the previous sampled latent." You fed the node a later iteration without previous_latent. In the sampler path that means the chain broke; in the loop path it usually means the state value wasn't carried through End Loop.output_value.
"The requested overlap is not on H3's temporal grid" - you won't see that message; the pack snaps instead. What you'll see is a shorter overlap than you typed, and a shorter-than-expected trim downstream. Reference the Actual Overlap Frames output rather than recomputing.
"The source or target latent cannot hold an N-frame linear overlap." Your segment is too short to contain the overlap you asked for. Shorten the overlap or lengthen the window.
Collapsing into mush across segments. Check that nothing downstream replaced the patched model. The mask and the Drift-Control patch have to travel together; a model patch applied without the matching latent mask (or vice versa) is the standard way to get either frozen frames or a hard cut.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| target_latent | LATENT | — | |
| iteration | INT | — | |
| overlap_frames | INT | 220–3592 | — |
| continue_audio_latent | BOOLEAN | true | — |
| model | MODEL | — | |
| sigmas | SIGMAS | — | |
| previous_latentopt | LATENT | — | |
| previous_imagesopt | IMAGE | — | |
| vaeopt | VAE | — | |
| audio_vaeopt | VAE | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| Target Latent | LATENT | — |
| Actual Overlap Frames | INT | — |
| Sampling Model | MODEL | — |