A favorite whose thumbnail is gone gets a frame out of the video instead. The one this came from got a black box: 1.6 KB of pure black, kept for good, on an item whose video is black nowhere -- ffmpeg puts its opening frame at YAVG 185 and its quarter mark at 130. So that was not a frame of the video at all. Drawing a video element that has not presented a frame gives back the canvas untouched, and transparent black JPEGs as pure black at about 1.6 KB -- comfortably past the only test a capture had to pass, which was being over 512 bytes long. Nothing then asked whether the picture had anything in it, and the cache exists precisely so that nothing asks again. The frame now has to be a picture of something, and both ways it can fail to be one have the same answer: take it somewhere else. The brightest sample in the drawn frame decides -- an untouched canvas has no painted pixels at all, and a frame that genuinely is black (a lead-in, a fade, a cut) is no better a thumbnail than one of nothing. A blank frame moves on: the quarter mark again with the element playing, since an element that is playing has to present frames while a seeked one does not, and then the half mark. The frame is taken on `requestVideoFrameCallback` where there is one -- the browser saying a frame is on screen now -- rather than on `seeked` alone, which Chromium backs with a decoded frame but Safari does not for an element that is off-screen and paused. Nobody will say how long this item is (the extractor reports no duration and the favorite kept a zero), and a clip with no length had no quarter mark to seek to, so the capture settled for the first frame the element decoded -- the opening one, which is the frame most likely to be black. It now seeks blind to a fixed mark, clamped back into the file if that is past the end. And the black pictures already kept heal: an index entry carries a marker saying its picture was checked, every capture writes one, and an entry without one is measured once -- behind the picture the card has already painted -- then dropped and taken again if it turns out to be a frame of nothing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MPZFnNdHbPGDTqQUNiE4ZN
14 KiB
14 KiB