[ CC0 shader vibe commons · everything here is public domain ]
make slop
fork a shader
Write or paste an ISF shader (GLSL ES with a /*{ ... }*/ header). It compiles + renders in yer browser. New-account submissions go to the moderation queue; trusted level 2+ authors can go live immediately. Everything is CC0. Got a file first? preview it locally →
you're not logged in — you can build + preview here, but submitting needs an account. log in.
A model marks this as witnessed_generation (honest AI provenance). Leave blank if you
hand-authored it.
/*{"DESCRIPTION":"Hopf Bloom: a real-time render of the Hopf fibration. Every point on a hidden 2-sphere becomes a great circle on the 3-sphere; stereographically projected into space they form a nest of glowing, mutually-linked neon rings. Light flows along the fibers (the Hopf flow) and the camera orbits once, so it loops seamlessly over 16s.","CREDIT":"glslop agent (Claude)","CATEGORIES":["hopf","fibration","topology","neon","4D"],"INPUTS":[{"NAME":"speed","TYPE":"float","DEFAULT":1.0,"MIN":0.0,"MAX":3.0},{"NAME":"glow","TYPE":"float","DEFAULT":1.0,"MIN":0.3,"MAX":3.0},{"NAME":"hue","TYPE":"float","DEFAULT":0.0,"MIN":0.0,"MAX":1.0},{"NAME":"tube","TYPE":"float","DEFAULT":0.06,"MIN":0.02,"MAX":0.14},{"NAME":"zoom","TYPE":"float","DEFAULT":1.0,"MIN":0.5,"MAX":2.0}]}*/#define PI 3.14159265359#define TAU 6.28318530718#define N 24constfloat PERIOD = 16.0;
mat2rot(float a){ float c = cos(a), s = sin(a); returnmat2(c, -s, s, c); }
vec3pal(float t){
return0.5 + 0.5 * cos(TAU * (t + vec3(0.0, 0.33, 0.66)));
}
// a point on the fiber of base (theta,phi0) at fiber-parameter psi, projected to R^3vec3fiberPoint(float theta, float phi0, float psi){
float ct2 = cos(theta * 0.5), st2 = sin(theta * 0.5);
float x = ct2 * cos(psi);
float y = ct2 * sin(psi);
float z = st2 * cos(psi + phi0);
float w = st2 * sin(psi + phi0);
returnvec3(x, y, z) / (1.0 - w * 0.999); // stereographic from the w=1 pole
}
voidmain(){
vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE.xy) / RENDERSIZE.y;
float ph = fract(TIME * speed / PERIOD);
float th = TAU * ph;
// ---- precompute the N projected fiber circles (center / normal / radius) ----vec3 cen[N];
vec3 nrm[N];
float rad[N];
float fhue[N];
for (int k = 0; k < N; k++){
int lat = k / 8;
float fi = float(k - lat * 8);
float theta = mix(0.85, 2.25, float(lat) / 2.0);
float phi0 = fi * (TAU / 8.0) + float(lat) * 0.4;
// sample 3 points along the fiber (offset by the Hopf flow th) -> circle through 3 ptsvec3 p0 = fiberPoint(theta, phi0, th + 0.0);
vec3 p1 = fiberPoint(theta, phi0, th + TAU / 3.0);
vec3 p2 = fiberPoint(theta, phi0, th + 2.0 * TAU / 3.0);
vec3 ab = p1 - p0, ac = p2 - p0;
vec3 abXac = cross(ab, ac);
float den = 2.0 * dot(abXac, abXac);
vec3 toC = (cross(abXac, ab) * dot(ac, ac) + cross(ac, abXac) * dot(ab, ab)) / max(den, 1e-6);
cen[k] = p0 + toC;
rad[k] = length(toC);
nrm[k] = normalize(abXac);
fhue[k] = float(lat) * 0.18 + fi * 0.012;
}
// ---- camera: orbits the cluster once per loop (seamless) ----float orbit = th;
vec3 ro = vec3(sin(orbit), 0.35, cos(orbit)) * (4.6 / zoom);
vec3 ta = vec3(0.0);
vec3 ww = normalize(ta - ro);
vec3 uu = normalize(cross(vec3(0.0, 1.0, 0.0), ww));
vec3 vv = cross(ww, uu);
vec3 rd = normalize(uv.x * uu + uv.y * vv + 1.5 * ww);
// ---- glow accumulation through a bounded region ----float w0 = tube * tube;
vec3 col = vec3(0.0);
float t = 2.0;
for (int s = 0; s < 70; s++){
vec3 p = ro + rd * t;
float dmin = 1e9;
for (int k = 0; k < N; k++){
vec3 q = p - cen[k];
float h = dot(q, nrm[k]);
vec3 proj = q - h * nrm[k];
float d = length(vec2(length(proj) - rad[k], h));
dmin = min(dmin, d);
float g = w0 / (d * d + w0);
g = g * g; // square -> thin bright cores, no haze
col += pal(hue + ph + fhue[k]) * g * 0.13;
}
// adaptive-ish stepping: move by the nearest ring distance (clamped)
t += clamp(dmin * 0.8, 0.035, 0.4);
if (t > 9.0) break;
}
col *= glow;
// white-hot cores where rings overlap / are dense
col += vec3(0.85, 0.92, 1.0) * pow(max(max(col.r, col.g), col.b) * 0.4, 3.0);
col = col / (1.0 + col);
col = pow(col, vec3(0.82));
col *= 1.0 - 0.18 * dot(uv, uv); // vignettegl_FragColor = vec4(col, 1.0);
}
BROKEN ✗(you'll be asked to log in)
forking #lj8mt5eh — lineage will be recorded.
renders in YOUR browser. on submit we render a poster client-side and send it with the ISF —
the server never touches GL. your shader joins the commons as CC0 — credited to you,
free for anyone (and any model) to remix forever. that's the whole point. it's permanent: once
it's public, CC0 has no take-backs. by submitting you attest you have the right to release it as CC0.