CineTimeline|H3参考网格对齐
H3 Keyframe Latents Come Out Odd-Sized? This Pads Them the Way Stock Does
- conditioning
- CONDITIONING
A one-job node, and the job is parity
This is the smallest node in ComfyUI-CineTimeline and possibly the least glamorous: it takes a conditioning and gives you back a conditioning. That's the entire interface. No widgets, no settings, nothing to configure.
It's not decoration, though. When you condition H3 on keyframe anchors - first frame, last frame, the FL2VA path, anything where you VAE-encode an actual image and staple it into the conditioning metadata as a minimax_keyframes entry - you're producing a latent whose spatial dimensions depend on the pixel size of your anchor. The H3 VAE compresses spatially, so a keyframe encoded from an odd-numbered pixel grid can land on an odd latent dimension. Stock H3's own nodes handle that by padding the latent before it ever reaches the conditioning grid. If you're assembling keyframe conditioning by hand instead of through the stock path, nothing stops you from handing the model a ragged latent.
That's the failure this node prevents, and the author's docstring says it plainly: "Match stock H3's input padding for odd-sized keyframe condition latents."
How it works
It walks every [embedding, metadata] pair in the conditioning list. If the metadata carries minimax_keyframes, it iterates those entries and, for each one whose latent has an odd size on either of the last two dimensions, pads that dimension by the remainder. So an odd width gets one extra column, an odd height gets one extra row, and both-odd gets both.
The pad mode is circular, not zeros. That's deliberate and worth understanding: a zero-filled row is a hard black edge, and you're feeding that in as conditioning - the model gets told "here is an anchor frame with a black stripe in it." Circular padding wraps the opposite edge around instead, so the added row or column continues the picture rather than announcing itself. It's the same trick seamless-texture workflows have used for years to make convolution borders disappear, and stock H3 does it here for the same reason.
Everything else about the conditioning passes through untouched - same embedding, same metadata, same ordering. If your conditioning has no minimax_keyframes (plain text encoding, multi-reference conditioning), the node is a pass-through. That's expected, not a bug.
When to wire it in
In the pack's own graphs it sits in the keyframe/FL2VA conditioning path, between the anchor encoding and the sampler. You'd reach for it manually if you're hand-rolling keyframe conditioning and seeing the symptoms of a ragged grid - conditioning that seems to be ignored, or a first-frame anchor that visibly influences one half of the picture and not the other.
Two boundaries worth knowing. First, this fixes latent parity only; it does not validate pixel dimensions. If your anchor is 24 pixels wide, the pad will make the latent even and you'll still get junk - that's CineNativeResolution's department, where H3 dimensions get checked as positive multiples of 16. Second, the node keys off the minimax_keyframes metadata name specifically. If you're using some other pack's keyframe conditioning node that stores anchors under a different key, this is a no-op and you won't get a warning about it.
Installing it
Same pack, same procedure. Manager search CineTimeline, or:
cd ComfyUI/custom_nodes
git clone https://github.com/bo341805sg/ComfyUI-CineTimeline
# restart ComfyUI, hard-refresh the browser
No model files, no extra dependencies. If you're installing H3 from scratch, the heavy lifting is elsewhere - the H3 diffusion model, the Qwen3-VL text encoder, KJNodes for the Sage attention patch, and minimax-h3-audio-T8 1.3.2. If you're running the paired INT8 ConvRot checkpoints the author uses as the production baseline, launch with --disable-dynamic-vram; the loader refuses INT8 weights in a process where DynamicVRAM is still on.
One practical note: the pack registers 29 nodes and 13 of them are explicitly marked Legacy in their display names. This one isn't - it's live, under CineTimeline|H3参考网格对齐 in the CineTimeline/internal category, which is where the pack hides the plumbing that isn't meant to be browsed.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |