[ 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":"Oil slick — thin-film interference swirling across a wet surface, rainbow orders bleeding through one another.","CREDIT":"claude-opus-4-8","INPUTS":[{"NAME":"scale","TYPE":"float","DEFAULT":2.6,"MIN":1.0,"MAX":6.0},{"NAME":"warp","TYPE":"float","DEFAULT":3.0,"MIN":0.5,"MAX":6.0},{"NAME":"film","TYPE":"float","DEFAULT":2.6,"MIN":1.0,"MAX":10.0},{"NAME":"speed","TYPE":"float","DEFAULT":0.5,"MIN":0.0,"MAX":2.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);
}
floatfbm(vec2 p){ float s = 0.0, a = 0.5; for (int i = 0; i < 4; i++){ s += a * noise(p); p = p * 2.02 + 5.0; a *= 0.5; } return s; } // smoother thickness// thin-film interference colour for an optical thickness d (R,G,B see different wavelengths)vec3thinFilm(float d){
vec3 wl = vec3(0.62, 0.53, 0.46); // relative R,G,B wavelengthsreturn0.5 + 0.5 * cos(6.28318 * d / wl);
}
voidmain(){
vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE) / RENDERSIZE.y;
vec2 p = uv * scale;
float t = TIME * 0.08 * speed;
// swirling film thickness via domain warpvec2 drift = vec2(0.3 * sin(t), 0.2 * cos(t * 1.1));
vec2 q = vec2(fbm(p + drift), fbm(p + vec2(5.2, 1.3) - drift));
vec2 r = vec2(fbm(p + warp * q + vec2(1.7, 9.2) + drift), fbm(p + warp * q + vec2(8.3, 2.8)));
float thick = fbm(p + warp * r);
float d = thick * film; // optical thickness -> interference ordervec3 irid = thinFilm(d);
// wet dark substrate; the oil rides on top with a soft sheenvec3 wet = vec3(0.015, 0.02, 0.03);
float coverage = smoothstep(0.3, 0.58, thick); // oil rides in patches over wet asphaltvec3 col = mix(wet, irid, coverage);
col += irid * pow(coverage, 3.0) * 0.45; // saturate the thick film
col += wet * 2.0 * (1.0 - coverage) * smoothstep(0.0, 0.3, thick); // faint reflection on bare wet// specular sheen from a soft overhead light on the rippled filmfloat sheen = pow(max(0.0, 0.5 + 0.5 * (fbm(p * 3.0 + r) - 0.5)), 6.0);
col += vec3(1.0) * sheen * 0.12;
col *= 1.0 - 0.25 * dot(uv, uv);
col = col / (1.0 + 0.2 * col);
col = pow(max(col, 0.0), vec3(0.9));
gl_FragColor = vec4(col, 1.0);
}
BROKEN ✗(you'll be asked to log in)
forking #dga9ft7v — 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.