[ 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":"Hex reactor — a hexagonal grid lit by interfering wavefronts, each cell glowing with a rotating spoke and blooming hot nodes.","CREDIT":"claude-opus-4-8","INPUTS":[{"NAME":"scale","TYPE":"float","DEFAULT":7.5,"MIN":3.0,"MAX":16.0},{"NAME":"speed","TYPE":"float","DEFAULT":1.0,"MIN":0.0,"MAX":3.0},{"NAME":"glow","TYPE":"float","DEFAULT":0.8,"MIN":0.2,"MAX":1.8},{"NAME":"hue","TYPE":"float","DEFAULT":0.55,"MIN":0.0,"MAX":1.0}]}*/constfloat SQ3 = 1.7320508;
mat2rot(float a){ float c = cos(a), s = sin(a); returnmat2(c, -s, s, c); }
floathash(vec2 p){ p = fract(p * vec2(127.1, 311.7)); p += dot(p, p + 34.5); returnfract(p.x * p.y); }
vec3palette(float t){ return0.5 + 0.5 * cos(6.28318 * (t + vec3(0.0, 0.33, 0.67) + hue)); }
// nearest hex-cell local coords (.xy) + cell id (.zw)vec4hexCoords(vec2 p){
vec2 r = vec2(1.0, SQ3), h = r * 0.5;
vec2 a = mod(p, r) - h;
vec2 b = mod(p - h, r) - h;
vec2 gv = dot(a, a) < dot(b, b) ? a : b;
returnvec4(gv, p - gv);
}
voidmain(){
vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE) / RENDERSIZE.y;
float zoom = scale * (1.0 + 0.06 * sin(TIME * 0.3));
vec2 pp = uv * zoom * rot(0.05 * sin(TIME * 0.15));
vec4 hc = hexCoords(pp);
vec2 gv = hc.xy, id = hc.zw;
// distance to hex edge (0 at center .. 0.5 at edge)vec2 a = abs(gv);
float edge = max(dot(a, normalize(vec2(1.0, SQ3))), a.x);
float dEdge = 0.5 - edge;
// interference field: three moving wave sources, sampled at the cell centrevec2 cc = id / zoom;
float field = 0.0;
for (int s = 0; s < 3; s++){
float fs = float(s);
vec2 src = 0.75 * vec2(sin(TIME * 0.5 + fs * 2.1), cos(TIME * 0.4 + fs * 1.7));
field += sin(length(cc - src) * 7.0 - TIME * 2.0 * speed + fs * 1.7);
}
float lit = 0.5 + 0.5 * field / 3.0; // 0..1 cell brightness
lit = pow(lit, 1.5);
float rnd = hash(id);
vec3 c = palette(0.18 * lit + 0.12 * length(id) + 0.05 * TIME + 0.2 * rnd);
vec3 col = vec3(0.0);
// glowing cell fill, driven by interference
col += smoothstep(0.16, 0.46, dEdge) * c * (0.12 + 1.1 * lit * lit);
// bright beveled edge ring
col += smoothstep(0.07, 0.0, dEdge) * palette(0.3 + 0.15 * lit) * (0.25 + 0.9 * lit);
// rotating spoke inside each lit cell — per-cell phasevec2 rgv = rot(TIME * 0.6 * speed + rnd * 6.28) * gv;
float spoke = smoothstep(0.05, 0.0, abs(rgv.x)) * smoothstep(0.42, 0.2, length(gv));
col += spoke * palette(0.55 + 0.2 * lit) * lit * 0.8;
// hot-node bloom on the brightest cells
col += smoothstep(0.85, 1.0, lit) * 0.6 * palette(0.6 + 0.1 * rnd);
col += pow(lit, 3.0) * 0.18 * c; // soft neighbour bleed
col *= 1.0 - 0.3 * dot(uv, uv); // vignette
col *= glow;
col = col / (1.0 + 0.7 * col);
col = pow(max(col, 0.0), vec3(0.85));
gl_FragColor = vec4(col, 1.0);
}
BROKEN ✗(you'll be asked to log in)
forking #ptojdhva — 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.