[ 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":"Iridescent wormhole — neon wireframe rings rushing through a swirling oil-slick film, thin-film interference racing toward a wet vanishing point.","CREDIT":"petrol x hyperspace","CATEGORIES":["generative"],"INPUTS":[{"NAME":"sides","TYPE":"float","DEFAULT":12.0,"MIN":4.0,"MAX":28.0},{"NAME":"speed","TYPE":"float","DEFAULT":0.7,"MIN":0.0,"MAX":3.0},{"NAME":"swirl","TYPE":"float","DEFAULT":1.5,"MIN":0.0,"MAX":4.0},{"NAME":"ringDensity","TYPE":"float","DEFAULT":14.0,"MIN":4.0,"MAX":30.0}]}*/// iridescent thin-film colorvec3thinFilm(float t) {
// approximate thin-film interferencevec3 col;
col.r = 0.5 + 0.5 * sin(t * 6.28318 + 0.0);
col.g = 0.5 + 0.5 * sin(t * 6.28318 + 2.094);
col.b = 0.5 + 0.5 * sin(t * 6.28318 + 4.188);
return col;
}
// polygon distance: returns signed distance to a regular polygon outlinefloatpolygonRing(vec2 p, float r, float n, float thickness) {
float an = 6.28318 / n;
float bn = mod(atan(p.x, p.y), an) - an * 0.5;
vec2 q = vec2(cos(bn), sin(bn)) * length(p);
returnabs(length(q) - r) - thickness;
}
voidmain() {
vec2 uv = isf_FragNormCoord;
vec2 res = RENDERSIZE;
vec2 p = (uv - 0.5) * vec2(res.x / res.y, 1.0);
float t = TIME * speed;
// swirl coordinatesfloat r = length(p);
float a = atan(p.y, p.x);
a += swirl * (1.0 / (r + 0.15)) * 0.3;
vec2 sp = vec2(cos(a), sin(a)) * r;
// perspective: depth based on radiusfloat depth = 1.0 / (r + 0.08);
// rushing ringsfloat ringPhase = depth * ringDensity - t * 3.0;
float rings = fract(ringPhase);
// wireframe polygon ringfloat n = sides;
float ringR = 0.0; // we evaluate at current radiusfloat polySDF = polygonRing(sp, r, n, 0.0);
// distance to nearest ring boundaryfloat dr = abs(rings - 0.5) * 2.0; // 0 at center of band, 1 at edgefloat wire = smoothstep(0.0, 0.15, dr) * (1.0 - smoothstep(0.85, 1.0, dr));
// Actually let's make thin wiresfloat wireIntensity = 1.0 - smoothstep(0.0, 0.08, abs(fract(ringPhase) - 0.5));
// polygon edge fallofffloat an = 6.28318 / n;
float bn = mod(atan(sp.x, sp.y), an) - an * 0.5;
float edgeDist = abs(sin(bn)); // 0 at vertices, 1 at edge midpoints// Actually for wireframe polygon, we want lines along edges// Let me reconsider — combine rings + polygon shapefloat polyEdge = abs(cos(bn * n * 0.5)); // pulse at edges// Combine: rushing rings modulated by polygon angular patternfloat pattern = wireIntensity * (0.4 + 0.6 * pow(abs(cos(bn * n)), 3.0));
// thin-film iridescencefloat filmT = ringPhase * 0.1 + a * 0.3 + t * 0.05;
vec3 irid = thinFilm(filmT);
// background oil-slick swirlfloat bgT = r * 8.0 + a * 2.0 + t * 0.3;
vec3 bgIrid = thinFilm(bgT * 0.15);
float bgFade = smoothstep(0.0, 0.5, r) * 0.3;
vec3 bg = bgIrid * bgFade;
// glowfloat glow = pattern * (0.8 + 0.4 * sin(ringPhase * 3.14));
vec3 col = bg + irid * glow * 1.5;
// center vanishing point brightening
col += vec3(0.3, 0.4, 0.6) * smoothstep(0.15, 0.0, r) * 0.5;
// vignette
col *= 1.0 - smoothstep(0.6, 1.4, r) * 0.7;
// tone
col = pow(col, vec3(0.85));
gl_FragColor = vec4(col, 1.0);
}
BROKEN ✗(you'll be asked to log in)
forking #ecrjrakv — 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.