Image-colored ribbons spring from details, orbit on their own momentum and bend with live motion.
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(){ vec4 base=texture2D(uTex,vUv); vec2 aspect=vec2(uResolution.x/uResolution.y,1.0); vec2 cell=floor(vUv*16.0); vec3 color=vec3(0.0);float weight=0.0,alpha=0.0; float aa=1.5/uResolution.y; for(int y=-2;y<=2;y++)for(int x=-2;x<=2;x++){ vec2 id=cell+vec2(float(x),float(y)); if(id.x<0.0||id.y<0.0||id.x>=16.0||id.y>=16.0)continue; vec4 point=motionPoint(id); vec4 pigment=texture2D(uTex,clamp(motionHome(id),0.0,1.0)); float l=dot(pigment.rgb,vec3(.299,.587,.114)); vec2 direction=normalize(point.zw+vec2(.003*cos(uTime*.6+motionHash(id)*6.28),.003*sin(uTime*.6+motionHash(id)*6.28))); vec2 side=vec2(-direction.y,direction.x); float reach=mix(.018,.095,uLength)*(0.5+min(length(point.zw)*18.0,1.0)); float phase=uTime*.8+motionHash(id)*6.283; vec2 prev=point.xy-direction*reach; float dist=10.0; for(int k=1;k<=5;k++){ float t=float(k)/5.0; vec2 q=point.xy-direction*reach*(1.0-t)+side*sin(t*3.14159+phase)*reach*.35*sin(t*3.14159); dist=min(dist,lineDistance(vUv*aspect,prev*aspect,q*aspect));prev=q; } float radius=mix(.0008,.006,uWidth)*(.65+l*.7)*(1.0+uPulse*.4); float coverage=(1.0-smoothstep(radius,radius+aa,dist))*pigment.a; float life=.55+.45*sin(phase+l*5.0); coverage*=life*smoothstep(.015,.25,l+.08); color+=pigment.rgb*(.8+uPulse*.7)*coverage;weight+=coverage;alpha=max(alpha,coverage); } float mixAmount=clamp(uAmount,0.0,1.0); vec3 artwork=mix(base.rgb*.25,color/max(weight,.0001),smoothstep(.015,.22,weight)); float a=mix(base.a,max(base.a*.35,alpha),mixAmount); gl_FragColor=vec4(mix(base.rgb,artwork,mixAmount),a); }