Nodes/Comfyui-MMH3-UltimateExtend/MMH3 Temporal Overlap Params
ComfyUI Node

MMH3 Temporal Overlap Params

Every Seam Knob on the H3 Chain, Decoded

By bbaudio-2025·Created 9 days ago·Updated 2 days ago· 0
MMH3 Temporal Overlap Params
    • overlap_params
    tail_modefreeze_fade
    fade_frames0
    fade_value0.50
    fade_modeflat
    fade_implmask
    max_mask_strength1.00
    init_content_weight0.30
    keyframes_modereanchor
    anchor_seamtrue
    anchor_strength1.00
    seam_referencenone
    seam_ref_frames0
    overlap_modelater
    overlap_blendlinear

    When you chain H3 segments, the interesting part is the join. The previous segment's tail gets carried into the new segment and held there by a latent noise mask - a frozen zone that keeps what the model already generated, a fade band where the new content takes over, and then free sampling. This node is the control panel for that band. Its sibling, MMH3 Temporal Overlap Simple, is the same socket with four presets; come here when a specific seam looks wrong and you want to know why.

    One thing it does not control: how long the carried tail is. That's per segment, set as overlap frames in the tile editor. Everything on this node applies to every continuation segment in the chain.

    The knobs that actually matter

    tail_mode - freeze_fade (the default) or free_resample. Freeze+fade pins the frozen zone and fades into the new content; free resample lets the entire carried tail re-sample, which sounds more elegant and is flagged experimental.

    fade_frames - length of the fade band in pixel frames. 0 means no fade at all: the whole tail stays frozen and the new content hard-cuts in. Anything else snaps up to a multiple of 17, because that's H3's keyframe grid (17 frames per 5 latent tokens). It has to fit inside the carried tail, or sampling stops with fade_frames=... exceeds the realized tail length.

    fade_value and fade_mode shape that band: how strongly the transition lands (0 = hard cut toward the new content, 1 = keep the tail) and what curve it follows across the width. Defaults of 0.5 and a flat curve are fine until you're chasing a specific look.

    seam_reference - set to prev_tail and the previous merged video's tail is fed to every continuation segment as a bit-perfect latent video reference, soundtrack included, through H3's native Ref2VA mechanism. No soft mask is involved, so none of the mask artifacts below can happen. It's designed to be used with fade_frames=0 and a generous overlap, with seam_ref_frames deciding how much of the tail the reference covers (snapped to the 17m+5 grid: 5, 22, 39…; 0 = the whole carried tail). Highest-quality seam option, slowest, because the model attends to a video reference on every segment.

    max_mask_strength - how strongly the mask does its job. 1 holds the frozen zone completely; 0 removes the mask entirely, so the whole tail re-samples (equivalent to free resample). If your chain is slowly bleaching or softening, this is the one-value experiment that tells you how much of it is the mask.

    The knobs you reach for second

    anchor_seam and anchor_strength pin the conditioning at the split frame so the join sits where you put it - 0.999 is a near-hard pin. keyframes_mode decides what happens to the previous segment's keyframes after the split: reanchor (move them to the new split point, the default), drop, or keep.

    overlap_mode and overlap_blend decide who wins the overlap band - later (the new segment) or earlier (the accumulated video) - and how that transition is shaped. Worth knowing: when a fade band exists, the blend ramp is confined to the frozen zone, where both sides carry identical content, and the re-developed fade band is handed wholly to the new segment. Crossfading two genuinely different renditions of the same frames would ghost.

    The experimental corner

    fade_impl has two values and is flagged as possibly going away. mask is the default soft noise band - intermediate per-row timesteps - and it is known to produce mosaic-like artifacts on H3. qsample_init keeps the band at full-strength timesteps instead and steers the transition by blending the carried content into the initial noise, decaying as sampling proceeds. The author's claim is the interesting part: because the band never sees intermediate timesteps, subsequent segments continue far more reliably, at zero extra cost.

    That comes with a caveat worth taking seriously. The structured init at sigma_max is out of distribution and the model over-develops it, which shows up as brightness and saturation drift in the band. init_content_weight (default 0.3, only effective with qsample_init) caps how much carried structure rides in that noise; 0 is pure noise. Negative values carry sign-flipped, anti-correlated structure - an experiment, not a setting. The author's own framing: the start stays pinned to the reference but inverted, so expect mirrored development or nothing at all.

    The sampler you pick changes all of this. Both tooltips say the same thing: use a stochastic SDE sampler that re-injects fresh noise every step - sa_solver, er_sde, dpmpp_2m_sde, dpmpp_3m_sde. Deterministic ODE samplers (euler, res_multistep, uni_pc, dpmpp_2m) are more likely to develop brightness and saturation drift in the band. That matches the sampler literature: ancestral and SDE samplers never fully settle because they keep adding noise, while converging samplers walk a smooth deterministic path - exactly the path that shows a drift as a visible ramp.

    Wiring and install

    The node has no optional inputs and one output: overlap_params, a MMH3_OVERLAP_PARAMS link that goes to MMH3 Temporal Extend Video's overlap_params input. Use it or the Simple node, not both - they share the socket. Leave it unconnected and the Extend node falls back to its defaults (or the tile editor's legacy globals).

    Install is the usual pack story - ComfyUI Manager, search Comfyui-MMH3-UltimateExtend, install, restart - or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/bbaudio-2025/Comfyui-MMH3-UltimateExtend
    

    No pip step, no extra model files for this node specifically.

    Practical order of attack

    Start on MMH3 Temporal Overlap Simple and only come here when a specific failure needs a specific fix. Mosaic patterning at the join is fade_impl - move to qsample_init and expect to tune init_content_weight. A band that drifts bright or washed is a solver property before it's a knob, so change the sampler first.

    Categorymodel/latent/minimax

    Inputs (14)

    NameTypeDefaultDescription
    tail_modeCOMBOfreeze_fadeCarried-tail behavior: 'freeze + fade' pins the frozen zone and fades into the new content; 'free resample' lets the whole tail re-sample (experimental).
    fade_framesINT00–510Length in PIXEL frames of the fade band between the carried tail and the new content. 0 = no fade: the whole tail stays frozen and the new content hard-cuts in. Other values snap up to multiples of 17.
    fade_valueFLOAT0.500–1Fade strength at the transition (0 = hard cut toward the new content, 1 = keep the tail).
    fade_modeCOMBOflatShape of the fade across the band.
    fade_implCOMBOmaskEXPERIMENTAL, may be removed. Fade implementation: 'mask' = the default soft noise-mask band (intermediate per-row timesteps; known to produce mosaic-like artifacts on H3). 'qsample_init' = keeps the band at full-strength timesteps and steers the transition by q_sample-blending the carried content into the INITIAL NOISE, decaying as sampling proceeds. Advantage over 'mask': the band never sees intermediate timesteps, so subsequent segments are far more likely to continue successfully, at zero extra cost. SAMPLER NOTE: the stochastic SDE type that re-injects fresh noise every step (sa_solver, er_sde, dpmpp_2m_sde, dpmpp_3m_sde, ...) is the BETTER FIT and is recommended; deterministic ODE samplers (euler, res_multistep, uni_pc, dpmpp_2m, ...) are more likely to develop brightness/saturation drift in the band.
    max_mask_strengthFLOAT1.000–1Strength of the freeze + fade mask as a whole. 1 = maximum: the frozen zone is fully held (mask 0) and the fade band runs its full gradient. 0 = no mask at all: the frozen zone is not held and the fade band is gone, so the whole carried tail re-samples (equivalent to 'free resample'). Intermediate values hold the frozen zone proportionally and scale the fade gradient with it (mask value in the frozen zone = 1 - s, fade gradient runs from 1 - s up to 1).
    init_content_weightFLOAT0.30-1–1EXPERIMENTAL, only effective with fade_impl='qsample_init'. Caps how much carried-content STRUCTURE rides in the initial noise (1.0 = full structure as before; 0 = pure noise). The structured init at t=sigma_max is out-of-distribution and the model over-develops it - the source of the severe brightness/saturation drift. The higher this value, the more likely the fade band produces frames with color anomalies. NOTE ON SAMPLERS: the stochastic SDE type (er_sde / sa_solver / dpmpp_2m_sde / dpmpp_3m_sde) is the BETTER FIT and is recommended; deterministic ODE samplers (euler, res_multistep, uni_pc, dpmpp_2m, ...) tend to show drift in the band regardless of this value. NEGATIVE values (experiment): the band carries SIGN-FLIPPED, anti-correlated structure. This is NOT 'more different from the neighbour' (0 already is maximal independence) - the start stays pinned to the reference, just inverted; expect mirrored/inverted development or nothing at all.
    keyframes_modeCOMBOreanchorHow previous-segment keyframes are handled after the split: 'reanchor' moves them to the new split point, 'drop' removes them, 'keep' leaves them untouched.
    anchor_seamBOOLEANtrueAnchor the conditioning at the split frame so the seam stays in place.
    anchor_strengthFLOAT1.000–1Strength of the seam anchor (1.0 = hard pin).
    seam_referenceCOMBOnoneSeam continuity WITHOUT fade: 'prev_tail' feeds the previous merged video's tail to every continuation segment as a bit-perfect latent video reference - WITH its soundtrack (the tail's audio latent rides along, kind 'video_audio') - through the native Ref2VA mechanism. No soft noise-mask involved, so no mosaic artifacts. Recommended with fade_frames=0 and a generous per-segment 'overlap frames' setting.
    seam_ref_framesINT00–1020How many pixel frames of the previous merged video the seam reference covers, snapped to the 17m+5 grid (5, 22, 39, ...). 0 = the entire carried tail (the segment's overlap frames). Ignored when seam_reference is 'none'.
    overlap_modeCOMBOlaterWho wins the overlap band: 'later' = the new segment, 'earlier' = the accumulated video.
    overlap_blendCOMBOlinearBlend curve across the overlap band ('overwrite' = no blending). When a fade band exists, the blend ramp is confined to the frozen zone (where both sides carry identical content - it only smooths micro-differences e.g. from a refinement pass) and the re-developed fade band is assigned wholly to the new segment, since crossfading two genuinely different renditions would ghost.

    Outputs (1)

    NameTypeDescription
    overlap_paramsMMH3_OVERLAP_PARAMSConnect to the 'overlap_params' input of 'MMH3 Temporal Extend Video'.