H3 True Clock (density-corrected RoPE t-grid) [experimental]
Why your held frames play back at double speed, and the fix that's off-distribution
- sampler
- sampler
H3 True Clock fixes a bug most people blame on the de-rope itself, and its own README opens with the appropriate level of fear: "the model was trained on uniform time grids and has never seen the one this node builds. Expect it to be able to make things worse." Experimental, default-off, genuinely off-distribution. Read that twice before wiring it.
The bug it fixes
MiniMax-H3's RoPE time axis is physical - the model reads time in real units, roughly 5/3 units per world frame. So when H3 Time Smear dilates a clip by duplicating frames, the model doesn't read it as "slow motion" at all. It reads it as a longer take. The held frames are just more frames of the same scene, and background agents - gulls, crowds, traffic - keep animating through them at their own pace. After H3 Exact Recover drops the held frames, those agents come out accelerated. That's not a smear defect; it's the model being told the span is shorter than it really is.
The fix: this node divides each latent token's RoPE span by the local hold density. The dilated clip's total RoPE duration then equals its world duration, and held copies share one world frame's worth of time. Background agents hold world speed through the held span. That part works - it's the validated result.
The cost, measured
Here's where it gets uncomfortable. The same non-uniform time grid goes to all 50 blocks at every step, and that's off-distribution - the pack measured seam flash at 7.17× a control's 1.87× and jitter at 5.06× against 0.85×. The correction is right and the side effects are real. That tension is exactly why H3 DyRoPE (same pack, same experimental shelf) exists: it splits the grid into physical vs compact and lets you hand the true clock to some blocks or some steps instead of all of them - e.g. blocks 30-49 for timing fidelity, or 40-49 for minimal shimmer. If True Clock is the hammer, DyRoPE is the set of chisels, and the README's dose ladder is worth reading before you use either.
Using it
Wire sampler (the same sampler you'd otherwise pass to SamplerCustomAdvanced) and hold_map - specifically hold_map_used from the H3 Time Smear that made the clip, so the tail pad rides along correctly. Output is the wrapped sampler. Nothing else to set; the whole node is two inputs and one output.
Install
Ships with matlowai/ComfyUI-MAINodes:
cd ComfyUI/custom_nodes
git clone https://github.com/matlowai/ComfyUI-MAINodes
Restart, under sampling/custom_sampling/samplers. No extra Python deps; you need MiniMax-H3 weights and ComfyUI's H3 support (mind the licence's US/EU/UK/Korea carve-outs).
The honest recommendation: judge True Clock on playback, not on meters - the meters can't tell you whether world-speed still holds for the thing you actually care about. And if your clip has a moving background, this node is the difference between "the birds got faster" and "the birds stayed put." Just budget for a seam check, because the fix and the flash travel together.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| sampler | SAMPLER | — | |
| hold_map | STRING | hold_map_used from the H3 Time Smear that made this clip |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| sampler | SAMPLER | — |