[ 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":"Solar veil — warm aurora curtains whose rays are combed by a curl-noise flow, draping and rippling like a fire sky.","CREDIT":"claude-opus-4-8","INPUTS":[{"NAME":"bands","TYPE":"float","DEFAULT":3.0,"MIN":2.0,"MAX":7.0},{"NAME":"flowAmt","TYPE":"float","DEFAULT":0.6,"MIN":0.0,"MAX":1.5},{"NAME":"intensity","TYPE":"float","DEFAULT":0.9,"MIN":0.3,"MAX":1.8},{"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 < 3; i++){ s += a * noise(p); p = p * 2.0 + 3.0; a *= 0.5; } return s; }
// flow: mostly vertical (curtain rays) with curl-noise swayvec2flow(vec2 p, float t){
float a = 1.5708 + (fbm(p * 1.6 + vec2(0.0, t * 0.2)) - 0.5) * 3.0 * flowAmt;
returnvec2(cos(a), sin(a));
}
vec3fire(float h){
h = clamp(h, 0.0, 1.0);
vec3 c = mix(vec3(0.05, 0.0, 0.02), vec3(0.6, 0.07, 0.03), smoothstep(0.0, 0.3, h));
c = mix(c, vec3(1.0, 0.4, 0.05), smoothstep(0.3, 0.6, h));
c = mix(c, vec3(1.0, 0.85, 0.4), smoothstep(0.6, 0.85, h));
c = mix(c, vec3(1.0, 1.0, 0.92), smoothstep(0.85, 1.0, h));
return c;
}
voidmain(){
vec2 uv = gl_FragCoord.xy / RENDERSIZE;
vec2 p = (gl_FragCoord.xy - 0.5 * RENDERSIZE) / RENDERSIZE.y;
float t = TIME * speed;
// curtain RAYS: anisotropic vertical streaks (high-x / low-y freq) warped by the flow swayfloat sway = (fbm(vec2(p.x * 1.4, t * 0.25)) - 0.5) * 2.6 * flowAmt;
float rayX = p.x + sway * 0.45;
float rays = noise(vec2(rayX * 26.0, p.y * 1.1 - t * 0.6));
rays += 0.5 * noise(vec2(rayX * 55.0, p.y * 0.8 + t * 0.4)); // finer rays
rays = pow(clamp(rays * 0.95 - 0.15, 0.0, 1.0), 1.5);
rays = 0.08 + 1.0 * rays; // darker valleys -> rays read as distinct// aurora curtains: a few wavy horizontal bands, taller/brighter at the basefloat curtain = 0.0, baseHeat = 0.0;
for (int i = 0; i < 7; i++){
if (float(i) >= bands) break;
float fi = float(i);
float yC = -0.4 + 0.26 * fi;
float wob = 0.11 * fbm(vec2(p.x * 1.2 + fi, t * 0.4 + fi * 3.0)) + 0.05 * sin(p.x * 2.5 + t + fi);
float d = p.y - (yC + wob);
float c = exp(-abs(d) * 13.0) * smoothstep(0.6, -0.15, d);
curtain += c;
baseHeat = max(baseHeat, c * smoothstep(0.1, -0.25, d)); // hottest at the curtain foot
}
// night sky + starsvec3 col = mix(vec3(0.03, 0.01, 0.04), vec3(0.0, 0.0, 0.015), uv.y);
col += smoothstep(0.992, 1.0, hash(floor(gl_FragCoord.xy))) * 0.5;
// warm flowing curtains — hue runs hot (white/yellow) at the base to red at the tipsfloat lum = curtain * rays;
float heat = clamp(0.22 + 1.6 * baseHeat + 0.3 * lum, 0.0, 1.0);
col += fire(heat) * lum * intensity * 2.0;
col *= 1.0 - 0.35 * dot(p, p); // vignette -> focal curtains
col = col / (1.0 + 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 #wr1hpyqx — 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.