Decoded frames reach the screen: drawImage(VideoFrame) paints real video + animated GIF onto a canvas
Last release the engine learned to decode a video frame; this one puts that frame on the screen. Until now a decoded VP8 keyframe (or an ImageDecoder frame) came back as a WebCodecs VideoFrame you could read the pixels out of, but the canonical way pages actually display one - handing the frame straight to a canvas with ctx.drawImage(frame, ...) - drew nothing, because drawImage only understood a DOM <img>/<canvas>, not a frame that carries its own decoded pixels. Now it does: drawImage of a VideoFrame paints the decoded RGBA (with the R/B swap and YUV->RGB conversion the plane formats need) onto the canvas, so the everyday decode-then-draw loop renders a genuine video frame on-screen. It is verified the honest way - the drawn canvas is read back with getImageData and the pixels match the decoder's output exactly, so a real VP8 keyframe lands at the right place with the right colours. Shipping alongside it is multi-frame animated-GIF decode in ImageDecoder (frameCount, decode({frameIndex}), real per-frame timing and loop count, composited byte-for-byte against Pillow), and those frames paint the same way. Media moves 50 to 51; the overall holds at 57 (interframe decode and the Media-Source-to-decode playback pipeline are the video floor still to bridge).