A paper texture and a light leak

The scene under paper: a texture layer over everything, blended with multiply, darkens the scene by the paper's grain and leaves white untouched; a light leak is a warm gradient blended with screen, which lightens, moved by a track so it drifts across the frame. Both are plain layers above the scene and under the pointer, and both draw the same in the page and in a render. The paper here is an SVG image of turbulence as a data URL, so the pattern needs no file; a scan of real paper does better.

<div class="layer" data-component="texture" data-start="0" data-duration="6">
    <div class="paper"></div>
    <div class="leak" data-bind-style="leak"></div>
</div>
.paper { position: absolute; inset: 0; pointer-events: none; mix-blend-mode: multiply;
         background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='400' height='400'><filter id='p'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' seed='7'/><feColorMatrix values='0 0 0 0 0.84 0 0 0 0 0.8 0 0 0 0 0.72 0 0 0 0.35 0.65'/></filter><rect width='400' height='400' fill='white'/><rect width='400' height='400' filter='url(%23p)'/></svg>");
         background-size: 400px 400px; }
.leak  { position: absolute; inset: 0; pointer-events: none; mix-blend-mode: screen;
         background: radial-gradient(circle at 30% 30%, rgba(255, 160, 80, 0.9), rgba(255, 120, 60, 0) 60%); }
scene('texture', {
    keyframes: {
        leak: { translateX: { at: [0, 6], to: [-200, 200] }, opacity: { at: [0, 1, 5, 6], to: [0, 1, 1, 0] } },
    },
});

No demo uses this pattern yet.