While producing a video, a generated caption track had a ~0.2s window at every phrase boundary where the outgoing caption's fade-out (0.22s) overlapped the incoming caption's slam-in at the same screen position — two captions stacked on top of each other.
lint, validate, and inspect all passed. inspect samples evenly spaced timestamps, so a sub-second collision window at a transition boundary slips between samples by construction.
Proposal: an --at-transitions mode (or default behavior) that samples at every tween start/end boundary across registered timelines, instead of (or in addition to) even spacing. Boundary frames are where collisions live — entrance/exit crossfades, scene seams, label swaps.
Repro shape:
tl.to("#capA", { opacity: 0, duration: 0.22 }, 11.33); // exit starts
tl.fromTo("#capB .w", { opacity: 0 }, { opacity: 1, duration: 0.34 }, 11.35); // next enters
// 11.35–11.55: both visible at the same position; even sampling never lands here
While producing a video, a generated caption track had a ~0.2s window at every phrase boundary where the outgoing caption's fade-out (0.22s) overlapped the incoming caption's slam-in at the same screen position — two captions stacked on top of each other.
lint,validate, andinspectall passed.inspectsamples evenly spaced timestamps, so a sub-second collision window at a transition boundary slips between samples by construction.Proposal: an
--at-transitionsmode (or default behavior) that samples at every tween start/end boundary across registered timelines, instead of (or in addition to) even spacing. Boundary frames are where collisions live — entrance/exit crossfades, scene seams, label swaps.Repro shape: