⬡ Polyhedron MiniMax Drift Control
Keep the motion, change the look
- model
- latent
- model
- latent
- info
Continuing a scene is easy to describe and hard to get right, because two things are true at once: the new clip has to start where the old one ended, and it has to be allowed to become its own shot. Hold the head too hard and scene 2 is scene 1 with a slightly different lamp. Let it go too early and your character changes jacket between frames.
⬡ Polyhedron MiniMax Drift Control is the compromise, implemented as a model patch. The held start that MiniMax Continue copied into the latent gets masked anew at every sampling step: the join itself stays the scene before, while the frames further back are allowed to lean toward the new look as the run progresses. Motion carries; appearance is free to move.
How you use it
Wire the model in, wire Continue's latent in, take the model output. That's it - latent passes through unchanged, and the model output goes where the model would have gone: into the sampler.
Model → LoRA Engine → Drift Control → Sampler
MiniMax Continue (hold) → latent ─────┘
The reason this needs a model patch rather than a one-time latent edit is that a static noise mask can only say "this region is frozen, this region is free" for the entire schedule. Re-deriving the mask each step lets the frozen region shrink as the sample firms up - the near-join rows stay pinned while rows further back effectively loosen, which is not something a fixed door can do.
The two numbers
taper_frames (16 default, 4–64) is how far before the join the drift fades out. The join stays the scene before at every step; the frames behind it may lean. Rounded to whole tokens of 1 or 4 frames, and info reports what that came to, because latent time isn't continuous and pretending otherwise is how people end up with a one-frame pop.
prefix_frames (0 default) is how much of the start is allowed to drift, in frames, capped at 362. 0 means the whole held region - the rows Continue's hold copied in. A value can only shorten it: a row that isn't held is never touched, so this node can't invent a hold you didn't set up.
When to reach for it
Three cases, in the order I'd expect to hit them:
- A scene that changes time or light. Golden hour into dusk, interior into street. The composition has to continue; the grade has to move. Continue's hard hold fights you here, Drift Control doesn't.
- A cut disguised as a camera move. You want a continuous push through a doorway into a differently lit room.
- Long chains where the look slowly evolves. Three or four continues, drift on each, and the film wanders on purpose instead of resetting every fifteen seconds - which is the practical answer to the chunk-boundary drift that everyone fights when they chain video models.
And when not to: if the whole point is that nothing changes, plain Continue with hold and release_frames = 0 is a firmer join and one node fewer.
Install
Manager, search "Polyhedron Suite":
cd ComfyUI/custom_nodes
git clone https://github.com/PolyhedronAI/ComfyUI-PolyhedronLoRAStack.git
# restart ComfyUI
No dependencies to install - this pack's requirements.txt declares none. Drift Control needs no model file of its own; it's a patch on the H3 model you're already running. It is, however, downstream of Continue's hold, and Continue needs ComfyUI master for MiniMaxH3AddGuide. No hold in the latent means nothing for this node to taper - it'll pass through and tell you so.
Small print worth reading once
It patches the model, so order matters. After LoRAs and any engine node, before the sampler. Put a LoRA after it and you've changed the weights the taper was computed against.
prefix_frames is a limit, not a target. Setting it to 300 on a latent with 22 held frames does nothing. Check Continue's context_frames first - that's where the held region actually comes from.
H3's licence excludes the EU, UK, Korea and the US from its applicable territory. Same for every node in this family; no dial here changes that.
Don't expect it to fix a bad join. If the two clips disagree about camera position or focal length, drift will happily carry the disagreement forward while looking more confident about it. Get the look close upstream, then let this handle the transition.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The H3 model that samples this run (after LoRAs / engine). The output goes to the sampler instead. | |
| latent | LATENT | MiniMax Continue's latent with `hold` on (the end of the scene before copied into its start). Passed on unchanged. | |
| taper_frames | INT | 164–64 | Over how many frames before the join the drift fades out (rounded to whole tokens of 1 or 4 frames): the join itself stays the scene before at every step, the frames further back may lean toward the new look while the run samples. |
| prefix_frames | INT | 00–362 | How much of the start drifts, in frames. 0 = all the latent holds (the rows MiniMax Continue's hold copied in); a value can only shorten it -- a row that is not held is never touched. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| latent | LATENT | — |
| info | STRING | — |