[ 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":"Aurora over a mountain range, mirrored in a still rippling lake under a field of stars.","CREDIT":"claude-opus-4-8","INPUTS":[{"NAME":"speed","TYPE":"float","DEFAULT":0.5,"MIN":0.0,"MAX":2.0},{"NAME":"bands","TYPE":"float","DEFAULT":5.0,"MIN":2.0,"MAX":9.0},{"NAME":"intensity","TYPE":"float","DEFAULT":0.8,"MIN":0.2,"MAX":1.6},{"NAME":"hue","TYPE":"float","DEFAULT":0.4,"MIN":0.0,"MAX":1.0}]}*/constfloat HY = 0.46; // horizon height (uv.y)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.0 + 3.0; a *= 0.5; } return s; }
vec3palette(float t){ return0.5 + 0.5 * cos(6.28318 * (t + vec3(0.0, 0.33, 0.67) + hue)); }
// mountain top height above the horizon for column x (two stacked ridges)floatridge(float x){
float far = 0.06 + 0.05 * fbm(vec2(x * 2.2 + 11.0, 0.0));
float near = 0.02 + 0.11 * fbm(vec2(x * 1.4 - 5.0, 7.0));
returnmax(far, near);
}
vec3auroraCol(float x, float y, float t){
vec3 c = vec3(0.0);
for (int i = 0; i < 9; i++){
if (float(i) >= bands) break;
float fi = float(i);
float yC = 0.64 + 0.07 * fi;
float wob = 0.10 * noise(vec2(x * 1.5 + fi, t * 0.5 + fi * 3.0)) + 0.04 * sin(x * 3.0 + t + fi);
float d = abs(y - (yC + wob));
float curt = exp(-d * 15.0);
curt *= 0.55 + 0.45 * noise(vec2(x * 22.0, t + fi * 5.0)); // vertical streaks
c += curt * palette(0.12 * fi + 0.3 + 0.1 * x) * intensity;
}
return c * smoothstep(HY - 0.02, HY + 0.12, y);
}
// the scene above the horizon (sky + stars + aurora + mountains) at coordinate (x, y)vec3sceneAbove(vec2 q, float t){
float x = q.x, y = q.y;
vec3 col = mix(vec3(0.03, 0.04, 0.10), vec3(0.0, 0.0, 0.015), clamp((y - 0.4) / 0.6, 0.0, 1.0));
// stars (upper sky)vec2 g = floor(vec2(x, y) * 130.0);
float h = hash(g);
col += smoothstep(0.986, 1.0, h) * (0.6 + 0.4 * sin(t * 3.0 + h * 40.0)) * smoothstep(0.5, 0.75, y);
// aurora
col += auroraCol(x, y, t);
// mountains (solid below the ridge outline)float top = HY + ridge(x);
if (y < top){
float k = top - y; // depth into the mountain bodyvec3 mnt = mix(vec3(0.05, 0.06, 0.11), vec3(0.01, 0.01, 0.03), smoothstep(0.0, 0.16, k));
mnt += auroraCol(x, top, t) * 0.35 * exp(-k * 26.0); // aurora rim-light on the peaks
col = mnt;
}
return col;
}
voidmain(){
vec2 uv = gl_FragCoord.xy / RENDERSIZE;
float asp = RENDERSIZE.x / RENDERSIZE.y;
float x = (uv.x - 0.5) * asp;
float t = TIME * speed;
vec3 col;
if (uv.y >= HY){
col = sceneAbove(vec2(x, uv.y), t);
} else {
// lake: mirror the scene across the horizon with ripple distortionfloat depth = HY - uv.y; // 0 at shore -> grows downwardfloat ripple = 0.010 * sin(uv.y * 55.0 - t * 2.0) * (0.3 + depth * 1.5);
ripple += 0.006 * (fbm(vec2(x * 7.0, uv.y * 18.0 - t)) - 0.5);
vec2 rc = vec2(x + ripple, 2.0 * HY - uv.y + ripple * 0.4);
vec3 refl = sceneAbove(rc, t);
refl *= vec3(0.62, 0.72, 0.92); // water tint
refl = mix(refl, vec3(0.0, 0.02, 0.05), smoothstep(0.0, HY, depth) * 0.55); // fade with depthfloat spark = pow(max(0.0, fbm(vec2(x * 26.0, uv.y * 26.0 - t * 3.0)) - 0.55), 2.0);
refl += spark * 0.5 * vec3(0.7, 0.9, 1.0); // specular glints
col = refl;
}
col *= 1.0 - 0.25 * dot(uv - 0.5, uv - 0.5); // vignette
col = pow(max(col, 0.0), vec3(0.9));
gl_FragColor = vec4(col, 1.0);
}
BROKEN ✗(you'll be asked to log in)
forking #8dmk070r — 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.