⬡ Polyhedron MiniMax Continue
Joining two H3 clips without the seam
- positive
- latent
- vae
- audio_vae
- clip_latent
- tail
- tail_audio
- anchor
- anchors
- positive
- latent
- overlap
- info
H3 gives you 4 to 15 seconds a go. A scene that's a minute long is therefore four or five clips, and the gap between "I rendered five clips" and "I have a scene" is a join that doesn't announce itself with a jump cut, a wardrobe change and a new voice. ⬡ Polyhedron MiniMax Continue is that join: clip n's ending becomes the guide at frame 0 of clip n+1, with its sound on the same time axis, so the model continues rather than restarts.
This is the same problem the Wan crowd has been chewing on all year - the 81-frame native context, the chunk boundary drift, the chunkers that hide the stitching. The difference here is that H3 has a real add-guide mechanism on Core master to hang it off, so the carry is conditioned, not just glued.
Three modes, and why you want K2L
mode:
- K2L latent context (no VAE) - continues from clip n's own latent, via a Clip Chain Source's
clip_latent. No VAE round trip, so no decode artifacts leak into the next clip's context. This is the one you want. - K2 motion context (frames) - continues from clip n's decoded last frames (
tail) and its audio (tail_audio). Needsvae, andaudio_vaeif you're carrying sound. - anchor only - no context at all, just place the
anchorinput. Basically a plain graph with the anchor plumbing.
context_frames decides how much of clip n's end guides the start of clip n+1: 22 frames ≈ 0.92 s by default, snapped down to H3's clip grid (5, 22, 39, … 17k+5). More context holds the look harder and gives the model less room to move. with_audio carries clip n's sound under that context on the same time axis, which is most of why the soundtrack feels continuous.
audio_context is the one that looks like a typo and isn't. At 0, the sound under the whole picture window is pinned from frame 0, Core's own Add Guide behaviour. Set it to a number - 18 is the tooltip's example - and clip n's sound reaches back that far, pinned to end at the join. That's how a soundtrack gets held across a cut instead of restarting under the new picture. Longer holds it tighter and dulls it slightly at every join. Multiples of 3 land exactly on the audio grid.
The hold decision
hold:
- guide only - clip n's ending is a guide; the latent passes through untouched.
- guide + hold in the latent - the same ending is also copied to the start of this run's latent (picture and sound) and held by a noise mask, then released over
release_frames(16 by default, counted back from the join, rounded to whole tokens of 1 or 4 frames -infotells you what it came to).
Guide-only is softer and more forgiving. Hold is a harder join and occasionally the only thing that keeps a face from changing. release_frames = 0 keeps the head locked right up to the join.
Outputs: positive (guides appended - references and keyframes already in it survive), latent (unchanged unless hold copies context in), overlap, and info. overlap is the hand-off for a Seam Fix style trim: wire it into trim_head so the duplicated head doesn't play twice.
The ComfyUI version trap
This node needs Core master (0.37+) for MiniMaxH3AddGuide. On a pinned older core it refuses with a genuinely helpful error instead of half-working, and names your fallbacks: MiniMax Keyframes for the last frame, or MiniMax Reference with the previous clip as <Video 1>. If you see that message, you're not misconfigured - you're on the wrong core.
Install
Manager → "Polyhedron Suite", or:
cd ComfyUI/custom_nodes
git clone https://github.com/PolyhedronAI/ComfyUI-PolyhedronLoRAStack.git
# restart ComfyUI
No Python packages required. Optional pins do the work: clip_latent for K2L, tail + tail_audio for K2, anchor / anchors for mid-clip guides.
Where it goes wrong
Wrong latent. It must be an H3 AV latent - Polyhedron Empty Latent with latent_type MiniMax H3 AV, or Continue's own output. Anything else is refused by name.
Placeholder anchors. A Media Loader with nothing loaded emits a placeholder frame; Continue refuses it rather than conditioning your new scene on a checkerboard.
Long audio context. Every join dulls a little as audio_context grows. If the music starts sounding underwater, you've over-held it.
K2 without a VAE. The frame-based mode needs the video VAE (and audio VAE for sound). K2L is the path that doesn't, which is another reason to prefer it.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | The run's positive conditioning (MiniMax Keyframes, MiniMax Reference or CLIP Text Encode). The guides are APPENDED -- references and keyframes already in it stay. | |
| latent | LATENT | The run's H3 AV latent (Polyhedron Empty Latent, 'MiniMax H3 AV'). Size and length come from it; it is passed on unchanged unless `hold` copies the context into it. | |
| mode | COMBO | K2L latent context (no VAE) | K2L: continue from clip n's OWN latent (Chain Source clip_latent) -- no VAE round trip. K2: from its decoded last frames (Chain Source tail + tail_audio). anchor only: no context, just the anchor input. |
| context_frames | INT | 225–362 | How much of clip n's end guides the start of clip n+1, in frames. Snapped down to the H3 clip grid 5, 22, 39, ... (17k+5). 22 = 0.92 s. |
| with_audio | BOOLEAN | true | Carry clip n's sound under the context on the same time axis, so the soundtrack continues too. |
| anchor_frame | INT | -1-9999–9999 | Where the `anchor` input goes: its (first) frame lands here. Negative counts from the end, -1 = the last frame. Ignored without an anchor. |
| audio_context | INT | 00–362 | How far back clip n's SOUND reaches, in frames, pinned to end at the join (where the picture window ends). 0 = the sound under the whole picture window from frame 0 (Core's Add Guide). Multiples of 3 land exactly on the audio grid (others are widened). 18 holds a soundtrack well across a join; longer holds it closer but dulls it a little at every join. |
| hold | COMBO | guide only | guide only: the end of clip n is a guide (as before), the latent passes through. guide + hold in the latent: the same end is ALSO copied to the start of this run's latent (picture and sound) and held by a noise mask, then released -- a harder join. Wire the `latent` output into the sampler. |
| release_frames | INT | 160–64 | With hold: over how many of the held frames the picture is released again, counted back from the join (rounded to whole tokens -- a token is 1 or 4 frames; the info says how many frames it came to); the frames before them stay locked. 0 = held hard up to the join. The sound is released over its last 100 ms. |
| vaeopt | VAE | Video VAE -- needed for K2 and for an anchor image. K2L needs none. | |
| audio_vaeopt | VAE | Audio VAE -- needed for K2 with audio. K2L needs none. | |
| clip_latentopt | LATENT | K2L: Clip Chain Source `clip_latent` -- clip n's AV latent as Clip Store kept it. | |
| tailopt | IMAGE | K2: Clip Chain Source `tail` -- clip n's last frames (5 or more). | |
| tail_audioopt | AUDIO | K2: Clip Chain Source `tail_audio` -- cut to the context length here. | |
| anchoropt | IMAGE | An image (or a clip of 5+ frames, snapped to 17k+5) to pin at `anchor_frame`: a target pose, the end of a move, the next keyframe. | |
| anchorsopt | PLS_ANCHORS | Cine Timeline `anchors`: every anchor between the first and the last frame, each at its own frame. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| latent | LATENT | — |
| overlap | INT | — |
| info | STRING | — |