The image drags along whatever is actually moving. Wave your hand and reality follows it.
GLSL fragment shader
The effect's own code. The uniforms and helpers above it — uTex, uFeedback, the depth proxy, the frame ring, depthAt(), timeAt() — are the same header every Ether-MOSH shader opens with, and are documented once on the registry rather than reprinted on all 143 pages.
void main(){ vec2 f = flowAt(vUv); // Six taps walked backwards along the flow vector. A single offset only // shifts the image; a walk leaves a wake, which is what reads as drag. vec2 step = f * uAmount * 0.09 * (0.4 + uReach); vec4 acc = texture2D(uTex, vUv); float w = 1.0; for (int i = 1; i < 6; i++) { float fi = float(i); float wi = 1.0 - fi / 6.0; acc += texture2D(uTex, clamp(vUv - step * fi, 0.0, 1.0)) * wi; w += wi; } gl_FragColor = acc / w; }