Repository navigation
v0.15.4
0.15.4 (2026-11-02)
This release keeps linear() easings monotonic where mtwnIsEasingMonotonic says they are, which a timeline's crossing count relies on (#243). A sample inside a segment could land an ulp past the segment's later point and step down at it. A sample moves only there, by at most about an ulp, so only hosts sampling linear() just below a point see it.
Fixed
- A
linear()sample no longer passes its segment's later point (#243). A segment's sample isa + share * (b - a), and the rounded difference could carry it an ulp pastbwhere the share is 1 or rounds to it:linear(0, 0.03 1%, 0.3 3%, 1)gave 0.30000000000000004 just below 3% and 0.3 at 3%. A timeline eased by such a curve could count a mark twice, depending on where the frames fell. Inside a segment the sample is now held at the point's output where it would pass it.mtwnSampleEasing, and the tracks, transitions and timelines eased bylinear(), its fits and rough easings included, change only at those progresses, just below a point, by at most about an ulp of the segment's larger output.- A clip's records change only where a timeline eased by such a
linear()had a frame land there: a mark it crossed twice is now crossed once.