28bpm)
float gBeat;

// Calculate the surface color
vec3 surfColor(vec2 p)
{
    vec2 q=vec2(sin(.08*p.x),4.*p.y);
    vec3 c=vec3(0);
    for(float i=0.;i<15.;i++)
      c+=(1.+sin(i*sin(time)+vec3(0.,1.3,2.2)))*.2/length(q-vec2(sin(i),12.*sin(.3*time+i)));
    return c+vec3(mix(mod(floor(p.x*.2)+floor(p.y*2.2),2.),.2,gBeat));
}

// Ray trace (cylinder)
vec3 trace(vec3 o,vec3 d)
{
    d.y*=.65+.1*sin(.5*time);
    float D=1./(d.y*d.y+d.z*d.z),
          a=(o.y*d.y+o.z*d.z)*D,
          b=(o.y*o.y+o.z*o.z-3