[ 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":"Wet neon — a few neon signs smeared into dark rippling water, wavering and broken by the surface waves.","CREDIT":"claude-opus-4-8","INPUTS":[{"NAME":"ripple","TYPE":"float","DEFAULT":0.5,"MIN":0.0,"MAX":1.5},{"NAME":"waves","TYPE":"float","DEFAULT":34.0,"MIN":12.0,"MAX":70.0},{"NAME":"glow","TYPE":"float","DEFAULT":0.8,"MIN":0.2,"MAX":1.6},{"NAME":"speed","TYPE":"float","DEFAULT":1.0,"MIN":0.0,"MAX":3.0}]}*/floathash(vec2 p){ p = fract(p * vec2(123.34, 456.21)); p += dot(p, p + 45.32); returnfract(p.x * p.y); }
floatnoise(vec2 p){
vec2 i = floor(p), f = fract(p); f = f * f * (3.0 - 2.0 * f);
float a = hash(i), b = hash(i + vec2(1.0, 0.0)), c = hash(i + vec2(0.0, 1.0)), d = hash(i + vec2(1.0, 1.0));
returnmix(mix(a, b, f.x), mix(c, d, f.x), f.y);
}
// a soft neon column of colour `col` centred at x = cxvec3bar(float x, float cx, float w, vec3 col){
float d = (x - cx) / w;
return col * exp(-d * d);
}
vec3lights(float x){
vec3 c = vec3(0.0);
c += bar(x, 0.20, 0.045, vec3(1.0, 0.10, 0.65)); // magenta
c += bar(x, 0.40, 0.030, vec3(0.10, 0.95, 1.0)); // cyan
c += bar(x, 0.58, 0.055, vec3(0.45, 1.0, 0.20)); // green
c += bar(x, 0.80, 0.035, vec3(1.0, 0.55, 0.05)); // amberreturn c;
}
voidmain(){
vec2 uv = gl_FragCoord.xy / RENDERSIZE;
float t = TIME * speed;
float depth = 1.0 - uv.y; // 0 at top, 1 at bottom (deeper into reflection)// multi-octave horizontal wander (the reflection sways with the swell), stronger deeper downfloat wob = 0.055 * sin(uv.y * 9.0 - t * 1.3)
+ 0.030 * sin(uv.y * 21.0 + t * 0.8)
+ 0.025 * (noise(vec2(uv.y * 7.0, t * 0.7)) - 0.5);
wob *= ripple * (0.25 + 1.1 * depth);
float x = uv.x + wob;
// horizontal smear — neon bleeds sideways on the wet surfacevec3 col = lights(x) * 0.5 + lights(x - 0.018) * 0.25 + lights(x + 0.018) * 0.25;
// ripple bands break the columns into wavy horizontal streaksfloat band = sin(uv.y * waves + 4.5 * sin(uv.x * 2.5 + t * 0.6) - t * 2.0);
band += 0.5 * sin(uv.y * waves * 2.3 - t * 3.0); // finer secondary ripple
band = 0.5 + 0.5 * clamp(band, -1.0, 1.0);
col *= 0.18 + 1.2 * pow(band, 2.2);
col *= 0.45 + 0.55 * depth;
// specular glints where the surface crests catch the lightfloat crest = pow(band, 8.0);
col += col * crest * 0.8;
col *= glow;
col += (lights(x) * 0.5 + lights(x - 0.018) * 0.25 + lights(x + 0.018) * 0.25) * 0.07; // faint core
col = col / (1.0 + 0.5 * 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 #8gz94nqz — 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.