Repository navigation
Conversation
A mover that jumps further than the mask dilation between two whole frames was never sampled in the gap, so the blur trail it correctly leaves there read as an outside-the-trail defect (seed 63098). Build the outside mask from the blur-off shutter samples at t as well. Fixes heygen-com#7596 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #7596
What
Test-only change, no runtime change. The "outside the trail" check now builds its trail mask from the blur-off shutter samples at
tas well as the whole neighbour frames.Why seed 63098 fails
The failure is in the test's oracle, not in the blur. In seed 63098,
#lt(aleft/topmover) crosses about 70 px between frame 5 and frame 6. Its path from x 112 to 141 sits behind the static#flpanel, so the only place it shows is x 142 to 146, and neither whole frame lands there:measureOutsidemasked only what changed across frames t±2 (dilated by 2 px), so its mask started at x 145. The 240° shutter does sweep#ltthrough x 142 to 146, and blur on correctly draws a faint trail there (16,19,26becomes83,31,39). That trail landed in the "outside" tiles at x 128 to 143, which gave the reported 2 bad tiles with a worst MAE of 4.0.Adding the
shutterTimes(t)samples, which are the same sub-frame posesmeasureInsidealready averages, to the mask covers exactly what the blur integrates. On hold frames those samples are identical to the reference, so the mask does not change there.Verification
Run locally with the CI's pinned
chrome-headless-shell@153.0.8010.36:HF_BLUR_SEEDS=63098fails with the same tiles and MAE as the nightly report ([{"x":128,"y":112,"mae":1.77},{"x":128,"y":128,"mae":4.04}]).HF_BLUR_SEEDS=63098,62660,1-100gives 102 of 102 passing.captureMotionBlur.differential,.differential.filterand.differential.insidegive 100 of 100 passing.document.documentElement.append(defs)changed back toroot.append(defs)), seeds 1 to 200 still fail exactly the 28 seeds that carrylastChild, the same count test(engine): nightly motion blur run over generated compositions #7437 reported, and no other seed fails.oxfmt --check,oxlint,tsc --noEmit(engine),check-comment-citations.mjsandcomment-ratchet.mjsall pass.Seed 62660 (#7486) passes locally both before and after this change, so I'm not claiming it here.