JS1K

#2: the original

Source for demo by Aki Jäntti. See also description.

M=Math;R=128;K=R*R;Z=K*R;c=document.body.children[0];c.width=R*4;c.height=R*2;c.style.border="2px solid #000";H=c.getContext("2d");a=[];for(i=Z;i--;)a[i]=M.random();F=32;C=[];for(i=F;i--;)C[i]=(1-M.cos(i/F*M.PI))/2;U=F;for(f=2;f<64;f*=2){U/=2;for(z=0;z<R;z+=f){A=z<R-f?z+f:0;for(y=0;y<R;y+=f){O=y<R-f?y+f:0;for(x=0;x<R;x+=f){L=x<R-f?x+f:0;for(i=f;i--;)for(j=f;j--;)for(k=f;k--;){Q=C[j*U];W=C[i*U];E=C[k*U];J=z*K+k*K+y*R+j*R+x+i;T=1-W;B=z*K;N=A*K;Y=y*R;V=O*R;a[J]=a[J]/2+(((a[B+Y+x]*T+a[B+Y+L]*W)*(1-Q)+(a[B+V+x]*T+a[B+V+L]*W)*Q)*(1-E)+((a[N+Y+x]*T+a[N+Y+L]*W)*(1-Q)+(a[N+V+x]*T+a[N+V+L]*W)*Q)*E)/2}}}}}for(i=Z;i--;){k=a[i];k=k>0.5?0.5:k<0.3?0.3:k;a[i]=~~(255*M.cos((k*5-1.5)/2*M.PI))}I=H.getImageData(0,0,R*4,R);D=I.data;for(y=R;y--;){X=1-+y/R/5;H.fillStyle="rgb(0,"+~~(X*220)+",0)";H.fillRect(0,y+R,R*4,1)}S=0;setInterval(function(){S++;for(y=R;y--;){P=R*y;X=0.7+y/R/5;G=1/(0.2+y/R);for(x=R*4;x--;)i=y*R*16+x*4,D[i]=a[(~~(x/2/G-y)+S+P+S*3*R+~~(S/2)*K)%Z]*X,D[i+1]=D[i+2]=255*X,D[i+3]=255}I.data=D;H.putImageData(I,0,0)},50)